SaaSHub helps you find the best software and product alternatives Learn more →
Top 23 TypeScript state-management Projects
-
Project mention: 7 Free Tools and Resources for Building Well-Structured React Applications | dev.to | 2026-05-07
Zustand is a small, fast state management library for React. Its API is intentionally minimal: you define a store with state and actions, and you consume the store with a hook. There is no boilerplate beyond defining what the store holds and what operations change it.
-
Puter.js
Puter.js - The Backend for AI-Generated Apps. One-shot full-stack apps with your existing AI coding tool. Puter.js gives you Auth, Storage, DB, AI & more, with up to 90% fewer AI tokens than other backend platforms.

-
Glad to see statecharts still getting attention!
I created XState, a JS/TS library for authoring, executing, and visualizing state machines/statecharts: https://github.com/statelyai/xstate
I've been working on it for 10+ years. The main thing I've learned is that statecharts are most valuable when they're treated as executable behavior, not just documentation.
That doesn't mean you need to use them everywhere or model everything with them. They're most useful when you have behavior where the answer to "what happens next?" depends on both the current state & the event. A statechart can act as an oracle for questions like: "Given I'm in this state, when this event happens, what is the next state, and what effects should run?"
I'm close to releasing an alpha of the next major version of XState, focused on better ergonomics, type safety, and composability, as well as a new visualizer/editor.
There's also an open-source basic statechart visualizer here: https://sketch.stately.ai
For the formal/spec side, SCXML is worth reading: https://www.w3.org/TR/scxml
Also worth reading the original paper by David Harel: https://www.weizmann.ac.il/math/harel/sites/math.harel/files...
-
router
🤖 A client-first, server-capable, fully type-safe router and full-stack framework for the web (React and more).
This does not kill React Router or TanStack Router. Both have open discussions about adopting the Navigation API as a backend: React Router's and TanStack Router's. They would sit on top of it rather than reimplement the History API workaround they currently maintain. The frameworks add value (nested routes, data loading, error boundaries) that the raw Navigation API does not. What the API kills is the need to pull in a router just to avoid full-page reloads on a content site. If your routing needs are modest (a blog, a docs site, a dashboard with a few views), the platform now has you covered.
-
nuqs
Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string.
🔗 Confira em: https://nuqs.dev/
-
Project mention: Ng-News 26/11: TypeScript 6, NgRx RFCs delegatedSignal, Resource Extensions | dev.to | 2026-04-03
ngrx/platform#5121 — RFC delegatedSignal
-
-
blocksuite
🧩 Content editing tech stack for the web - BlockSuite is a toolkit for building editors and collaborative applications.
-
AppSignal
Monitoring that respects your time & budget. APM, error tracking, and dashboards for modern web apps. Ten-minute setup, transparent flat pricing, and support from engineers who actually use the product.

