firsthand

Architectural Decision Records

Every decision with performance or semantic consequences is recorded here using the same sections: Problem, Constraints, Options considered, Chosen design, Performance implications, Memory implications, DX implications, Rejected alternatives. “Because it is simpler” is not an accepted justification where performance or semantics are affected.

ADR Title Status
0001 Fine-grained reactivity instead of component re-render accepted
0002 Doubly-linked reusable edges instead of Sets or arrays accepted
0003 Hostless components by default, custom element host opt-in accepted, re-validate in Phase 10
0004 Component identity from symbols and build ids accepted
0005 Reactive props via accessor descriptors accepted
0006 Synchronous flush with explicit batching accepted
0007 Light DOM by default, Shadow DOM opt-in accepted, re-validate in Phase 10
0008 A logical owner tree, independent of the DOM accepted
0009 Cloned templates plus thunk-compiled dynamic parts accepted
0010 Keyed list reconciliation chosen by benchmark accepted (LIS, by measurement)
0011 Eager unlinking, and leak tests that can fail accepted
0012 Native events with delegation, no synthetic events accepted
0013 Routes as data, and route code loaded on demand accepted
0014 Invalidation by tags, not by cache keys superseded by 0022
0015 A prop change is a custom property, not a new class accepted
0016 Web components first, and a React bridge for the rest accepted
0017 Element types this framework does not own accepted
0018 Deep reactivity beside signals, not inside them accepted
0019 Strict reactivity, paid for at build time accepted
0020 Devtools that production does not pay for accepted
0021 Localisation as an adapter, not a library accepted
0022 Resources and invalidation, with caching left to the transport accepted
0023 One cache, at the transport edge accepted
0024 An invalidation outlives the resource that was watching accepted
0025 Tags as cache metadata, never as cache identity accepted
0026 A function is a reactive scope, one level up accepted
0027 Server rendering as a second compiler target, hydration adopts accepted
0028 Async work has an owner, and a task is the adapter accepted
0029 A mutation is not a read, so it does not abort by default accepted