Ripple.js v1.0.0 is Live!
Announcing the stable release of our zero-dependency reactivity engine.
After months of development and refining our push-pull reactive graph, Ripple.js v1.0.0 is officially stable and ready for production.
Why we built Ripple.js
Most UI frameworks lock their reactivity engines behind heavy compilers or component lifecycles. If you wanted fine-grained signals in a vanilla JS class or a Node.js worker, you had to either pull in a massive UI library or settle for sub-par, glitchy event emitters.
Ripple.js extracts the exact same primitives that power modern interfaces (Signals, Computed values, and Effects) into a standalone, ~3.5KB package.
What's Included in v1.0.0?
- Core Primitives:
signal,computed, andeffect. - Advanced Control:
batchfor grouping updates anduntrackfor safe reads. - State Management: Deeply reactive
storeproxies,createHistoryfor undo/redo, andpersistforlocalStoragesyncing. - Framework Adapters: First-class bindings for React, Vue 3, and Svelte.
The Engineering: Glitch-Free Architecture
The biggest hurdle in standalone reactivity is the "diamond problem," where a single signal update triggers a computed value to evaluate multiple times with stale intermediate state.
Ripple.js solves this using a push-pull hybrid engine:
- Push: Mutations instantly propagate "dirty" flags down the dependency graph.
- Pull: Computed values only actually evaluate when they are explicitly read.
This ensures zero wasted CPU cycles and perfectly consistent state reads.
Memory Optimized: Memory footprint is strictly controlled using intrusive doubly-linked lists and link pooling, resulting in ~60% fewer GC allocations compared to standard array-based tracking.
Get Started
Run npm install ripple-reactive or check out the Quick Start Guide to start building.
— ADITYA SING