Fast, lightweight state management for React, Vue, Svelte, Solid, and Angular. Atoms, selectors, and families — inspired by Recoil, built for performance.
$ npm install valdres valdres-reactShare state seamlessly across React, Vue, Svelte, Solid, and Angular. Click any counter — they all stay in sync through a single valdres store.
// shared.ts — this file is the same for all frameworks
import { atom } from "valdres"
export const countAtom = atom(0)Valdres ships official packages that expose browser APIs as atoms — keyboard, online status, geolocation, and more. Subscribe from any framework and the UI stays in sync with the browser.
@valdres/browser-keyboardTry typing — keys light up as you press them.
@valdres/browser-onlineToggle offline in DevTools to see it react.
@valdres/browser-geolocationReactive geolocation — coords stream as atoms.
Minimal bundle size with zero dependencies. Only ship what you use.
Fine-grained subscriptions update only what changed — via useSyncExternalStore in React, and each framework's native reactivity everywhere else.
Atoms and selectors are identified by reference. No more managing unique string identifiers.
atomFamily and selectorFamily are first-class citizens, not just utilities. Subscribe to entire families.
Batch multiple atom updates so subscribers only fire once. Essential for complex state changes.
First-class bindings for React, Vue, Svelte, Solid, and Angular. Same atoms, same store — pick your framework.
The framework-agnostic core is benchmarked head-to-head against Jotai across two JavaScript engines. These measure the shared engine itself — the framework adapters build on each framework's own reactivity.
Core-engine geometric mean across 28 JS micro-benchmarks vs Jotai 2.19.0. View detailed benchmarks