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 classList">
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