DevSync
2025Collaborative cloud IDE
DevSync lets a team open the same project in the browser and work on it together. Edits, cursors and selections sync through Yjs CRDTs over WebSockets, and every room runs in its own Docker container, so the terminal, dev servers and even Tkinter apps behave like they would on a local machine. Project state is saved, so a room can be picked up again later.
- Next.js
- Yjs
- WebSocket
- Docker
- Express
- Prisma
- Xvfb
How DevSync works
Seven parts of the app. The paired videos play in sync, so you see the same action from the host's screen and a peer's screen at the same moment. Hover a video to speed it up.
01Real-time code syncing
Two users editing the same file. Keystrokes, cursors and selections travel over WebSockets as Yjs CRDT updates, so there are no locks and no merge conflicts.
Each file is a Yjs document. Every client applies the same updates and ends up with the same text, whatever order the updates arrive in. Cursor positions and selections sync alongside the content.
- WebSocket
- Yjs
- CRDT
02Integrated terminal execution
A real shell connected to the room's Docker container. Install dependencies, run a dev server or serve a static site, the same way you would locally.
basic shell
serving a static site
The terminal is a pseudo-terminal attached to the room's container. Long-running processes such as dev servers and watchers keep running when users disconnect and reconnect.
- Docker
- PTY
- WebSocket
- Express
03File system synchronization
Creating, renaming, moving or deleting a file on one screen shows up for every connected peer.
File-tree changes are broadcast as events and every peer applies them in the same order, so the explorer stays the same for everyone even when several people move folders at once.
- WebSocket
- Yjs
04GUI execution
GUI programs such as Tkinter apps run inside the container on a virtual display, and their window is streamed back to the browser.
tkinter app inside the container
Xvfb provides a virtual X11 display inside the container, and its frames are relayed to a canvas in the browser, next to the terminal.
- Xvfb
- X11
- Docker
05Live preview
Start a dev server in the terminal and a preview pane opens through a reverse proxy.
dev server preview
The container's port is exposed through a reverse proxy and shown in a side pane, so everyone in the room sees the running app.
- Reverse proxy
- Port forwarding
06Built-in team chat
A chat panel next to the editor, running on the same WebSocket connection.
Chat uses the same connection as the editor, so there is no second socket to manage. Presence (who is online, who is typing) comes from Yjs awareness.
- WebSocket
- Yjs awareness
07Git repository import
Paste a Git URL and the container clones the repository with its history and opens it in the editor.
git clone inside the room
The clone runs inside the room's container. When it finishes, the file tree refreshes for everyone in the room.
- Git
- Docker