This project is discontinued - it's a demo. All data is fake and resets on refresh.
Driftboard
Ada Marin
5 days ago
We shipped Yjs in prod for ~2 years. Offline + merges really are nearly free and it was the right call. The unbounded growth is real but manageable: snapshot periodically, store the snapshot + a short tail of updates, and GC the rest. Do NOT keep the full update log forever.
Concretely: we snapshot every ~500 updates or on idle, persist Y.encodeStateAsUpdate, and drop older updates. Board load got faster and memory stopped creeping. Also enable Yjs GC for deleted content - it is off in some setups.
Counterpoint from the OT side: we run OT and the wire efficiency matters at our scale, but I would not choose it again for a small team. The server correctness work never ends. If you do not have someone who loves that problem, go CRDT.
Strong agree. OT is a tar pit unless realtime text at massive scale is your core product. For shapes on a canvas the CRDT ergonomics win easily.
For 10k+ elements, watch your awareness/presence channel separately from the doc - do not put cursors in the CRDT. Keeping presence ephemeral kept our doc small and our merges fast.