Good-bye Redux? How React Query & Zustand Re-wired State Management in ’25
May 27, 2025 • 4 min read

1. Redux: a quick look in the rear-view mirror
Redux became the de-facto way to share data across React apps circa 2016: a single store, time-travel debugging, predictable reducers. But by 2019 hooks arrived, by 2021 React Query gained traction, and by 2025 even the library’s own maintainer admits its hey-day has passed: “Redux peaked in popularity in 2017… the industry has shifted a lot since then.”
Today Redux Toolkit is still rock-solid for huge, deeply collaborative code-bases—but for most teams the boilerplate feels heavy, the mental model over-abstract, and the learning curve steep. Enter TanStack Query (née React Query) for server state and Zustand for client state.
2. Two kinds of state, two modern tools
State Type | Typical examples | Pain-points with Redux | 2025 Solution |
---|---|---|---|
Server/remote state | API lists, user profiles, pagination cursors | Manual caching, re-fetch logic, race conditions | TanStack Query v5 |
Client / UI state | Theme, modals, drag-drop coords, form wizards | Verbose actions/reducers, accidental re-renders | Zustand v6 |
Split your concerns and you rarely need a giant monolithic store anymore.
3. TanStack Query v5 — the server-state powerhouse
- Declarative caching: Create a query key and watch it stay fresh via background re-validation—no reducers, thunks or normalisation.
- Partial Observers: Components can subscribe to a slice of cached data, cutting re-render costs.
- Persistent & multi-tab cache: A baked-in, IndexedDB-backed cache layer keeps data across reloads/offline sessions.
- Concurrent Suspense streaming: Full support for React 19’s granular Suspense boundaries—HTML streams while data arrives.
- Framework-agnostic: Works in React, Solid, Vue, Svelte and Angular; one mental model across stacks. TanStack
2025 verdicts in community round-ups are clear: for 80 % of front-ends, React Query “takes the crown.” Medium
4. Zustand v6 — the tiny bear for client state
- No boilerplate: A store is literally a single hook—useStore((s)=>s.dÏkMÏode)—no actions or reducers required.
- Selective subscriptions: Components only re-render when the fields they read change.
- First-class TypeScript: Generic helpers infer store shapes; no hand-written action types.
- Middleware ecosystem: Persist, dev-tools, immer, selector-debounce, and SSR helpers—all opt-in.
- 2 KB min-zipped: Even after adding immer and persistence, bundles remain micro.
The GitHub repo continues to trend with >40 k stars and regular commits in 2025.
5. Head-to-head snapshot (2025)
Feature | TanStack Query v5 | Zustand v6 | Redux Toolkit 2.x |
---|---|---|---|
Primary use-case | Server / async data | Client / UI state | Both (one big store) |
Boilerplate | None—just hooks | None—one hook store | Actions, reducers, slices |
Built-in cache | Yes, stale-while-revalidate | Persist plugin | Manual or RTK Query |
DevTools | Query Devtools panel | Redux DevTools support | Redux DevTools |
Bundle size* | ~9 KB | ~2 KB | 15 KB (+ your code) |
Learning curve | Low | Tiny | Medium-High |
*minified + gzip, 2025 builds.
6. Migration playbook
Identify server vs. client state. Anything you fetch from an API goes to TanStack Query; the rest moves to Zustand (or even local useState).
Replace useEffect fetches with useQuery / useInfiniteQuery calls—get caching “for free.”
Gradually wrap Redux selectors with a temporary shim and swap in Zustand slices one at a time.
Keep Redux Toolkit only for edge-cases: offline-first workflows needing optimistic writes across dozens of entities, or enterprise apps with complex middleware pipelines.
7. Real-world impact in 2025
- Start-ups & indie hackers shave 20–30 % off initial page JS by dropping Redux and its boilerplate.
- Teams adopting App Router + React Server Components love TanStack Query’s Suspense streaming—no “waterfall” spinners.
- Complex dashboards boost FPS because Zustand’s selective subscriptions cut wasted re-renders.
- Hiring & onboarding improves; juniors grok two tiny libraries faster than the Redux mental model.
8. Should you ever still choose Redux?
Yes—when you truly need:
- Time-travel debugging across hundreds of actions per second (e.g., fintech trading UIs).
- Strict immutability & serialisable actions for replayable sessions or audit logs.
- Highly coordinated optimistic updates touching many entities in one transaction.
For almost everything else, a “Redux-less” architecture is simpler, faster, and more fun.
9. Conclusion
State management in React has matured from “one giant store” to a purpose-built, two-tool toolkit:
- TanStack Query owns the server half—fetched data, caching, re-validation.
- Zustand owns the client half—lightweight UI state without ceremony.
Together they give you 90 % of Redux’s super-powers at a fraction of the code, bundle size, and cognitive load. In 2025 that trade-off is compelling enough for many teams to wave a polite good-bye to Redux—or at least relegate it to the rare edge-cases where it still shines.
Happy (state-)shipping! 🚀