Loomy is an open-source collaborative whiteboard. Create infinite boards, invite your team, and bring ideas to life in real time.
- Infinite canvas — Draw shapes, sticky notes, and connectors with Excalidraw
- Workspaces & boards — Organize work by workspace; star and revisit recent boards
- Real-time collaboration — Live updates via WebSockets and Redis pub/sub
- Auth — Email/password and OAuth (GitHub, Google)
- Themes — Light, dark, and soft (pastel) themes with i18n (EN, AZ, RU)
| Layer | Stack |
|---|---|
| Frontend | React 19, Vite 7, TypeScript, Tailwind CSS 4, Excalidraw, Zustand, react-router-dom |
| Backend | FastAPI, Python 3.12+, SQLAlchemy, Alembic, Pydantic |
| Data | PostgreSQL 17, Redis 7 |
| Auth | JWT, bcrypt, OAuth 2 (GitHub, Google) |
loomy/
├── api/app/ # FastAPI backend
│ ├── app/
│ │ ├── api/ # Routes
│ │ ├── core/ # Config, JWT, Redis, security
│ │ ├── db/ # SQLAlchemy base, session
│ │ ├── modules/ # auth, boards, elements, users, workspaces
│ │ └── websocket/
│ └── alembic/ # Migrations
├── apps/frontend/ # React SPA (Vite)
├── docs/api/ # API docs
└── docker-compose.yml # PostgreSQL + Redis
- Python 3.12+ and uv
- Node.js 20+ and npm
- Docker (for PostgreSQL and Redis)
docker compose up -dPostgreSQL: localhost:15432, Redis: localhost:6379.
cd api/app
cp .env.example .env
# Edit .env: DATABASE_URL, SECRET_KEY, REDIS_URL, FRONTEND_URL
uv sync
uv run alembic upgrade head
uv run python -m app.mainAPI: http://localhost:8000. Docs: http://localhost:8000/docs.
cd apps/frontend
cp .env.example .env # optional; VITE_API_URL defaults to http://localhost:8000
npm install
npm run devApp: http://localhost:5173.
- API — See
api/app/.env.exampleforDATABASE_URL,SECRET_KEY,REDIS_URL,FRONTEND_URL, and optional OAuth keys. - Frontend — Optional
apps/frontend/.env:VITE_API_URL=http://localhost:8000if the API is not on that URL.
| Where | Command | Description |
|---|---|---|
api/app |
uv run python -m app.main |
Run API (reload) |
api/app |
uv run alembic upgrade head |
Apply migrations |
api/app |
uv run pytest |
Run tests |
api/app |
uv run mypy . |
Type check |
api/app |
uv run ruff check . |
Lint |
apps/frontend |
npm run dev |
Dev server |
apps/frontend |
npm run build |
Production build |
apps/frontend |
npm run lint |
ESLint |
Open-source collaborative whiteboard — use and modify as needed for your project.