🌐 Website · 🚀 Live App · 🤝 Real-time collab · 🔒 Privacy-first · 📄 MIT
Most AI tools start with a chat box and bolt everything else on around it. Dim0 inverts that: the board is the workspace, and the agent is one of the things living on it. It reads what's on your canvas, takes real steps with tools, and writes results back as editable nodes — notes, mind maps, and mini-apps (real, interactive React apps, not chat-trapped artifacts). Everything is real-time multiplayer and open-source: self-host it, own your data, switch models whenever the landscape shifts.
⭐ Star if Dim0 is useful to you — it genuinely helps others find the project.
A single board: notes, a mind map, mini-apps, documents, and the agent - all in the same workspace.
query_to_mindmap_dim0.mp4
You already have a chat assistant, a whiteboard, and a doc tool. Dim0 is what you get when they're the same surface — and the AI can actually touch it.
| Dim0 | ChatGPT / Claude artifacts | Notion + AI | Miro / tldraw / Excalidraw | |
|---|---|---|---|---|
| Infinite spatial canvas | ✅ | ❌ | ❌ | ✅ |
| Agent reads the workspace & writes back | ✅ | ❌ | ||
| Mini-apps: real, editable, persistent React apps | ✅ | ❌ | ❌ | |
| Real-time multiplayer | ✅ | ❌ | ✅ | ✅ |
| Bring-your-own model (Claude, GPT, Gemini, …) | ✅ | ❌ | ❌ | ❌ |
| Open-source & self-hostable | ✅ | ❌ | ❌ | |
| Your data stays yours (no training, no telemetry) | ✅ | ❌ | ❌ |
The short version: mini-apps and agent output live on the board next to your notes and data — editable, persistent, and shared with your team in real time — instead of being buried in a chat thread you'll never find again.
Run the published images — Docker is the only prerequisite.
git clone https://github.com/vcmf/dim0.git && cd dim0
cp .env.sample .env # then set the three keys below
make pull && make run # pulls latest images and starts everythingSet these three in .env before make run:
| Key | What it powers |
|---|---|
OPENAI_API_KEY |
the agent's default model + embeddings |
OPENROUTER_API_KEY |
access to the other models (Claude, Gemini, Mistral, …) |
LINKUP_API_KEY |
web search & page fetch |
Open http://localhost:3000 → create a board → type a prompt. Done.
Stop it with make down-run (add make kill-run to wipe volumes).
Want to hack on the source instead of the images? See Run from source below.
Most AI tools start with a chat box and bolt the rest of the product on around it. Dim0 goes the other way - the board is the workspace, and the agent is one of the things living on it.
The board holds notes, code sandboxes, mini-apps, documents, nested boards, and presentation frames, all sitting next to each other - and your whole team can be on it at once. The agent can see what's there, take multiple steps with tools, and drop its results back onto the same canvas.
Things it can do:
- Read the current board and any selected nodes
- Search the web and fetch pages
- Run code in a sandbox
- Create and edit notes
- Generate mini-apps - real, interactive React apps, right on the board
- Save and recall semantic memory
Everything on the board is a node:
- Shapes - diagrams and spatial structure
- Notes - rich text, edited in place
- Code sandboxes - write code, run it
- Mini-apps - real, interactive React apps: calculators, charts, visualizers, quizzes
- Documents - uploaded files, also fed into retrieval
- Nested boards - for when one board isn't enough
- Frames - turn the canvas into a presentation
Shapes for diagrams, flowcharts, and spatial layout.
Notes are first-class - rich text, math, code, edited in place.
Describe a tool and Dim0 builds a real, interactive app - it lives on the board, reads the data next to it, and you can open, edit, and export the React code.
Mix shapes and notes to think through a topic spatially.
rich_canvas.mp4
The board is built on canvas-harness, a canvas-rendered node-graph library we maintain separately. Boards can hold thousands of nodes and still pan, zoom, and edit smoothly — comparable to tldraw and Excalidraw, and on par with hosted tools like Miro or FigJam.
Every board is real-time multiplayer. Live cursors, shared edits, and a shared agent - the same board works identically whether you're solo or fifty people deep. Edits sync over WebSocket with operational transforms, so concurrent changes merge without conflicts or lost work.
It's the same canvas either way: no separate "shared mode," no export-to-collaborate step. Open a board, send the link, work together.
Built on the OpenAI Agents SDK, with board-aware tools wired in:
- Board context - current graph and selected nodes
- Notes - create, edit, link
- Web - search and fetch
- Code - run in Daytona-backed sandboxes
- Mini-apps - generate real, interactive React apps inline
- Memory - semantic store and recall, via Qdrant
Models: OpenAI, Anthropic, Google Gemini, Mistral, Moonshot, DeepSeek, Qwen, Z.ai.
Ask a question on the board - the agent answers with a mini-app, a mindmap, or a note, dropped back where you're working.
Light, dark, and a set of paper-and-ink variants. The canvas adapts; so do notes, mini-apps, and shapes.
A few of the available themes.
- Hosted: https://app.dim0.net
- Site: https://dim0.net
- Self-host: see below
backend/- API, agent logic, prompts, model integrations, persistencewebui/- React frontend (canvas, chat, board UX)build/- Docker Compose and build helpers
- Node.js (LTS)
uvfor Python deps- Docker + Docker Compose (recommended for local services)
Copy .env.sample to .env and fill in the keys.
cp .env.sample .envAt minimum, set these three:
OPENAI_API_KEY- the agent's default model and embeddingsOPENROUTER_API_KEY- access to the other models (Claude, Gemini, Mistral, …)LINKUP_API_KEY- web search and page fetch
The rest of .env.sample covers additional providers and tools.
A couple of things worth knowing:
- Backend and frontend both read the root
.env - Only variables prefixed with
VITE_reach the frontend
make pull
make runThen open http://localhost:3000.
Stop it:
make down-runStop it and wipe volumes:
make kill-runIf you'd rather run the source instead of the published images:
make up-dbcd backend
uv sync
uv run python -m topix.api.appPort comes from API_PORT in .env (defaults to 8081).
cd webui
npm install
npm run devPort comes from APP_PORT in .env (defaults to 5175).
.env.sample is the canonical list - ports and origins, model provider keys, search and image provider keys, local service settings, backend auth and tracing. Use it as a checklist when setting things up.
Compose stack with Makefile shortcuts.
| Command | What it does |
|---|---|
make up |
Build if needed and start all services |
make up-build |
Rebuild images, then start |
make build |
Build images only |
make rebuild |
Rebuild without cache |
make down |
Stop and remove containers |
make kill |
Stop and remove containers, images, and volumes |
| Command | What it does |
|---|---|
make ps |
Show service status |
make logs |
Tail logs for all services |
make logs-s SERVICE=backend-dev |
Tail logs for one service |
make up-s SERVICE=backend-dev |
Start one service |
make build-s SERVICE=webui-dev |
Build one service |
make restart-s SERVICE=backend-dev |
Rebuild and restart one service |
make exec SERVICE=backend-dev CMD="bash" |
Open a shell in a service |
| Command | What it does |
|---|---|
make up-db |
Start only the databases |
make down-db |
Stop only the databases |
Override the profile and env file at invocation:
make up PROFILE=local ENVFILE=.envOr override ports and origins for quick tests:
make up PROFILE=dev API_PORT=9090 API_HOST_PORT=9090 API_ORIGIN=http://localhost:9090Public Docker Hub images, for self-hosting:
winlp4ever/dim0-backendwinlp4ever/dim0-webui
docker pull winlp4ever/dim0-backend:latest
docker pull winlp4ever/dim0-webui:latestPin a specific release (see Releases for the current version) by swapping latest for a tag, e.g. :0.3.41. To run them locally, use the make pull / make run flow above.
One semver for the whole product. The repo-root VERSION file is the source of truth, and release tooling syncs it into:
backend/pyproject.tomlwebui/package.jsonwebui/src-tauri/Cargo.toml
Bumps use Commitizen with Conventional Commits.
make version-check
make version-sync
make version-bumpGitHub Actions handle the version check, releases, and Docker publishing.
- Frontend can't reach the API? Check
VITE_API_URLin.env. - Port already in use? Change
API_PORTorAPP_PORT. - Env change not picked up? Restart backend and frontend after editing
.env. - Want to see the resolved Compose config?
make config. - Backend tests failing with odd import errors (e.g.
cannot import name 'Docstring' from 'griffe')? The localbackend/.venvis stale or half-installed — a plainuv syncwon't repair a partially-deleted package. Rebuild it:rm -rf backend/.venv && uv sync --extra dev.
MIT.