Reactive state with fine-grained signals for ReScript
A lightweight, high-performance reactive signals library with zero dependencies, fine-grained reactivity, and full type safety.
Everything you need for reactive state
Signals, computed values, and effects — three powerful primitives for predictable, efficient reactivity.
Zero Dependencies
Ships with no runtime dependencies. Minimal bundle size for maximum performance in production.
Get StartedFine-Grained Reactivity
Automatic dependency tracking ensures only affected computations re-run. No unnecessary re-renders.
Learn about SignalsType Safe
Built for ReScript with full type inference. Catch errors at compile time, not at runtime.
View API ReferenceGlitch-Free Updates
Computed values are recalculated in topological order, preventing intermediate inconsistent states.
Computed Values
Derive reactive state with automatic caching. Values are lazily evaluated and only recompute when dependencies change.
Computed docsEffect System
Run side effects when dependencies change, with automatic cleanup and disposal for resource management.
Effect docsSignals, Computeds, and Effects
Three powerful building blocks for seamless reactivity. Your mental model stays simple and predictable.
1open RescriptSignals23let count = Signal.make(0)45let increment = (_evt) =>6 Signal.update(count, n => n + 1)78let decrement = (_evt) =>9 Signal.update(count, n => n - 1)1011// Read the current value12let value = Signal.get(count)1314// Update based on previous value15Signal.update(count, n => n + 1)