WhiteBoardDoodle: Collaborative Whiteboard
Projects | | Links: Github Link

A lightweight desktop whiteboard for real‑time collaboration on trusted local networks. Built with Python, PyQt6, and WebSockets, it syncs drawings across multiple clients with smooth zoom/pan, undo/redo, and PNG export. Just start the server, open clients, and draw together.
A desktop app for real-time collaborative drawing on local networks, built with Python.
This project was created to explore real-time networking and GUI development with PyQt6. It’s a simple whiteboard where multiple users can draw together over WebSockets.
About
The app allows users to draw shapes and freehand lines in real-time across multiple clients connected to a central server. It’s designed for quick collaboration on ideas, like brainstorming sessions.
Learning Experience
Working on this project taught me several key skills:
- Real-time Networking: Implementing WebSocket communication for instant synchronization between clients.
- GUI Development: Building a responsive interface with PyQt6, including canvas rendering, event handling, and undo/redo functionality.
- Asynchronous Programming: Using asyncio for the server to handle multiple connections efficiently.
- Project Structure: Organizing code into modular components (client/server, MVC pattern) for maintainability.
- Tooling: Setting up modern Python development with uv, Ruff for linting, and pytest for testing.
It was a great way to combine desktop app development with networking concepts.
Features
- Real-time drawing with freehand, lines, rectangles, and ellipses
- Zoom and pan canvas
- Color and width selection
- Undo/redo functionality
- Export to PNG
- Multi-user collaboration via WebSocket
- Cross-platform (Windows, macOS, Linux)
Quick Start
- Install dependencies:
uv sync - Start server:
uv run python -m src.collaborative_whiteboard.server.main - Start clients:
uv run python -m src.collaborative_whiteboard.client.main(multiple instances)
Draw in one client and see changes sync in others.
Installation
Requires Python 3.13+.
Using uv (recommended):
uv sync
Using pip:
pip install PyQt6 websockets
Usage
- Server runs on ws://localhost:8765 by default.
- For LAN collaboration, update
SERVER_HOSTin client config to the server’s IP. - Tools: Select from toolbar, draw by clicking and dragging.
Configuration
- Server settings:
src/collaborative_whiteboard/server/config.py - Client settings:
src/collaborative_whiteboard/client/config.py
Architecture
- Server: Asyncio WebSocket server that broadcasts drawing messages.
- Client: PyQt6 GUI with MVC pattern, canvas rendering, and network handling.
See docs/ARCHITECTURE.md for details.
Development
- Run tests:
uv run pytest - Format code:
uv run ruff format src/ - Lint:
uv run ruff check src/