-
Project mention: Building a React Native SDK Inside a Super-App with 800K Daily Users | dev.to | 2026-07-10
Kwaaka's whole product suite runs on React on the web. Choosing React Native meant the team could share mental models and logic between web and mobile without hiring separate iOS/Android frontend specialists. State management ran on Effector — again, for consistency with Kwaaka's web stack, plus it's well-documented and widely used across the CIS developer community. In my experience, Effector is a genuinely simpler and more modern state manager than old-guard Redux (or Redux Toolkit, for that matter) — no action types to name, no reducers to switch over, no selectors to memoize by hand. You just declare events and stores, and derive everything else from them. Less boilerplate, less ceremony, and the dependency graph between stores stays explicit instead of hiding behind connect() or useSelector. Farfetched sat on top of Effector to handle caching, retries, and stale-while-revalidate out of the box.
-
Project mention: React Won by Default – and It's Killing Front End Innovation | news.ycombinator.com | 2025-09-15
Biggest problem is with the approach of doing a revolution, while evolution is possible. Reactivity is mentioned in the article and examples are given with frameworks that would need a rewrite of anything you have in react and relearning everything for the team.
But it's really not needed - you can just use signals in react with the preact-signals package (works with preact and react and standalone) which has been created 3 years ago: https://preactjs.com/blog/introducing-signals It can even skip the virtual dom and diffing.
The issue is not React per se. Just look at what the ecosystem has to offer. You can also speed up your loading times by using preact. And if you don't like a compile step use a package like htm and tagged templates for a JSXish syntax. And then move your "store" outside of react with signals etc. There is enough innovation happening, no need to always look at the other side.
-
-
-
livestore
LiveStore is a next-generation state management framework based on reactive SQLite and built-in sync engine.
-
-
-
-
Reactime 6.0: State Debugger for React
Developer tool for time travel debugging and performance monitoring in React applications.
-
-
mutative
Efficient immutable updates, 2-6x faster than naive handcrafted reducer, and more than 10x faster than Immer.
Travels is built on Mutative. That choice matters:
-
KaibanJS
KaibanJS is a JavaScript-native framework for building and managing multi-agent systems with a Kanban-inspired approach.
-
Project mention: Glassworm Is Back: A New Wave of Invisible Unicode Attacks Hits Repositories | news.ycombinator.com | 2026-03-15
I don't quite understand how this is working tbh. I looked at one of the affected repos, ironically named "reworm".
The malicious code was introduced in this commit - https://github.com/pedronauck/reworm/commit/d50cd8c8966893c6...
It says coauthored by dependabot and refers to a PR opened in 2020 (https://github.com/pedronauck/reworm/pull/28).
That PR itself was merged in 2020 here - https://github.com/pedronauck/reworm/commit/df8c1803c519f599...
But the commit with the worm (d50cd8c), re-introduces the same change from df8c180 to the file `yarn.lock`.
And when you look at the history of yarn.lock inside of github, all references to the original version bump (df8c180) are gone...? In fact if you look at the overall commit history, the clean df8c180 commit does not exist.
I'm struggling to understand what kind of shenanigans happened here exactly.
-
concent
A reactive atomic state engine for React(including React 18) and all React like, carrying dependency collection feature, supporting fine-grained updates.
-
-
apprun
AppRun is a JavaScript library for developing high-performance and reliable web applications using the elm inspired architecture, events and components.
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

TypeScript state-management discussion
TypeScript state-management related posts
-
Welcome to the world of Statecharts
-
React State Management: It's Just a Hook
-
React-State-Custom – Composable global state with native lifecycle management
-
How I Removed Redux Toolkit From My React Native App
-
🚀 Yo devs, wanna build collab apps that SLAP? Meet Jazz: the Real-Time Collab Framework That’s Straight Fire 🔥
-
In React {Transitions} = F(state)
-
The future of State Management in LWC: Understanding Signals
-
A note from our sponsor - SaaSHub
www.saashub.com | 4 Aug 2026
Index
What are some of the best open-source state-management projects in TypeScript? This list will help you:
| # | Project | Stars |
|---|---|---|
| 1 | zustand | 58,514 |
| 2 | xstate | 29,938 |
| 3 | router | 14,877 |
| 4 | nuqs | 10,712 |
| 5 | platform | 8,333 |
| 6 | mobx-state-tree | 7,047 |
| 7 | blocksuite | 5,949 |
| 8 | effector-react | 4,844 |
| 9 | signals | 4,473 |
| 10 | unstated-next | 4,187 |
| 11 | constate | 4,002 |
| 12 | livestore | 3,654 |
| 13 | store | 3,549 |
| 14 | final-form | 3,048 |
| 15 | useStateMachine | 2,407 |
| 16 | Reactime 6.0: State Debugger for React | 2,239 |
| 17 | data-client | 2,032 |
| 18 | mutative | 1,988 |
| 19 | KaibanJS | 1,467 |
| 20 | reworm | 1,459 |
| 21 | concent | 1,388 |
| 22 | reatom | 1,358 |
| 23 | apprun | 1,175 |