Skip to main content
Alvin QuachFull Stack Developer
HomeProjectsExperienceBlog
HomeProjectsExperienceBlog
alvinquach

Full Stack Developer building systems that respect complexity.

Open to opportunities

AQ

Projects

  • All Projects
  • Hoparc Physical Therapy
  • OpportunIQ
  • Hoop Almanac
  • SculptQL

Knowledge

  • Blog
  • Experience
  • Interview Prep

Connect

  • Contact
  • LinkedIn
  • GitHub
  • X

Resources

  • Resume
© 2026All rights reserved.
Back to Blogs
Decision
Depth: ●●○○○

React State Management in 2024: Redux vs Zustand vs Jotai vs Alternatives

A comprehensive comparison of React state management solutions. Bundle sizes, boilerplate, DevTools, TypeScript support, and when to use each. Based on real experience shipping production apps with Redux, Zustand, and Jotai.

Published October 20, 20244 min readImportance: ★★★★☆
State Management
React
TypeScript
Share:

State management in React has evolved dramatically. Redux dominated for years, but the ecosystem has matured with lighter alternatives. After shipping production apps with multiple state management solutions, here's my practical comparison.

TL;DR Decision Framework

Solo dev / small team + TypeScript-first: Zustand

Large team + strict patterns needed: Redux Toolkit

Atomic/granular updates + React Suspense: Jotai

Proxy-based reactivity (Vue-like): Valtio

Already on MobX / large existing codebase: Stay with MobX

The Contenders

Redux Toolkit (RTK)

Bundle size: ~11KB (+ React-Redux ~5KB). The original. Redux Toolkit modernized Redux with createSlice, createAsyncThunk, and Immer integration. It's opinionated in a good way.

Strengths: Best DevTools in the ecosystem (time travel, action replay), enforced patterns (predictable for large teams), RTK Query for data fetching, massive community and documentation.

Weaknesses: Still more boilerplate than alternatives, action/reducer mental model has overhead, overkill for simple state.

Use when: Large teams, complex state with many actions, need strict patterns, or already invested in Redux ecosystem.

Zustand

Bundle size: ~1KB. My current go-to. Created by Poimandres (same team behind React Three Fiber). The API is just functions—no reducers, no actions, no dispatch.

Strengths: Minimal API (learn in 5 minutes), works outside React (great for calculation engines), TypeScript-first, built-in Immer middleware, Redux DevTools compatible.

Weaknesses: Less opinionated (teams need their own patterns), no built-in async handling (you manage it), smaller ecosystem than Redux.

Use when: Solo/small teams, TypeScript projects, need state outside React components, want minimal boilerplate.

Real example: I used Zustand in OpportunIQ for managing complex decision models. The ability to access state outside React was crucial for the calculation engine that runs financial projections.

Jotai

Bundle size: ~2KB. Atomic state management inspired by Recoil but simpler. Each piece of state is an "atom" that components subscribe to individually.

Strengths: Granular re-renders (only subscribers update), first-class React Suspense support, derived atoms for computed state, no Provider needed (atoms are global).

Weaknesses: Mental model shift (atoms vs stores), debugging can be harder, less suitable for deeply nested state.

Use when: Need granular updates, using React Suspense, prefer bottom-up state composition.

Valtio

Bundle size: ~3KB. Proxy-based reactivity. Mutate state directly and Valtio tracks changes automatically. If you've used Vue's reactivity, this feels familiar.

Strengths: Most intuitive mental model (just mutate objects), automatic render optimization, works with vanilla JS, snapshot for immutable reads.

Weaknesses: Proxy behavior can be surprising, less explicit than Redux patterns, debugging mutable state is harder.

Use when: Coming from Vue, prefer mutable patterns, building prototypes quickly.

MobX

Bundle size: ~16KB. The OG alternative to Redux. Observable-based with decorators. Still powerful, still maintained, but feels heavier than modern alternatives.

Strengths: Automatic tracking (minimal boilerplate), class-based patterns (OOP devs love it), computed values, battle-tested in production.

Weaknesses: Decorator syntax requires config, larger bundle, implicit behavior can surprise, less momentum in 2024.

Use when: Existing MobX codebase, prefer OOP patterns, need computed properties heavily.

Bundle Size Comparison

Zustand: ~1KB | Jotai: ~2KB | Valtio: ~3KB | Redux Toolkit + React-Redux: ~16KB | MobX: ~16KB

Note: Bundle size matters less than you think for most apps. Developer experience and team fit matter more. Don't choose based on KB alone.

My Default: Zustand

For new projects, I reach for Zustand first. Here's why:

1. TypeScript integration is seamless. No type gymnastics. 2. The API is just functions—easy to teach, easy to maintain. 3. Works outside React when I need it for calculation engines. 4. Immer middleware when I want immutable patterns. 5. Redux DevTools when I need debugging.

But I'd choose Redux Toolkit for a large team project where enforced patterns prevent chaos. And I'd choose Jotai for a highly interactive UI where granular re-renders matter.

Conclusion

There's no universally "best" state management library. The right choice depends on team size, project complexity, and personal preference. The good news: all these libraries are production-ready and well-maintained. Pick one, learn it well, and ship.

Related Projects

OpportunIQ