Reactivity adapter capability matrix
Generated 2026-07-23.
| Adapter | effects | effectOwnership | signalEquality | computedEquality | batching | deterministicFlush | directObservation | writableComputed | graphInspection | serverSnapshots | Note |
|---|---|---|---|---|---|---|---|---|---|---|---|
| vanilla | yes | yes | yes | no | yes | yes | yes | no | no | no | reference implementation |
| angular (no Injector) | no | no | yes | yes | no | no | no | no | no | no | effect-dependent features disabled; source-verified by reactivity-angular.spec.ts, not live-imported (see script comment) |
| angular (with Injector) | yes | yes | yes | yes | no | no | no | no | no | no | source-verified by reactivity-angular.spec.ts, not live-imported (see script comment) |
| react | yes | yes | yes | no | yes | yes | yes | no | no | no | = vanilla (no signal primitive of its own) |
| preact | yes | yes | yes | no | yes | yes | yes | no | no | no | = vanilla (no signal primitive of its own) |
| svelte | yes | yes | yes | no | yes | yes | yes | no | no | no | = vanilla (no signal primitive of its own); toStore() bridges to a Readable |
| lit | yes | yes | yes | no | yes | yes | yes | no | no | no | = vanilla (no signal primitive of its own) |
| vue | yes | yes | yes | no | yes | yes | yes | no | no | no | native @vue/reactivity; effect() scheduler + createScope() via effectScope() (Phase P2, 2026-07-23) |
| solid | yes | yes | yes | yes | yes | yes | yes | no | no | no | native createSignal/createMemo/createEffect; equals comparator honored on both signal and memo (Phase P3, 2026-07-23) |
“—” means the adapter has no capabilities object yet (pre-Milestone-1 shape) or could not be constructed by this script — not the same as every capability being false.