kgoedecke / doop
git clone https://github.com/kgoedecke/doop.git
desktop-v0.5.0 · 9d ago
The open-source alternative to Paper.design. A multiplayer design canvas where humans and AI agents design together, live. MCP built in.
+16
stars, 24h · #2,222
+~133
stars, 7 days · #1,616
+~570
stars, 30 days · #1,446
944
★ total · +16% this week
124
forks · 22 open issues
Star history (as recorded here)
LanguageTypeScript
LicenseAGPL-3.0
Created2026-08-22 (2mo ago)
Last pushtoday
Watchers7
OwnerUser
GitHub topics
Links
- GitHub: github.com/kgoedecke/doop
- Homepage: https://doop.design
- Releases · Issues · Hacker News mentions
README excerpt
**Doop is the open-source alternative to Paper.design — a multiplayer design canvas for humans _and_ AI agents.** Every design lives on a shareable **Canvas** (`/c/ `) holding **Frames** — artboards that render real HTML in sandboxed iframes. People edit in the browser; AI agents edit through the built-in **MCP server**, streaming their designs in live. Everyone sees everything as it happens: cursors, presence, frame edits, agent status, and an activity feed. - **Design with agents, not prompts-and-refresh** — connect Claude Code (or any MCP client) once, then watch it sketch, stream and self-review designs on your canvas, next to your cursor. - **A built-in Doop Agent** — queue a card or @mention a role and it designs on its own, no client to connect. Runs on the server's `ANTHROPIC_API_KEY` for a handful of free tasks, then on the **ChatGPT subscription** (or OpenAI key) each user connects (setup); the first-canvas welcome performance is scripted and runs without any of it. - **Pages within a canvas** — organize frames into named pages from the Layers panel. Add, rename, drag to reorder, double-click to rename, or right-click to rename and delete empty pages. Page edits support Undo/Redo; selected frames can move between pages. Agents can list pages with `get_canvas`, manage them with `set_canvas_pages` (passing the original list as `expectedPages` to protect collaborators), and target frames with `pageId`. - **True multiplayer** — live cursors, presence, per-frame editing indicators, undo/redo, comments pinned to elements, and an activity feed, all over one WebSocket room. - **Design memory** — pin exemplar frames, capture decisions, and let the distiller propose durable style rules that every agent follows. - **Private by default** — invite collaborators by email or flip on link sharing per canvas; agents inherit exactly their human's access. - **Self-host in one command** — `docker compose up`, or `bun run dev` with zero configuration (embedded Postgres, no external services required). ## Quickstart [code] Doop builds and installs with bun (`bun.lock` is the only lockfile); the server itself runs on Node. - Web app: **http://localhost:4300** - API + WebSocket + MCP server: **http://localhost:4400** (the web port proxies `/api`, `/ws`, `/mcp` to it) Everything works with no configuration: data persists to an embedded Postgres (PGlite) in `data/pg`, and every optional integration (SMTP, stock photos, object storage, analytics) degrades gracefully until its variable in .env.example is set. The one you will most likely want is `ANTHROPIC_API_KEY`, which turns on the built-in Doop Agent — agents you connect yourself over MCP need no key. Or self-host the production build with Docker: [code] Production build without Docker: `bun run build && bun run start` (single server on :4400 serving everything). Set `DATABASE_URL` to use a real Postgres — same code path as PGlite. Prefer not to run anything? **doop.design** is the hosted versi