CRDTs
Data types whose merge function is associative, commutative and idempotent — so replicas converge without coordination.
The mechanism. A Conflict-free Replicated Data Type constrains its operations so that concurrent updates can always be merged deterministically, in any order, any number of times. Two flavours: state-based (CvRDT) replicas ship their whole state and merge with a join operation that must form a lattice; operation-based (CmRDT) replicas ship operations that must commute, which requires reliable causal delivery. Both give you strong eventual consistency: replicas that have seen the same updates are in the same state, with no consensus round trip.
The catalogue. G-Counter (grow-only, per-replica counts summed) and PN-Counter (two G-Counters). G-Set, 2P-Set, OR-Set (add/remove with unique tags, so a concurrent add beats a remove). LWW-Register. RGA, Logoot and YATA for sequences — these are what collaborative text editors use. Yjs and Automerge are the two production libraries worth knowing.
What the theory does not give you. Convergence is not correctness. A CRDT guarantees all replicas agree on a value; it does not guarantee the value preserves your invariant. You cannot build "balance must not go below zero" or "at most 100 seats" out of CRDTs without coordination — that is a hard result, not a missing feature. Metadata also accumulates: tombstones and version vectors need garbage collection, and that usually needs some coordination after all.
When to reach for them. Offline-first and local-first applications, collaborative editing, multi-region writes where latency matters more than global invariants, and presence/telemetry merging. When you need an invariant enforced, you need consensus instead.
Takeaway. CRDTs move the conflict resolution from runtime to type design. If you can express your state as a lattice, you can drop coordination entirely.