@banksia/signals is an ultra-fast reactivity engine built for the modern web, empowering engineers to build pure domain models that adapt to any framework.
State management often suffers from four fundamental architectural limitations:
@banksia/signals combines the mathematical efficiency of fine-grained dependency graphs with the ergonomics of pure JavaScript state:
Array, Map, and Set operations without coarse invalidation cascades.return makeReactive(this)), preserving instanceof, prototype methods, and getters without decorators.| Dimension | Coarse-Grained State Stores | Accessor-Wrapped Signals | @banksia/signals (Pure Domain Signals) |
|---|---|---|---|
| Object Mutability | Immutable clones ({...state}) or action dispatchers |
Wrapped accessors (sig.value, sig()); complex nested models need wrappers |
Direct property reads & writes with zero-decorator constructor self-reactivity |
| Collection Traps | Manual array copying or wrapper classes | Shallow wrapping; manual immutability ([...arr, item]) |
Granular collection reactions for native Array, Map, and Set |
| Update Granularity | Coarse component re-renders or manual selector memoization | Fine-grained leaf updates | Surgical property-level dependency tracking & automatic microtask batching |
| Bundle Size & Deps | 10–50+ kB, multiple dependencies | 1–3 kB core, but complex domain models require heavy add-on stores | ~2.5 kB min+brotli, ZERO external runtime dependencies |
| Framework Agnostic | Usually tied to specific UI runtimes or custom bindings | Often tied to a specific view library | Framework-agnostic domain layer with modular adapters for React, Lit, Solid, Vanilla |
| Observability | Heavy profiler middleware or browser extension dependencies | Ad-hoc console logging | First-class observability engine (global hooks, scoped observers, telemetry hubs, DevTools & agentic tooling) |
@banksia/signals and explore supported framework peer dependencies.