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 protocolsautomerge-repo handles 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