2026-02-02 · tooling · 10 min
P2P CRDT sync: what works, what breaks
Six months on exp_006. WebRTC + Yjs with no authority server, and the gotchas we hadn't anticipated.
The idea: why have an authority server syncing a collaborative document when WebRTC allows direct peer-to-peer? We built the experiment on Yjs, which resolves conflicts deterministically, and routed all state through a DataChannel mesh.
What works: synchronous collaboration with 2-3 users on the same local network. Sub-50 ms latency, no server to pay for, no central failure point. For a creative-studio use case (designers + devs on the same brief), it's clean.
What breaks: NAT traversal, peer hot-reload, and especially history. Without a server, how does a newcomer catch up on the document if all previous peers are disconnected? We ended up adding a passive signaling server that hosts a snapshot — so not quite peer-to-peer anymore, but not quite client-server either.