Dev.Lib
arrow_backBack to Blogs
LEVEL_088.8June 27, 20261 min read

CRDT basics for collaboration

Concurrency & Streams

Conflict-free replicated data types merge concurrent edits without central lock — eventual consistency.

Summary

Conflict-free replicated data types merge concurrent edits without central lock — eventual consistency. Used in Figma-like editors, Yjs, Automerge. Trade memory/size for merge correctness. UI shows merged state; not same as operational transform server authority.

Code example

// G-Counter merge: take max per node
function mergeGCounter(a, b) {
  const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
  const result = {};
  for (const k of keys) {
    result[k] = Math.max(a[k] ?? 0, b[k] ?? 0);
  }
  return result;
}

Key points

  • Conflict-free replicated data types merge concurrent edits without central lock — eventual consistency.
  • Used in Figma-like editors, Yjs, Automerge.
  • Trade memory/size for merge correctness.
  • UI shows merged state; not same as operational transform server authority.

Further reading

Related concepts