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 |