TL;DR
There is no universal state-management winner. Separate server data from client state first. For client state, choose the interface that matches the application: Redux Toolkit for explicit structure and RTK Query, Zustand for hook or vanilla stores with composable middleware, Jotai for atoms, or Valtio for a proxy model. The dated npm snapshot below provides distribution context, not a quality score.
Key takeaways
- Redux Toolkit provides
configureStoredefaults and optional RTK Query data fetching and caching. - Zustand documents React-bound and vanilla stores plus persist, DevTools, Immer, and selector middleware.
- Jotai uses atoms and documents an external store plus an SSR Provider pattern.
- Valtio uses proxy state with snapshot-based React subscriptions and also documents vanilla JavaScript use.
- The package records list the selected libraries under the MIT license. That does not establish hosted-plan pricing and does not establish total operating cost.
- There is no reproducible benchmark in the current guide, so the old synthetic timing ranking has been removed.
Package health snapshot
The official npm snapshot covers 2026-08-15 through 2026-08-21:
| Package | Weekly package distributions | Latest tag at access time |
|---|---|---|
| Redux Toolkit | 27,025,711 | 2.12.0 |
| Zustand | 52,545,290 | 5.0.15 |
| Jotai | 5,804,290 | 2.20.2 |
| Valtio | 1,961,326 | 2.3.2 |
| MobX | 3,894,291 | 7.0.3 |
| Recoil | 475,638 | 0.7.7 |
| Nanostores | 7,710,977 | 1.5.2 |
| @preact/signals | 2,032,483 | 2.11.1 |
These are package distributions, not unique developers or quality scores. The latest-tag records were accessed 2026-08-22; recheck immediately before publication because registry values are volatile.
Zustand leads this selected dated npm snapshot, but that does not make it a universal default. Treat the numbers as context, then apply the fit guidance below to the application's state shape, team conventions, debugging needs, and runtime constraints.
At-a-glance decision table
| Need | Start with | Why |
|---|---|---|
| Explicit conventions across a large team | Redux Toolkit | configureStore, slices, middleware, DevTools, and optional RTK Query provide a structured interface. |
| A small shared client store | Zustand | Hook and vanilla stores keep the interface compact, and documented middleware covers persistence, DevTools, Immer, and selectors. |
| Independently composed values | Jotai | Atoms compose through dependencies, so consumers subscribe to the values they read. |
| Mutation-shaped state | Valtio | A proxy exposes mutable-looking updates while React consumes snapshots. |
| Mostly remote data | A server-state library | Keep fetching, caching, and invalidation separate from durable client UI state. |
Comparison matrix
Redux Toolkit
Redux Toolkit's configureStore supplies the documented Redux defaults and accepts reducers and middleware through one setup point. RTK Query is optional and covers data fetching and caching. Choose this model when explicit event flow, review conventions, or an existing Redux codebase matter more than a smaller interface.
Zustand
Zustand offers React-bound and vanilla stores. Its documented surfaces include persist, DevTools, Immer, and selector middleware. A store can expose state and actions behind a small hook interface, while the vanilla API supports code outside React. Test selector behavior and store lifetime in the actual application rather than assuming every topology behaves the same.
Jotai
Jotai models state as atoms. Derived atoms read other atoms, and React consumers render from the atom values they use. The project documents React 18 compatibility, an external store interface, and an SSR Provider pattern. That is the supported compatibility boundary; it is not a claim about every rendering environment.
Valtio
Valtio models state through a JavaScript proxy and exposes snapshots to React subscribers. It documents React 18 compatibility and vanilla JavaScript use. This can be a good fit when domain updates read naturally as mutations, provided the team is comfortable debugging proxy-backed state.
Client state versus server state
Choose a package only after classifying the data. Remote records need fetching, cache invalidation, retry, and freshness policies. Local state needs ownership, update semantics, persistence, and subscriptions. Mixing both concerns in one store makes invalidation and error handling harder to reason about.
Use a client store for cross-route UI state, preferences, local workflow state, and other values whose source of truth lives in the application. Use a server-state module for data whose source of truth lives behind an API. The preserved TanStack Query vs SWR comparison covers that separate decision.
Migration notes
A Redux migration should proceed by interface, not by file count:
- Inventory slices and identify consumers, middleware, persistence, and cross-slice dependencies.
- Keep stable domains on Redux while moving one low-coupling domain behind a new store interface.
- Compare state transitions and error behavior through public tests.
- Remove Redux wiring only after every consumer has moved and rollback remains possible.
Do not promise a fixed migration duration. The work depends on middleware, selectors, server-state coupling, tests, and team conventions.
Methodology
The package table uses official npm registry and downloads endpoints accessed 2026-08-22. Distribution counts describe package transfers during a dated window; they do not identify unique people, production applications, satisfaction, or correctness.
Capability statements are limited to documented surfaces from Redux Toolkit, Zustand, Jotai, and Valtio. Package license fields support the MIT license statement but do not describe hosted pricing or operating cost. No synthetic performance table is included because no reproducible benchmark receipt records code, versions, runtime, hardware, warmup, repetitions, and raw output.
FAQ
Is Redux still a valid choice?
Yes. Existing architecture, middleware, team conventions, and RTK Query can make Redux Toolkit the lower-risk option. The decision is about fit, not novelty.
Is the most downloaded package the best package?
No. A dated npm snapshot is a distribution measure. It cannot establish quality, satisfaction, or application fit.
Can these libraries be used outside React?
Zustand documents vanilla stores, Jotai documents an external store interface, and Valtio documents vanilla JavaScript use. Keep compatibility claims to those documented surfaces and test the target runtime.
Sources
Primary evidence is limited to the official package records and project documentation listed in the synchronized guide packet. The packet records exact URLs, accessed dates, and assertion boundaries.
