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:

OperationData
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#