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-yjsDocs: homeostate.pages.dev.
| 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>.
Private, under apps/:
playgroundandplayground-{react,angular,vue,svelte}: demos that share Yjs roomsplayground-whiteboard: a collaborative whiteboard with names and live cursorswebsocket-server-yjs: y-websocket server for the playgroundsbenchmark-crdt,benchmark-store,benchmark-ui: backend and render benchmarks, and their viewerdocs: docs site, built frompackages/*/docsandapps/docs/content
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:5190Run one package's script with pnpm --filter <name> <script>.
Releasing: see RELEASE.md.
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.