Automerge — Collaborative Editing#
CRDT-based state sync for collaborative CAD editing across browser, Cloudflare Workers, and bare metal.
Why Automerge#
We have state sync issues across three deployment contexts (browser, CF Workers, bare metal). The end data lives on D1 and R2, but operations happen in all 3 contexts. Automerge provides:
- Conflict-free merging — concurrent edits from multiple users merge automatically
- Offline-first — works without network, syncs when reconnected
- Operation log — every change is recorded, enabling undo/redo and audit trails
How It’s Used#
Operation Log#
All CAD operations are recorded as Automerge operations:
| Operation | Data |
|---|---|
add | { type, id, params } |
translate | { objectId, dx, dy, dz } |
boolean | { op, idA, idB, resultId } |
delete | { objectId } |
clear | {} |
Document Structure#
Each scene is an Automerge document containing:
- Operation log (ordered list of ops)
- Scene state (derived from replaying ops)
Sync#
- Cross-tab: BroadcastChannel adapter (same browser)
- Cross-device: WebSocket adapter via sync server
- Storage: IndexedDB in browser, R2/D1 on Cloudflare
References#
- https://automerge.org
- https://automerge.org/docs/guides/using-automerge-with-llms/
- LLM reference:
docs/llms/automerge-llms-full.txt(166KB)