finds.dev← search

// the find

pmndrs/zustand

★ 58,257 · TypeScript · MIT · updated Jun 2026

🐻 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`.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →