Skip to content

Add a competitors markdown doc to the main Docusaurus documentation site #30

@clamstew

Description

@clamstew

🧠 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions