{"id":47619431,"url":"https://github.com/vcmf/dim0","last_synced_at":"2026-06-27T00:01:52.548Z","repository":{"id":345963001,"uuid":"1187493898","full_name":"vcmf/dim0","owner":"vcmf","description":"Open-source, real-time collaborative AI canvas - notes, mini-apps, and agents on one infinite board.","archived":false,"fork":false,"pushed_at":"2026-06-24T21:42:50.000Z","size":24482,"stargazers_count":58,"open_issues_count":2,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-24T22:10:56.931Z","etag":null,"topics":["ai-agent","canvas","fastapi","generative-ui","infinite-canvas","knowledge-graph","mindmap","mini-apps","multiplayer","note-taking","productivity","qdrant","rag","react","real-time-collaboration","research-tool","self-hosted","semantic-search","thinking-canvas","whiteboard"],"latest_commit_sha":null,"homepage":"https://dim0.net","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vcmf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-20T19:42:54.000Z","updated_at":"2026-06-24T19:43:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"560c6f00-9a7d-4da0-b03f-24d049a2e4d1","html_url":"https://github.com/vcmf/dim0","commit_stats":null,"previous_names":["vcmf/dim0"],"tags_count":110,"template":false,"template_full_name":null,"purl":"pkg:github/vcmf/dim0","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcmf%2Fdim0","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcmf%2Fdim0/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcmf%2Fdim0/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcmf%2Fdim0/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vcmf","download_url":"https://codeload.github.com/vcmf/dim0/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcmf%2Fdim0/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34835785,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","canvas","fastapi","generative-ui","infinite-canvas","knowledge-graph","mindmap","mini-apps","multiplayer","note-taking","productivity","qdrant","rag","react","real-time-collaboration","research-tool","self-hosted","semantic-search","thinking-canvas","whiteboard"],"created_at":"2026-04-01T21:55:31.790Z","updated_at":"2026-06-27T00:01:52.539Z","avatar_url":"https://github.com/vcmf.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/dim0-icon.png\" alt=\"Dim0\" width=\"120\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eDim0, The Thinking Canvas\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vcmf/dim0/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/vcmf/dim0?style=flat\u0026labelColor=171611\u0026color=965e30\" alt=\"Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vcmf/dim0/actions/workflows/tests.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/vcmf/dim0/tests.yml?branch=main\u0026style=flat\u0026labelColor=171611\u0026color=3439c9\u0026label=tests\" alt=\"Tests\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vcmf/dim0/pulse\"\u003e\u003cimg src=\"https://img.shields.io/github/commit-activity/m/vcmf/dim0?style=flat\u0026labelColor=171611\u0026color=a6395c\" alt=\"Commit activity\" /\u003e\u003c/a\u003e\n  \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-336d3f?style=flat\u0026labelColor=171611\" alt=\"License: MIT\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://app.dim0.net\"\u003e\u003cimg src=\"https://img.shields.io/badge/▶_live_app-app.dim0.net-3439c9?style=flat\u0026labelColor=171611\" alt=\"Live App\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://dim0.net\"\u003e🌐 Website\u003c/a\u003e · \u003ca href=\"https://app.dim0.net\"\u003e🚀 Live App\u003c/a\u003e · 🤝 Real-time collab · 🔒 Privacy-first · 📄 MIT\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eYour canvas thinks back.\u003c/strong\u003e\u003cbr /\u003e\n  Notes, mini-apps, and an AI agent on one infinite, real-time board. The agent reads what's on the canvas and writes its results right back onto it.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  ⭐ Star if Dim0 is useful to you. It genuinely helps others find the project.\n\u003c/p\u003e\n\n![Dim0 app screenshot](docs/images/main-screen.png)\n*A single board: notes, a mind map, mini-apps, documents, and the agent - all in the same workspace.*\n\n## Features\n\n- ♾️ **Infinite canvas**: thousands of nodes and nested boards, smooth at scale\n- 🎨 **A real whiteboard underneath**: hand-drawn and geometric shapes, arrows, images and media, and a huge icon library (200,000+ via Iconify)\n- 🤖 **Board-aware agent**: reads your canvas and selected nodes, takes multi-step tool actions, and writes results back as editable nodes\n- 🧩 **Mini-apps**: describe a tool, get a real interactive React app on the board: open it, edit it, export it\n- 📝 **Rich notes**: Notion-style rich text, math, code, and sub-pages, edited in place\n- 💻 **Code \u0026 documents**: run code in sandboxes; drop in files that the agent can search (RAG)\n- 🔌 **Bring your own model**: OpenAI, Anthropic, Gemini, Mistral, DeepSeek, Qwen, and more, switch anytime\n- 👥 **Real-time multiplayer**: live cursors, shared edits, a shared agent; conflict-free sync, solo or fifty people deep\n- 🎬 **Present from the canvas**: drop frames on the board and run them as a slideshow, no export to a separate slides tool\n- 🔓 **Open-source \u0026 private**: MIT, self-hostable, your data stays yours (no training, no telemetry)\n\nSee it in action:\n\nhttps://github.com/user-attachments/assets/cdc7d3d4-eb59-4d7d-a9ff-6f0206ba82df\n\n## Why Dim0?\n\nYou 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.\n\n| | **Dim0** | ChatGPT / Claude artifacts | Notion + AI | Miro / tldraw / Excalidraw |\n| --- | :---: | :---: | :---: | :---: |\n| Infinite spatial canvas | ✅ | ❌ | ❌ | ✅ |\n| Agent reads the workspace \u0026 writes back | ✅ | ⚠️ chat only | ⚠️ doc only | ❌ |\n| Mini-apps: real, editable, persistent React apps | ✅ | ⚠️ trapped in thread | ❌ | ❌ |\n| Rich notes (math, code, sub-pages) on the canvas | ✅ | ❌ | ⚠️ docs, not canvas | ❌ |\n| Real-time multiplayer | ✅ | ❌ | ✅ | ✅ |\n| Bring-your-own model (Claude, GPT, Gemini, …) | ✅ | ❌ | ❌ | ❌ |\n| Open-source \u0026 self-hostable | ✅ | ❌ | ❌ | ⚠️ partial |\n| Your data stays yours (no training, no telemetry) | ✅ | ❌ | ❌ | ⚠️ |\n\n**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.\n\n## Quickstart\n\nRun the published images. Docker is the only prerequisite.\n\n```bash\ngit clone https://github.com/vcmf/dim0.git \u0026\u0026 cd dim0\ncp .env.sample .env          # then set the three keys below\nmake pull \u0026\u0026 make run        # pulls latest images and starts everything\n```\n\nSet these three in `.env` before `make run`:\n\n| Key | What it powers |\n| --- | --- |\n| `OPENAI_API_KEY` | the agent's default model + embeddings |\n| `OPENROUTER_API_KEY` | access to the other models (Claude, Gemini, Mistral, …) |\n| `LINKUP_API_KEY` | web search \u0026 page fetch |\n\nOpen **http://localhost:3000** → create a board → type a prompt. Done.\n\nStop it with `make down-run` (add `make kill-run` to wipe volumes).\n\n\u003e Want to hack on the source instead of the images? See **[Run from source](#run-from-source)** below.\n\n## What it is\n\nMost 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.\n\nThe 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.\n\n## Node types\n\nEverything on the board is a node:\n\n- **Shapes** - diagrams and spatial structure\n- **Notes** - rich text, edited in place\n- **Code sandboxes** - write code, run it\n- **Mini-apps** - real, interactive React apps: calculators, charts, visualizers, quizzes\n- **Documents** - uploaded files, also fed into retrieval\n- **Nested boards** - for when one board isn't enough\n- **Frames** - turn the canvas into a presentation\n\n![Shapes on a board](docs/images/board-shapes.png)\n*Shapes for diagrams, flowcharts, and spatial layout.*\n\n![Rich notes](docs/images/board-notes.png)\n*Notes are first-class - rich text, math, code, edited in place.*\n\n![Mini-apps](docs/images/mini-app.png)\n*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.*\n\n![Mindmap from shapes and notes](docs/images/board-mindmap.png)\n*Mix shapes and notes to think through a topic spatially.*\n\nhttps://github.com/user-attachments/assets/ad5de9f4-6f44-43a2-b59a-5279232d7f60\n\n## Canvas engine\n\nThe board is built on [canvas-harness](https://github.com/winlp4ever/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.\n\n## Collaboration\n\nEvery 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.\n\nIt's the same canvas either way: no separate \"shared mode,\" no export-to-collaborate step. Open a board, send the link, work together.\n\n## Agent layer\n\nBuilt on the OpenAI Agents SDK, with board-aware tools wired in:\n\n- Board context - current graph and selected nodes\n- Notes - create, edit, link\n- Web - search and fetch\n- Code - run in Daytona-backed sandboxes\n- Mini-apps - generate real, interactive React apps inline\n- Memory - semantic store and recall, via Qdrant\n\nModels: OpenAI, Anthropic, Google Gemini, Mistral, Moonshot, DeepSeek, Qwen, Z.ai.\n\n![Ask a question, get a visual answer](docs/images/agent-flow.png)\n*Ask a question on the board - the agent answers with a mini-app, a mindmap, or a note, dropped back where you're working.*\n\n## Themes\n\nLight, dark, and a set of paper-and-ink variants. The canvas adapts; so do notes, mini-apps, and shapes.\n\n![Theme showcase](docs/images/themes-showcase.png)\n*A few of the available themes.*\n\n## Try it\n\n- Hosted: https://app.dim0.net\n- Site: https://dim0.net\n- Self-host: see below\n\n## Repo layout\n\n- `backend/` - API, agent logic, prompts, model integrations, persistence\n- `webui/` - React frontend (canvas, chat, board UX)\n- `build/` - Docker Compose and build helpers\n\n## Getting started\n\n### Prerequisites\n\n- Node.js (LTS)\n- `uv` for Python deps\n- Docker + Docker Compose (recommended for local services)\n\n### Environment\n\nCopy `.env.sample` to `.env` and fill in the keys. The three required keys are covered in [Quickstart](#quickstart); the rest of `.env.sample` adds more providers and tools.\n\n```bash\ncp .env.sample .env\n```\n\nA couple of things worth knowing:\n\n- Backend and frontend both read the root `.env`\n- Only variables prefixed with `VITE_` reach the frontend\n\n### Run from source\n\nIf you'd rather run the source instead of the published images:\n\n#### Local databases\n\n```bash\nmake up-db\n```\n\n#### Backend\n\n```bash\ncd backend\nuv sync\nuv run python -m topix.api.app\n```\n\nPort comes from `API_PORT` in `.env` (defaults to `8081`).\n\n#### Frontend\n\n```bash\ncd webui\nnpm install\nnpm run dev\n```\n\nPort comes from `APP_PORT` in `.env` (defaults to `5175`).\n\n## Environment variables\n\n`.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.\n\n## Docker\n\nCompose stack with Makefile shortcuts.\n\n### Core commands\n\n| Command | What it does |\n| --- | --- |\n| `make up` | Build if needed and start all services |\n| `make up-build` | Rebuild images, then start |\n| `make build` | Build images only |\n| `make rebuild` | Rebuild without cache |\n| `make down` | Stop and remove containers |\n| `make kill` | Stop and remove containers, images, and volumes |\n\n### Services and debugging\n\n| Command | What it does |\n| --- | --- |\n| `make ps` | Show service status |\n| `make logs` | Tail logs for all services |\n| `make logs-s SERVICE=backend-dev` | Tail logs for one service |\n| `make up-s SERVICE=backend-dev` | Start one service |\n| `make build-s SERVICE=webui-dev` | Build one service |\n| `make restart-s SERVICE=backend-dev` | Rebuild and restart one service |\n| `make exec SERVICE=backend-dev CMD=\"bash\"` | Open a shell in a service |\n\n### Databases\n\n| Command | What it does |\n| --- | --- |\n| `make up-db` | Start only the databases |\n| `make down-db` | Stop only the databases |\n\n### Overrides\n\nOverride the profile and env file at invocation:\n\n```bash\nmake up PROFILE=local ENVFILE=.env\n```\n\nOr override ports and origins for quick tests:\n\n```bash\nmake up PROFILE=dev API_PORT=9090 API_HOST_PORT=9090 API_ORIGIN=http://localhost:9090\n```\n\n## Images\n\nPublic Docker Hub images, for self-hosting:\n\n- `winlp4ever/dim0-backend`\n- `winlp4ever/dim0-webui`\n\n```bash\ndocker pull winlp4ever/dim0-backend:latest\ndocker pull winlp4ever/dim0-webui:latest\n```\n\nPin a specific release (see [Releases](https://github.com/vcmf/dim0/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.\n\n## Versioning\n\nOne semver for the whole product. The repo-root `VERSION` file is the source of truth, and release tooling syncs it into:\n\n- `backend/pyproject.toml`\n- `webui/package.json`\n- `webui/src-tauri/Cargo.toml`\n\nBumps use Commitizen with Conventional Commits.\n\n```bash\nmake version-check\nmake version-sync\nmake version-bump\n```\n\nGitHub Actions handle the version check, releases, and Docker publishing.\n\n## Troubleshooting\n\n- Frontend can't reach the API? Check `VITE_API_URL` in `.env`.\n- Port already in use? Change `API_PORT` or `APP_PORT`.\n- Env change not picked up? Restart backend and frontend after editing `.env`.\n- Want to see the resolved Compose config? `make config`.\n- Backend tests failing with odd import errors (e.g. `cannot import name 'Docstring' from 'griffe'`)? The local `backend/.venv` is stale or half-installed, and a plain `uv sync` won't repair a partially-deleted package. Rebuild it: `rm -rf backend/.venv \u0026\u0026 uv sync --extra dev`.\n\n## Contributing\n\nIssues and pull requests are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) to get started.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvcmf%2Fdim0","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvcmf%2Fdim0","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvcmf%2Fdim0/lists"}