@hookstate/core vs xstate
xstate is downloaded 44.8× more often than @hookstate/core (20,263,809 vs 452,718 per month), so it has the larger community and more answered questions online. @hookstate/core ships 57% less gzipped JavaScript (6.0 kB vs 14.1 kB), which matters if bundle size is a priority. xstate has been updated more recently, a sign of more active maintenance.
| Metric | @hookstate/core | xstate |
|---|---|---|
| Weekly downloads | 84,848 | 4,469,231✓ |
| Monthly downloads | 452,718 | 20,263,809✓ |
| GitHub stars | 1,656 | 29,666✓ |
| Minified size | 23.4 kB✓ | 44.7 kB |
| Minified + gzipped | 6.0 kB✓ | 14.1 kB |
| Dependencies | 0 | 0 |
| Open issues | 32✓ | 123 |
| Last commit | 2025-03-20 | 2026-06-01✓ |
| Latest version | 4.0.2 | 5.32.0 |
| License | MIT | MIT |
When to choose which
@hookstate/core
Nested state via proxies with a plugin system.
Choose it when: You manage deeply nested state and want fine-grained updates plus plugins (persistence, validation).
- + Fine-grained nested updates
- + Plugin system
- - Small community
- - Less momentum than peers
xstate
Explicit state machines and statecharts.
Choose it when: Complex flows (wizards, async sequences, UI with many states) where you want logic that is explicit, testable and visualizable.
- + Impossible states become impossible
- + Visualizable logic
- + Framework-agnostic
- - Steepest learning curve here
- - Overkill for simple state
Feature comparison
| Feature | @hookstate/core | xstate |
|---|---|---|
| Paradigm | Proxy store | State machines |
| First-class TypeScript | ✓ Yes | ✓ Yes |
| Works outside React | Partial | ✓ Yes |
| Dedicated devtools | ✓ Yes | ✓ Yes |
| Built-in async / server state | Manual | ✓ Yes |
| Boilerplate | Low | High |
@hookstate/core
The flexible, fast and extendable state management for React that is based on hooks and state usage tracking.
Related comparisons
Embed this comparison
A live badge for your README — it updates as the numbers change.
[](https://devcompare.dev/compare/hookstate-core-vs-xstate)Data from npm, Bundlephobia and GitHub. Last updated 2026-06-02.