-
Notifications
You must be signed in to change notification settings - Fork 0
Description
🧠 State Management Library Comparison
This document compares JODS to a range of state management and reactivity libraries in the React and broader JS ecosystem. Each entry includes a brief description, links to its GitHub repo, official docs, and npm package, and an analysis of how it aligns or diverges from JODS’s goals:
• 🪄 Declarative, full-stack reactive stores
• 🧵 Proxy-driven fine-grained reactivity
• ⚡ Tight Remix integration (loaders, actions, forms)
• 🌐 SSR + hydration support
• 🛠️ Developer ergonomics & DX
⸻
🟥 Redux
• GitHub: reduxjs/redux
• Docs: redux.js.org
• npm: redux
Description: Predictable state container for JavaScript apps. One global store, updates via actions and reducers. Popular, powerful, boilerplate-heavy. 💼
Competitive Analysis:
Redux is battle-tested and SSR-capable, but it’s not reactive (no proxies), has no built-in form integration, and requires lots of manual glue. JODS aims to do more with less: full-stack stores with less ceremony.
⸻
🧰 Redux Toolkit
• GitHub: reduxjs/redux-toolkit
• Docs: redux-toolkit.js.org
• npm: @reduxjs/toolkit
Description: The official, recommended way to use Redux. Comes with createSlice, Immer, thunks, and more. 🚀
Competitive Analysis:
Better DX than vanilla Redux, but still not reactive, declarative, or Remix-native. Doesn’t solve forms or hydration like JODS does.
⸻
🚦 Relay
• GitHub: facebook/relay
• Docs: relay.dev
• npm: react-relay
Description: GraphQL-first data layer for React. Declarative, cache-heavy, and tightly coupled to GraphQL. 🧬
Competitive Analysis:
Relay is awesome for GraphQL, but doesn’t handle local state, form sync, or non-GraphQL loaders/actions. JODS is more general-purpose and Remix-native.
⸻
🦋 Zustand
• GitHub: pmndrs/zustand
• Docs: Getting Started
• npm: zustand
Description: Minimal bearbones global state using hooks. Dead simple, no boilerplate. 🪶
Competitive Analysis:
Great DX and re-renders are efficient. But no server-side awareness, form support, or reactivity outside React. JODS fills those gaps.
⸻
🔮 MobX
• GitHub: mobxjs/mobx
• Docs: mobx.js.org
• npm: mobx
Description: Reactive state via observables and computed values. Transparent reactivity. 🧼
Competitive Analysis:
Proxy-based like JODS but client-side only. Doesn’t know Remix. More magic, less convention. JODS is less spooky.
⸻
🎭 XState
• GitHub: statelyai/xstate
• Docs: xstate.js.org/docs
• npm: xstate
Description: Event-driven state machines and actors. Great for workflows and long-running logic. 🎬
Competitive Analysis:
Solves a different problem. No general-purpose store, no proxy reactivity, no Remix alignment. Still cool tho.
⸻
⚛️ React Hooks (useState/useReducer)
• GitHub: facebook/react
• Docs: reactjs.org
• npm: react
Description: The OG. Local state in function components. Sometimes context is sprinkled on top. 🧂
Competitive Analysis:
Fine for local needs, but doesn’t scale to shared, reactive, full-stack state. Too DIY for the kinds of problems JODS solves.
⸻
🧩 Preact Signals
• GitHub: preactjs/signals
• Docs: Guide
• npm: @preact/signals
Description: Fine-grained UI reactivity using .value. Surprisingly powerful. ⚡
Competitive Analysis:
Closest in spirit to JODS but UI-only and .value is clunky. No full-stack story, no loader/form support. JODS > Signals when Remix is in play.
⸻
🔥 Svelte Stores / Runes
• GitHub: sveltejs/svelte
• Docs: Reactive Statements
• npm: svelte
Description: Compiler-powered reactivity. No virtual DOM. store.subscribe() or $: just works. 🧙
Competitive Analysis:
Amazing inside Svelte, not portable. JODS brings similar ergonomics to React/Remix without switching ecosystems.
⸻
🌌 Recoil
• GitHub: facebookexperimental/Recoil
• Docs: recoiljs.org
• npm: recoil
Description: Atoms and selectors for scoped global state. Good DX, good for React. 🌱
Competitive Analysis:
Client-only. Doesn’t know Remix or forms. Not reactive under the hood (no proxies/signals). JODS is broader in scope.
⸻
🧪 Jotai
• GitHub: pmndrs/jotai
• Docs: jotai.org
• npm: jotai
Description: Tiny atomic state for React. Hooks + atoms = happiness. 🧬
Competitive Analysis:
Elegant, simple, React-friendly—but still all client-side. JODS integrates forms, loaders, and server better.
⸻
🧭 Effector
• GitHub: effector/effector
• Docs: effector.dev
• npm: effector
Description: Reactive FP state system using events and stores. Great for complex business logic. 🧠
Competitive Analysis:
Compositional and powerful, but heavier mental model. Doesn’t integrate with Remix or forms. Not as beginner-friendly as JODS.
⸻
👁️🗨️ Valtio
• GitHub: pmndrs/valtio
• Docs: valtio.dev
• npm: valtio
Description: Reactive state via proxies + useSnapshot. Auto-tracking and minimal API. 🪞
Competitive Analysis:
Closest to JODS under the hood. But again, client-focused only. JODS extends this into a full-stack Remix story.
⸻
🧵 Hookstate
• GitHub: avkonst/hookstate
• Docs: hookstate.js.org
• npm: @hookstate/core
Description: Extended useState with reactivity, plugins, and global support. 🛠️
Competitive Analysis:
Powerful React-local reactivity, plugin support is nice. But lacks server/form awareness. JODS owns that space.
⸻
🔁 RxJS
• GitHub: ReactiveX/rxjs
• Docs: rxjs.dev
• npm: rxjs
Description: Observables for async and data streams. Power tool for events. 🧪
Competitive Analysis:
Not a store. Not proxy reactive. Not Remix-native. Great for streams, not so much for full-stack state.
⸻
🧠 Summary
JODS lives in a sweet spot:
• Proxy reactivity
• Declarative stores
• Remix-native forms/loaders/actions
• One model to rule client + server
No other library combines all of these. Others do parts well. JODS does them all together, intuitively.
✨ JODS isn’t just another signals wrapper or store lib. It’s full-stack reactivity for Remix, with the ergonomics of Zustand and the power of LiveView.