Skip to content

Where datadata sits

The local-first community has converged on a fairly standard set of dimensions for describing sync engines (as popularized by the Local-First Landscape). Here is datadata, answered honestly along those lines.

Dimensiondatadata
MaturityPrototype / pre-alpha. Working, actively reshaped, not open source yet.
DistributionTypeScript library (client + server), self-hosted. No hosted service.
Data modelDocuments — typed JSON with embedded Yjs text. Schemas are documents too.
Schema managementSchema documents (optionally authored in TypeScript — typed, no codegen — and upserted at startup) with append-only migrations; documents migrate on next read with write-back; invalid documents flagged, not dropped; optional dynamic runtime schemas (experimental).
AuthorityCentralized — one server per folder orders all events.
What syncs upJSON Patches + Yjs updates, optionally guarded.
What syncs downInitial snapshot, then patches + Yjs updates.
Replication granularityPer-document subscriptions within a folder; no partial replication inside a document, no cross-folder sync.
Data sizeDocuments (and single events) cap at 1.9 MB in the current backend; model larger data as more documents.
Conflict handlingLayered: server ordering + opt-in guards for structure; Yjs CRDT for text; three-way staged previews in sessions.
Optimistic updatesYes — core mechanism, with clean rejection.
Offline readsWhatever the client already holds; no client-side persistence.
Offline writesNo. Online-optimistic only; no durable queue or reconnect merge.
Local queryDocument reads + subscriptions — no query language, no cross-document select/project. An experimental projection layer reshapes a (fully synced) document into ergonomic views; writable lenses are alpha. For queries, the supported pattern is a derived store: project changes into another document or database and query that.
Server persistenceSQLite (Durable Object storage) via pluggable adapter; snapshots + append-only event logs (no compaction).
TransportWebSockets; in-process bus for server-side agents, tests, demos.
AuthToken at the door (minted by host app). No built-in authorization rules.
EncryptionTransport-level only. No E2E encryption — incompatible with server-side validation as designed.
Rich textEmbedded Yjs documents; no presence/awareness yet.
Client platformsBrowser + server-side JS. React (Jotai) bindings; devtools panel.
AI agentsA design focus: sessions, provenance, in-process clients, agent-writable schemas.

Everything — user data, schemas, the engine’s own state, staged work — is a document behind one small referential API, with an explicit staging layer (sessions) designed for humans and AI agents proposing changes to shared data.

If those dimensions read like a fit, continue to Compared to other engines; if some of the “No”s above are deal-breakers, When to use it names better-suited engines without hard feelings.