tool
Automerge
created 2026-05-25 crdt · sync · local-first · javascript · typescript · rust
Automerge
A JSON-like crdt|CRDT library for building local-first-software|local-first applications. Documents look and feel like plain JS objects, but every change is recorded so concurrent edits merge automatically.
What it gives you
- JSON-shaped documents — strings, numbers, lists, maps, nested objects — that you mutate as if local, and merge across replicas without conflicts.
- Change history baked in — every doc carries its op-log; you can branch, diff, and inspect provenance.
- Sync protocols —
automerge-repohandles peer discovery, change exchange, persistence. - Storage adapters — IndexedDB, filesystem, S3, custom.
- Pluggable network adapters — WebSocket, BroadcastChannel, custom.
- Written in Rust, with bindings for JS/TS, Swift, etc.
When to pick Automerge over yjs
- Data is document-shaped JSON — notes, designs, structured records.
- You want history/branching as a first-class feature (Git-like patterns on user data).
- Sync engine + storage abstractions matter more than editor bindings.
Pick yjs when you’re building a collaborative text/rich-text editor — that’s where Yjs’s editor ecosystem is unmatched.
Production use
- GoodNotes — ships Automerge to millions of monthly users for cross-device note sync. Cited in the CAP video as a genuine, end-to-end CRDT deployment (not just CRDT-influenced).
See also
- crdt — the underlying theory
- yjs — collaborative-editor alternative
- local-first-software — the architecture pattern Automerge serves