// the find
pmndrs/zustand
🐻 Bear necessities for state management in React
Zustand is a minimal React state management library built on hooks. No providers, no boilerplate — you define a store as a hook and call it directly in components. It's aimed at React developers who find Redux heavy and Context insufficient.
The vanilla core (`zustand/vanilla`) is genuinely framework-agnostic, meaning you can share state between React and non-React code without a separate store implementation. The middleware stack (persist, immer, devtools, subscribeWithSelector) covers 90% of real-world needs without third-party dependencies. Subscription-based transient updates let you bypass React's render cycle entirely for high-frequency state — useful for canvas or animation loops. The library has quietly solved hard React concurrency bugs (zombie children, context loss) that most alternatives haven't bothered with.
TypeScript ergonomics require the `create<State>()()` curried pattern — the double-call is non-obvious and trips up newcomers who miss it. Devtools integration only logs actions per-store, not across stores, which makes debugging multi-store apps in Redux DevTools awkward compared to a true combined-reducer setup. The `set` function merges by default but replaces when passed `true` as a second argument — easy to accidentally wipe your entire store including actions. No built-in derived/computed state; you either recompute in selectors on every render or reach for a third-party library like `zustand-computed`.