AI-native open-source design tool. Design-as-Code.
Prompt to UI on canvas. Multi-agent orchestration. Built-in MCP server. Code generation.
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia
Quick Start · AI · Features · Discord · Contributing
Click the image to watch the demo video
# Install dependencies
bun install
# Start dev server at http://localhost:3000
bun --bun run dev
Or run as a desktop app:
bun run electron:dev
OpenPencil is built around AI from the ground up — not as a plugin, but as a core workflow.
Prompt to UI
Multi-Agent Support
| Agent | Setup |
|---|---|
| Claude Code | No config — uses Claude Agent SDK with local OAuth |
| Codex CLI | Connect in Agent Settings (Cmd+,) |
| OpenCode | Connect in Agent Settings (Cmd+,) |
| GitHub Copilot | copilot login then connect in Agent Settings (Cmd+,) |
MCP Server
.op files via any MCP-compatible agentCode Generation
Canvas & Drawing
Design System
$variable referencesvar(--name) in code outputFigma Import
.fig files with layout, fills, strokes, effects, text, images, and vectors preservedDesktop App
.op file association — double-click to open, single-instance lock| Frontend | React 19 · TanStack Start · Tailwind CSS v4 · shadcn/ui |
| Canvas | Fabric.js v7 |
| State | Zustand v5 |
| Server | Nitro |
| Desktop | Electron 35 |
| AI | Anthropic SDK · Claude Agent SDK · OpenCode SDK · Copilot SDK |
| Runtime | Bun · Vite 7 |
| File format | .op — JSON-based, human-readable, Git-friendly |
src/
canvas/ Fabric.js engine — drawing, sync, layout, guides, pen tool
components/ React UI — editor, panels, shared dialogs, icons
services/ai/ AI chat, orchestrator, design generation, streaming
services/figma/ Figma .fig binary import pipeline
services/codegen React+Tailwind and HTML+CSS code generators
stores/ Zustand — canvas, document, pages, history, AI, settings
variables/ Design token resolution and reference management
mcp/ MCP server tools for external CLI integration
uikit/ Reusable component kit system
server/
api/ai/ Nitro API — streaming chat, generation, validation
utils/ Claude CLI, OpenCode, Codex, Copilot client wrappers
electron/
main.ts Window, Nitro fork, native menu, auto-updater
preload.ts IPC bridge
| Key | Action | Key | Action | |
|---|---|---|---|---|
V |
Select | Cmd+S |
Save | |
R |
Rectangle | Cmd+Z |
Undo | |
O |
Ellipse | Cmd+Shift+Z |
Redo | |
L |
Line | Cmd+C/X/V/D |
Copy/Cut/Paste/Duplicate | |
T |
Text | Cmd+G |
Group | |
F |
Frame | Cmd+Shift+G |
Ungroup | |
P |
Pen tool | Cmd+Shift+E |
Export | |
H |
Hand (pan) | Cmd+Shift+C |
Code panel | |
Del |
Delete | Cmd+Shift+V |
Variables panel | |
[ / ] |
Reorder | Cmd+J |
AI chat | |
| Arrows | Nudge 1px | Cmd+, |
Agent settings | |
Cmd+Alt+U |
Boolean union | Cmd+Alt+S |
Boolean subtract | |
Cmd+Alt+I |
Boolean intersect |
bun --bun run dev # Dev server (port 3000)
bun --bun run build # Production build
bun --bun run test # Run tests (Vitest)
npx tsc --noEmit # Type check
bun run electron:dev # Electron dev
bun run electron:build # Electron package
Contributions are welcome! See CLAUDE.md for architecture details and code style.
git checkout -b feat/my-featurenpx tsc --noEmit && bun --bun run testfeat(canvas): add rotation snappingmain.fig importMIT — Copyright (c) 2026 ZSeven-W