Skip to content

Repository files navigation

Homeostate

Keep any state manager in sync with any CRDT. Pick a store adapter and a CRDT backend:

npm install @homeostate/core @homeostate/store-zustand @homeostate/crdt-yjs

Docs: homeostate.pages.dev.

Packages

Package Purpose
@homeostate/core Sync engine, persistence, and the contracts below
@homeostate/crdt-yjs Yjs backend
@homeostate/crdt-loro Loro backend
@homeostate/crdt-automerge Automerge backend
@homeostate/store-zustand Zustand adapter and middleware
@homeostate/store-redux Redux adapter
@homeostate/store-mobx MobX adapter
@homeostate/store-mobx-state-tree MobX-State-Tree adapter
@homeostate/store-jotai Jotai adapter
@homeostate/store-valtio Valtio adapter
@homeostate/store-tanstack TanStack Store adapter
@homeostate/store-ngrx-signals NgRx Signals adapter
@homeostate/persist-indexeddb IndexedDB storage for createPersistence
@homeostate/persist-local-storage localStorage storage for createPersistence
@homeostate/tool-devtools Panel to inspect and edit synced state
@homeostate/tool-simulator Test peers converge on a simulated network

crdt-* packages implement CrdtBackend, store-* packages implement StoreAdapter, and persist-* packages implement PersistenceAdapter. Each lives in packages/<name>.

Apps

Private, under apps/:

Scripts

pnpm install
pnpm playground   # every playground + WebSocket server; pnpm playground:<react|angular|vue|svelte|whiteboard> for one
pnpm dev          # every app's dev server
pnpm build
pnpm typecheck
pnpm lint
pnpm format       # CI runs pnpm format:check
pnpm test
pnpm bench:crdt   # pnpm bench:crdt -- --help for options
pnpm bench:store
pnpm bench:ui     # viewer for saved benchmark reports
pnpm docs         # docs site on http://localhost:5190

Run one package's script with pnpm --filter <name> <script>.

Releasing: see RELEASE.md.

Third-party notices

core and the crdt-* packages include code derived from zustand-middleware-yjs (MIT, © 2021 Joseph R Miles); see each package's THIRD_PARTY_NOTICES.md.