Observability a two-person team can afford to run and actually understand
Different layer of the stack; both self-hostable infrastructure.
A local-first sync engine you can drop into an app you already shipped
Driftwood handles offline queues, conflict resolution and live schema migration so your app works on a plane and reconciles cleanly when it lands. Open source, framework-agnostic, and designed to be added to an existing data model rather than requiring a rewrite around it.
Attaches to an existing schema instead of demanding you adopt a new data model.
LWW, CRDT merge or your own callback — chosen per field, not per database.
Forward and backward transforms so old and new app versions coexist safely.
Clients hold the subset they need. Datasets are not capped by device storage.
Ordered, idempotent replay that survives crashes and force-quits.
SQLite, IndexedDB and Postgres adapters. No opinion about your UI layer.
Local-first software gets described as a UX philosophy. Operationally it is a distributed systems problem: two replicas, unreliable connectivity, concurrent edits, and schema versions that are live at the same time because users do not update apps on your schedule.
Driftwood is the part nobody enjoys writing.
Most sync engines want to own your data model. Driftwood attaches to one you already have: you describe your tables, mark the fields whose conflict behaviour is not obvious, and it takes over the transport.
That constraint made the internals harder and adoption dramatically easier. Retrofitting is the actual use case — greenfield local-first apps are rare.
Driftwood is 1.x and used in production by a handful of teams, including two on this site. The wire protocol is stable and versioned. Storage adapters exist for SQLite, IndexedDB and Postgres.
Subset subscriptions are now stable, with server-side authorisation on the subscription predicate so a client cannot widen its own scope.
Schema migrations can now be applied in reverse, which makes staged rollouts safe to abort.
No — that is the central design constraint. You describe your existing tables and annotate the fields whose conflict behaviour is ambiguous. Everything else is inferred.
Per field. Last-writer-wins is the default for scalars, CRDT merge is available for text and sets, and you can supply a resolver function where only your domain logic knows the right answer.
Driftwood versions the schema and carries forward and backward transforms, so a client on the old version can still read and write documents written by the new one.
No. The relay is a convenience for teams that do not want to operate a WebSocket tier. The protocol is documented and you can run your own.
MIT, including the relay. There is no open-core split.
Similar products worth comparing before you commit.
Observability a two-person team can afford to run and actually understand
Different layer of the stack; both self-hostable infrastructure.
Deploy previews for data pipelines, so reviewers see the diff in the data
Ranked by shared categories, tags and explicit alternative relationships.
Observability a two-person team can afford to run and actually understand
Deploy previews for data pipelines, so reviewers see the diff in the data
Revenue analytics that tells you what changed instead of showing forty charts