Recombyn is an AI-native infinite vector canvas. From web canvas to desktop app, Design Agent, backend, live collab, private deploy, and automated tests — a commercial-grade full-loop product.
Built-in Design Agent (LangGraph): natural language creates layers, draws shapes, restyles, and typesets. Ships with Skills out of the box; you can also add custom Skills / AgentProfile (YAML) / prompt packs for posters, dashboards, landing pages, and more — then keep editing at vector precision.
You can self-host in a few minutes with Docker Compose (default MySQL + Redis + web + API + Yjs collab). For local dev, leave DATABASE_URL empty for SQLite, or switch to PostgreSQL — see docs/postgres-switch.md.
Open source takes time. If Recombyn helps you, please hit ⭐ Star in the top-right of the GitHub repo.
→ https://github.com/recombyn/recombyn
Custom RCB infinite canvas: the scene graph is SceneDocument, zoom roughly 5%–10000%. Committed nodes paint as per-node SVG; Path2D handles hit-testing and selection. Far-out geometry uses LOD, so large docs stay editable.
Details: docs/canvas-architecture.md · Scene JSON: docs/scene-json-spec.md.
You can:
- Build frames, shapes, text, images, video, Lottie; draw with pen / pencil (ribbon outline brush); select & transform
- Run boolean ops (union / subtract / intersect, …)
- Set stroke align: center / inside / outside
- Outline a stroke into an editable filled path, then edit the path
- Fill, corner radius, blend modes, opacity, stacking; export & share
- Turn on Yjs live collab (cursors, selection, undo;
apps/collab)
A streaming chat agent: you describe the job; it plans, attaches Skills, calls tools, and writes back onto the same canvas — landings, posters, revisions, and more.
The execution kernel is fixed: LangGraph template canvas_ops_v1. Category and behavior come from config (AgentProfile YAML / prompt packs / Skills / Tools) — you don’t have to touch the kernel.
| Layer | Owns | Must not |
|---|---|---|
| Kernel | Control loop, tool scheduling, canvas R/W, rounds / permissions / ops allowlist | Design taste or category craft |
| AgentProfile (YAML) | Stage protocol, routing, roles, sub-agents, capabilities | Replace the LangGraph registry |
| Stage prompt packs | Per-stage turn protocol (intent / decide / paint / review / …) | Category craft curricula |
| Skills | Domain playbooks (layout, rhythm, review bars, few-shots) | JSON element / patch schema |
| Tools | Atomic canvas ops (create_frame, update_node, …) |
Business aesthetics |
Typical turn: intent → (chat settle / lean paint / design decide) → paint emits tool_ops → observe → optional Review sub-agent → settle. Full graph: docs/agent-profile.md.
One folder per skill: apps/api/seeds/design_skills/<key>/ (_meta.json + SKILL.md; optional schema.json, assets/, …).
_meta.json— when to use, triggers,preferred_tools, mutex — Decide picks skills from thisSKILL.md— how to craft that deliverable (landing, poster, resume, dashboard, motion, …)
The repo already ships many (landing, poster, resume, dashboard, motion, ecommerce…). You can keep adding folders — no fixed cap.
Atomic canvas ops live in apps/api/seeds/canvas_actions_seed.json. Paint emits structured tool_ops; the host validates and applies them. Skills may prefer tools; they cannot invent ops outside the registry.
| File | Purpose |
|---|---|
apps/api/seeds/agents/profiles/design.canvas.yaml |
Default Profile: stages, roles, subagents, skills/tools catalogs, $kv routing |
apps/api/seeds/agents/bindings.yaml |
product / surface → Profile id |
apps/api/seeds/design_prompt_packs/ |
Stage prompt bodies |
apps/api/seeds/design_skills/ |
Add / edit skills |
apps/api/seeds/canvas_actions_seed.json |
Tool catalog |
apps/api/.env → AGENT_PROFILE_ID |
Force Profile id (default design.canvas; empty → use bindings) |
Swap / add an Agent
- Copy
profiles/design.canvas.yaml→profiles/my.agent.yaml; changeid:/ identity / capabilities - Point
bindings.yamlat the new id, or setAGENT_PROFILE_ID=my.agent - Restart the API (Profiles load from disk, not DB rows)
Add a Skill
- Create
design_skills/my_scene/_meta.json+SKILL.md - Fill triggers +
preferred_tools - Restart / re-ensure seeds — Decide can attach it
Private packs can also live under plugins/skills/ (Compose-mounted). See docs/skill-extensions.md.
Env knobs (Review on/off, timeouts): docs/agent-profile.md § Env knobs. Seeds overview: apps/api/seeds/README.md. Models: docs/self-hosting.md.
Two extension surfaces — don’t mix them up:
| Kind | Path | What it extends | Sample |
|---|---|---|---|
| Skill pack | plugins/skills/<key>/ |
Design Agent craft (same layout as seeds/design_skills) |
festival_poster |
| Canvas plugin | plugins/canvas/<id>/ |
Editor UI (toolbar buttons today) | watermark |
Skill pack
- Drop
_meta.json+SKILL.mdunderplugins/skills/<key>/(optionalhandler.py,schema.json,assets/). - Compose already mounts
./plugins/skills→ API; or setDESIGN_SKILLS_PLUGIN_DIRS. - Restart API / wait for hot reload — chat with a trigger (sample: 「生成中秋红色海报」).
Optional: DESIGN_SKILL_OPS_RUNNER=true lets handler.py emit tool_ops before LLM paint. Details: docs/skill-extensions.md.
Canvas plugin
- Add
manifest.json+index.tsunderplugins/canvas/<id>/. - Register it in
ensureCanvasPlugins()(apps/web/src/plugins/canvas/host.ts). - Rebuild / refresh the web app.
Details: docs/canvas-plugins.md.
Packaged install (.recombyn-plugin)
node scripts/pack-recombyn-plugin.mjs plugins/skills/festival_poster
# → dist/plugins/<id>-<version>.recombyn-plugin
# Upload via Skills library, or POST /api/v1/design/plugins/install
# Disk install needs DESIGN_PLUGIN_DISK_INSTALL=true→ docs/plugin-packs.md · plugins/skills/README.md · plugins/canvas/README.md
git clone https://github.com/recombyn/recombyn.git
cd recombyn
cp apps/api/.env.example apps/api/.env # add LLM_API_KEY / provider keys
docker compose up -d --build| Service | URL |
|---|---|
| Web | http://localhost:3000 |
| API docs | http://localhost:8000/docs |
| MySQL | 127.0.0.1:3306 · recombyn / recombyn |
More options (env, LLM keys, production hardening): docs/self-hosting.md · Postgres: docs/postgres-switch.md
docker compose up -d redis # or: mysql redis
npm install
cp apps/api/.env.example apps/api/.env
npm run dev:api # empty DATABASE_URL → SQLite
npm run dev:collab # Yjs WS on :1234 (optional; Vite DEV defaults collab on)
npm run dev:webCanvas Live / WSS setup: docs/self-hosting.md § Canvas multiplayer · apps/collab/README.md
See docs/desktop.md. Needs Rust + platform toolchain.
# Local — bundled API sidecar + SQLite
npm run dev:desktop
npm run build:desktop:sidecar
npm run build:desktop
# Cloud — same API as browser (:8000 / .env)
# Optional: VITE_API_BASE_URL when hosted
npm run dev:desktop:cloud
npm run build:desktop:cloudBuild output: apps/web/src-tauri/target/release/bundle/ (installers); main binary …/target/release/recombyn.exe.
apps/web/ React canvas + Agent UI + Yjs client
src-tauri/ Tauri v2 desktop shell (Recombyn)
apps/api/ FastAPI — Scene, Agent, plaza, wallet, collab tokens
apps/collab/ Yjs WebSocket server (y-websocket)
plugins/ Private extensions (skills + canvas) — Compose-mounted
packages/ Shared builders & schemas
docs/ self-hosting, agent-profile, plugins, desktop, canvas
deploy/ Dockerfiles / Nginx
e2e/ Playwright
User-facing help source is private; CI publishes only the built static site to this repo’s gh-pages branch → recombyn.github.io/recombyn/.
| User docs | recombyn.github.io/recombyn |
| Self-host / architecture | docs/self-hosting.md |
| Skill extensions | docs/skill-extensions.md |
| Canvas plugins | docs/canvas-plugins.md |
Plugin packs (.recombyn-plugin) |
docs/plugin-packs.md |
| AgentProfile / sub-agents | docs/agent-profile.md |
| Canvas (RCB / SVG / Path2D / LOD) | docs/canvas-architecture.md |
| Web data layer (Query / oRPC / nuqs) | docs/web-frontend.md |
| Scene JSON | docs/scene-json-spec.md |
| Desktop | docs/desktop.md |
| Postgres | docs/postgres-switch.md |
| Contributing · Security · CoC | CONTRIBUTING.md · SECURITY.md · CODE_OF_CONDUCT.md |
- Issues — bug & feature templates under
.github/ISSUE_TEMPLATE/ - PRs — see CONTRIBUTING.md
- Security — report privately per SECURITY.md
Official: recombyn.com · Docs: recombyn.github.io/recombyn · Source: github.com/recombyn/recombyn




