Skip to content

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

CAD Documentation