A real-time multiplayer drawing-and-guessing game — a Skribbl.io clone built from scratch, with the WebSocket layer implemented from first principles instead of a game framework.
Most "clone" projects fake the hard part. This one doesn't: there's no Socket.IO or game-framework abstraction — the real-time drawing sync, room state, turn rotation, and scoring are all built directly on raw WebSockets. It's structured as a Turborepo monorepo to keep the app(s) and shared packages properly separated, and it ships with Docker for reproducible deployment.
- Create and join game rooms
- Real-time drawing with live cursor/stroke sync across clients
- Chat-based word guessing
- Dynamic scoring system based on guess speed/accuracy
- Full game loop — rounds, turns, and a winners screen
- Next.js + TypeScript
- Bun runtime
- Raw WebSockets (no socket abstraction library)
- Turborepo monorepo structure
- Docker for containerized deployment
skribbl/
├── apps/
│ ├── client/ # Next.js frontend
│ └── ws-backend/ # Raw WebSocket server
├── packages/ # Shared code across apps
└── ops/ # Per-app Docker configs and Docker compose
# Clone the repo
git clone https://github.com/DevDesignAmitesh/skribbl.git
cd skribbl
# Install dependencies
bun install
# Run everything in dev mode (Turborepo)
bun run dev
# Or run apps individually
bun run start:ws # starts apps/ws-backend
bun run start:client # starts apps/client# Clone the repo
git clone https://github.com/DevDesignAmitesh/skribbl.git
cd skribbl
# Run everything in dev mode using docker
docker compose -f ./ops/dev.docker-compose.yml up
MIT
