Automerge
JSON CRDT library for building local-first, collaborative applications. Automerge represents any JSON data structure as a CRDT that merges changes from multiple sources without conflicts. Unlike Yjs (which focuses on text/rich documents), Automerge handles arbitrary JSON documents — counters, maps, lists, text. Rewritten in Rust (Automerge 2.x) with WebAssembly bindings for high performance. Developed by Ink & Switch research lab (also behind Beehive, Pushpin local-first projects).
Score Breakdown
⚙ Agent Friendliness
🔒 Security
Rust core provides memory safety. No network calls — security depends on sync transport. Open source (MIT/Apache 2.0) for full auditability. No built-in encryption or access control.
⚡ Reliability
Best When
You need offline-first collaborative JSON documents with flexible schema, and Yjs's text-oriented model doesn't fit your use case.
Avoid When
You're primarily building a collaborative text editor — Yjs has better editor bindings. Avoid if you need server authority over state.
Use Cases
- • Build local-first apps with JSON document sync that works offline and merges changes when reconnected — no server required for basic sync
- • Implement multi-agent shared JSON state where agents write to different parts of a document tree and changes merge automatically
- • Create collaborative database-like applications where multiple users edit records concurrently with automatic conflict resolution
- • Sync application state across devices with Automerge's efficient binary change encoding without custom sync protocol implementation
- • Use Automerge as the storage layer for agent knowledge graphs where multiple agents contribute observations to shared JSON documents
Not For
- • High-performance text editing UIs requiring rich editor binding — Yjs has better editor integration (ProseMirror, CodeMirror, Monaco bindings)
- • Applications needing strict consistency or business logic on mutations — CRDTs merge mathematically, not via rules
- • Server-authoritative state with complex validation — Automerge is peer-to-peer; validation must happen at application layer
Interface
Authentication
Automerge is a library with no built-in sync server — auth is fully delegated to the sync transport layer. AutomergeRepo (the sync layer) supports custom network adapters where auth can be implemented. No built-in access control.
Pricing
Automerge is open source maintained by Ink & Switch and community contributors. No commercial offering. Sync infrastructure must be self-built or use third-party services (e.g., Automerge-Repo + custom server).
Agent Metadata
Known Gotchas
- ⚠ Automerge 2.x (Rust/WASM) has a different API than 1.x (pure JS) — don't mix documentation versions; the 2.x API uses Automerge.change() with a mutable proxy pattern
- ⚠ Documents must be initialized with Automerge.init() before any changes — operating on uninitialized documents throws errors
- ⚠ Automerge text handling uses Automerge.Text objects, not plain strings — agents must use splice() operations for text mutation rather than assignment
- ⚠ Large documents accumulate change history — periodic compaction with Automerge.save() + Automerge.load() is needed to manage document size in long-lived applications
- ⚠ AutomergeRepo (the recommended sync layer) is separate from the core Automerge library — many tutorials conflate the two; understand which layer you're using
- ⚠ WASM initialization is asynchronous in browser environments — agents must await Automerge.init() before using the library; synchronous usage causes silent failures
Alternatives
Full Evaluation Report
Detailed scoring breakdown, competitive positioning, security analysis, and improvement recommendations for Automerge.
Scores are editorial opinions as of 2026-03-06.