01 / EVOLUTION
A decade measured in ideas, not major versions.
The public file history shows concentrated moments of refinement. Each step adds leverage while keeping the same browser-first center.
2015First public roots
A tiny vocabulary for the DOM
The earliest commits establish the direct style: select nodes, wait for readiness, attach behavior, create elements, and move on.
- Zero compilation
- Global, memorable helpers
- Native DOM underneath
id · first · all · style · create
2017The 2KB identity
Events and readiness crystallize
The file announces itself as “Sheriff’s 2KB JS framework” and consolidates its event and startup primitives around a deliberately small API.
- Queued
ready()
- Collection-aware
on()
- Lightweight A/B hooks
on(el, event, handler)
2018Components without ceremony
Convention-driven extension arrives
Node.extends and NodeList.extends turn ordinary elements into component instances, wiring on* methods to browser events.
addEventListener
- One-shot events
- Class-name activation
<ul class="extends classListItem">
2022Small, safer, still direct
The modern snapshot
Startup moves to DOMContentLoaded, component lookup drops dynamic evaluation, and the public API remains readable in one screen.
- No runtime dependencies
- No virtual DOM
- No framework-owned state model
document + this
2026One core · one include
A standalone core and a combined HTTP distribution
/framework.v2026.js keeps the modern core independently available. Version 2026.2 resolves both window-backed constructors and bare top-level class declarations; /sheriff.http.js embeds that exact core before its labeled HTTP and cache source.
extends className detects bare class Name {}
- Core remains independently usable
- HTTP adds cached queries and mutations
Sheriff.http · —