One link. A shared canvas.
Anyone who opens a guest editor URL joins the same document. There is no secret edit key.
Edits converge, even when you overlap
Yjs is the conflict-safe document model. The three CodeMirror editors bind directly to Yjs text types. A WebSocket relay shares updates, cursor selections, and presence. No browser tab acts as the authoritative host. The backend persists the document, including its CRDT identity, so reconnecting does not duplicate text.
Local first
componentor/fs stores Yjs snapshots in OPFS and coordinates filesystem access across tabs. BroadcastChannel shares document updates between local tabs, including while offline. Web Locks serialize merged cache writes; the WebSocket relay merges updates across browsers. If OPFS is unavailable, the app falls back to browser storage. Edits during a temporary disconnection are cached and merge when the server returns. Opening an uncached project still requires the server.
Try it locally
- Copy Share → Collaborate → editor URL.
- Open a second browser window at that URL.
- Type in different panes, then at the same point in one pane.
- Select text to see the other participant’s selection.
- Close either tab; the remaining participant can continue.
- Stop the service, edit in an already open tab, then restart it to test reconnecting.
Guest projects are shared by design
Anyone with the editor URL can change a guest project, including its working code and metadata. Published history remains intact. Use Fork when you want an independent copy. Do not put secrets or sensitive personal data in public source.
Deployment model
This first implementation uses one backend process for each shared project set. MySQL provides persistent storage, but multiple independent collaboration servers need shared routing and coordination before horizontal scaling. WebRTC and a dedicated signaling service are not included yet.