Real-time presence without the complexity

Presence rooms, broadcast sync, and cursor tracking — built on a lightweight collab server that doesn't require a full CRDT for most use cases.

Real-time presence without the complexity

Real-time collaboration is often associated with CRDTs and complex merge algorithms. For most workspace apps, this is overkill.

What we actually need

For a workspace app, real-time means three things: presence (who is online and where), broadcast sync (when a teammate makes a change, see it without refreshing), and cursor tracking.

None of these require a CRDT. They require a pub/sub system and a conflict resolution strategy — which we handle in the sync engine, not the collab layer.

Room types

We have two kinds of rooms: relay rooms and presence rooms. Relay rooms broadcast mutations to everyone in the room. Presence rooms track cursor positions and active users. Both use WebSockets on a lightweight Node.js collab server.

Why not a CRDT?

CRDTs are the right tool for collaborative text editing. For structured data (tables, task fields), last-write-wins per field is simpler and correct for most use cases. The UX cost of showing merge conflicts is higher than the cost of occasionally overwriting someone else's work.