You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A fully-featured collaborative code editing environment. Work together in real-time with live cursors, integrated voice/video calling, real-time chat, and an interactive code execution terminal.
Conflict-Free Real-time Sync: Powered by Yjs (CRDT) for sub-millisecond collaboration.
VS Code-Grade Editor: Built on Monaco Editor with syntax highlighting and language support.
WebRTC Voice & Video: Built-in peer-to-peer video conferencing without leaving the editor.
Real-time Chat: Integrated text chat synced seamlessly across the room.
Live Code Execution: Run JavaScript, TypeScript, and Python directly in an interactive, resizable terminal inside the browser.
Authentication & Cloud Saves: Create an account to securely save your code files to the cloud using PostgreSQL and JWT auth.
Modern Dark Mode UI: A gorgeous, responsive, Raycast-inspired minimalist interface.
Tech Stack
Layer
Technology
Frontend
Next.js, React, Vanilla CSS
Code Editor
Monaco Editor
Real-time Sync
Yjs CRDT
Communication
WebSockets + WebRTC
Code Execution
Piston API Engine
Backend
Node.js, Express, jsonwebtoken
Database
PostgreSQL
Containers
Docker Compose
Quick Start
1. Install dependencies
# Install all dependencies (server + client)
npm run install:all
2. Start infrastructure (optional — app works without Redis/PostgreSQL)
docker-compose up -d
3. Start development servers
# Start both server and client
npm run dev
# Or start them separately:
npm run dev:server # Backend on http://localhost:4000
npm run dev:client # Frontend on http://localhost:3000
4. Open in browser
Go to http://localhost:3000
Create a room
Copy the room URL and open it in another browser tab
Start typing — changes sync in real-time!
How CRDT Works
Every character gets a unique ID — not positional index
Operations are insert/delete by ID — "Insert 'X' after id:42"
Merge is commutative & idempotent — any order produces same result
Deletes are tombstones — keeps IDs for reference anchoring