Skip to content
ย 
ย 

Latest commit

ย 

History

142 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

OpenPencil

OpenPencil

The world's first open-source AI-native vector design tool.
Concurrent Agent Teams โ€ข Design-as-Code โ€ข Built-in MCP Server โ€ข Multi-model Intelligence

English ยท ็ฎ€ไฝ“ไธญๆ–‡ ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด ยท Franรงais ยท Espaรฑol ยท Deutsch ยท Portuguรชs ยท ะ ัƒััะบะธะน ยท เคนเคฟเคจเฅเคฆเฅ€ ยท Tรผrkรงe ยท เน„เธ—เธข ยท Tiแบฟng Viแป‡t ยท Bahasa Indonesia

Stars License CI Discord


OpenPencil โ€” click to watch demo

Click the image to watch the demo video


Note: There is another open-source project with the same name โ€” OpenPencil, focused on Figma-compatible visual design with real-time collaboration. This project focuses on AI-native design-to-code workflows.

Why OpenPencil

๐ŸŽจ Prompt โ†’ Canvas

Describe any UI in natural language. Watch it appear on the infinite canvas in real-time with streaming animation. Modify existing designs by selecting elements and chatting.

๐Ÿค– Concurrent Agent Teams

The orchestrator decomposes complex pages into spatial sub-tasks. Multiple AI agents work on different sections simultaneously โ€” hero, features, footer โ€” all streaming in parallel.

๐Ÿง  Multi-Model Intelligence

Automatically adapts to each model's capabilities. Claude gets full prompts with thinking; GPT-4o/Gemini disable thinking; smaller models (MiniMax, Qwen, Llama) get simplified prompts for reliable output.

๐Ÿ”Œ MCP Server

One-click install into Claude Code, Codex, Gemini, OpenCode, Kiro, or Copilot CLIs. Design from your terminal โ€” read, create, and modify .op files through any MCP-compatible agent.

๐Ÿ“ฆ Design-as-Code

.op files are JSON โ€” human-readable, Git-friendly, diffable. Design variables generate CSS custom properties. Code export to React + Tailwind or HTML + CSS.

๐Ÿ–ฅ๏ธ Runs Everywhere

Web app + native desktop on macOS, Windows, and Linux via Electron. Auto-updates from GitHub Releases. .op file association โ€” double-click to open.

โŒจ๏ธ CLI โ€” op

Control the design tool from your terminal. op design, op insert, op export โ€” batch design DSL, node manipulation, code export. Pipe in from files or stdin. Works with desktop app or web server.

๐ŸŽฏ Multi-Platform Code Export

Export to React + Tailwind, HTML + CSS, Vue, Svelte, Flutter, SwiftUI, Jetpack Compose, React Native โ€” all from one .op file. Design variables become CSS custom properties.

Install

macOS (Homebrew):

brew tap zseven-w/openpencil
brew install --cask openpencil

Windows (Scoop):

scoop bucket add openpencil https://github.com/zseven-w/scoop-openpencil
scoop install openpencil

Linux / Windows direct download: GitHub Releases โ€” .exe (Windows), .AppImage / .deb (Linux)

CLI (op):

npm install -g @zseven-w/openpencil

Quick Start (Development)

# 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

Prerequisites: Bun >= 1.0 and Node.js >= 18

Docker

Multiple image variants are available โ€” pick the one that fits your needs:

Image Size Includes
openpencil:latest ~226 MB Web app only
openpencil-claude:latest โ€” + Claude Code CLI
openpencil-codex:latest โ€” + Codex CLI
openpencil-opencode:latest โ€” + OpenCode CLI
openpencil-copilot:latest โ€” + GitHub Copilot CLI
openpencil-gemini:latest โ€” + Gemini CLI
openpencil-full:latest ~1 GB All CLI tools

Run (web only):

docker run -d -p 3000:3000 ghcr.io/zseven-w/openpencil:latest

Run with AI CLI (e.g. Claude Code):

The AI chat relies on Claude CLI OAuth login. Use a Docker volume to persist the login session:

# Step 1 โ€” Login (one-time)
docker volume create openpencil-claude-auth
docker run -it --rm \
  -v openpencil-claude-auth:/root/.claude \
  ghcr.io/zseven-w/openpencil-claude:latest claude login

# Step 2 โ€” Start
docker run -d -p 3000:3000 \
  -v openpencil-claude-auth:/root/.claude \
  ghcr.io/zseven-w/openpencil-claude:latest

Build locally:

# Base (web only)
docker build --target base -t openpencil .

# With a specific CLI
docker build --target with-claude -t openpencil-claude .

# Full (all CLIs)
docker build --target full -t openpencil-full .

AI-Native Design

Prompt to UI

  • Text-to-design โ€” describe a page, get it generated on canvas in real-time with streaming animation
  • Orchestrator โ€” decomposes complex pages into spatial sub-tasks for parallel generation
  • Design modification โ€” select elements, then describe changes in natural language
  • Vision input โ€” attach screenshots or mockups for reference-based design

Multi-Agent Support

Agent Setup
Built-in (9+ providers) Select from provider presets with region switcher โ€” Anthropic, OpenAI, Google, DeepSeek, and more
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+,)
Gemini CLI Connect in Agent Settings (Cmd+,)

Model Capability Profiles โ€” automatically adapts prompts, thinking mode, and timeouts per model tier. Full-tier models (Claude) get complete prompts; standard-tier (GPT-4o, Gemini, DeepSeek) disable thinking; basic-tier (MiniMax, Qwen, Llama, Mistral) get simplified nested-JSON prompts for maximum reliability.

i18n โ€” Full interface localization in 15 languages: English, ็ฎ€ไฝ“ไธญๆ–‡, ็น้ซ”ไธญๆ–‡, ๆ—ฅๆœฌ่ชž, ํ•œ๊ตญ์–ด, Franรงais, Espaรฑol, Deutsch, Portuguรชs, ะ ัƒััะบะธะน, เคนเคฟเคจเฅเคฆเฅ€, Tรผrkรงe, เน„เธ—เธข, Tiแบฟng Viแป‡t, Bahasa Indonesia.

MCP Server

  • Built-in MCP server โ€” one-click install into Claude Code / Codex / Gemini / OpenCode / Kiro / Copilot CLIs
  • Auto-detects Node.js โ€” if not installed, falls back to HTTP transport and auto-starts the MCP HTTP server
  • Design automation from terminal: read, create, and modify .op files via any MCP-compatible agent
  • Layered design workflow โ€” design_skeleton โ†’ design_content โ†’ design_refine for higher-fidelity multi-section designs
  • Segmented prompt retrieval โ€” load only the design knowledge you need (schema, layout, roles, icons, planning, etc.)
  • Multi-page support โ€” create, rename, reorder, and duplicate pages via MCP tools

Code Generation

  • React + Tailwind CSS, HTML + CSS, CSS Variables
  • Vue, Svelte, Flutter, SwiftUI, Jetpack Compose, React Native

CLI โ€” op

Install globally and control the design tool from your terminal:

npm install -g @zseven-w/openpencil
op start                     # Launch desktop app
op design @landing.txt       # Batch design from file
op insert '{"type":"RECT"}'  # Insert a node
op export react --out .      # Export to React + Tailwind
op import:figma design.fig   # Import Figma file
cat design.dsl | op design - # Pipe from stdin

Supports three input methods: inline string, @filepath (read from file), or - (read from stdin). Works with desktop app or web dev server. See CLI README for full command reference.

LLM Skill โ€” install the OpenPencil Skill plugin to teach AI agents (Claude Code, Cursor, Codex, Gemini CLI, etc.) how to design with op.

Features

Canvas & Drawing

  • Infinite canvas with pan, zoom, smart alignment guides, and snapping
  • Rectangle, Ellipse, Line, Polygon, Pen (Bezier), Frame, Text
  • Boolean operations โ€” union, subtract, intersect with contextual toolbar
  • Icon picker (Iconify) and image import (PNG/JPEG/SVG/WebP/GIF)
  • Auto-layout โ€” vertical/horizontal with gap, padding, justify, align
  • Multi-page documents with tab navigation

Design System

  • Design variables โ€” color, number, string tokens with $variable references
  • Multi-theme support โ€” multiple axes, each with variants (Light/Dark, Compact/Comfortable)
  • Component system โ€” reusable components with instances and overrides
  • CSS sync โ€” auto-generated custom properties, var(--name) in code output

Figma Import

  • Import .fig files with layout, fills, strokes, effects, text, images, and vectors preserved

Desktop App

  • Native macOS, Windows, and Linux via Electron
  • .op file association โ€” double-click to open, single-instance lock
  • Auto-update from GitHub Releases
  • Native application menu and file dialogs

Tech Stack

Frontend React 19 ยท TanStack Start ยท Tailwind CSS v4 ยท shadcn/ui ยท i18next
Canvas CanvasKit/Skia (WASM, GPU-accelerated)
State Zustand v5
Server Nitro
Desktop Electron 35
CLI op โ€” terminal control, batch design DSL, code export
AI Vercel AI SDK v6 ยท Anthropic SDK ยท Claude Agent SDK ยท OpenCode SDK ยท Copilot SDK
Runtime Bun ยท Vite 7
File format .op โ€” JSON-based, human-readable, Git-friendly

Project Structure

openpencil/
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ web/                 TanStack Start web app
โ”‚   โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ canvas/      CanvasKit/Skia engine โ€” drawing, sync, layout
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ components/  React UI โ€” editor, panels, shared dialogs, icons
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ services/ai/ AI chat, orchestrator, design generation, streaming
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ services/codegen/ Code generation service wrappers
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ stores/      Zustand โ€” canvas, document, pages, history, AI
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ mcp/         MCP server tools for external CLI integration
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ hooks/       Keyboard shortcuts, file drop, Figma paste, MCP sync
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ i18n/        Internationalization โ€” 15 locales
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ uikit/       Reusable component kit system
โ”‚   โ”‚   โ””โ”€โ”€ server/
โ”‚   โ”‚       โ”œโ”€โ”€ api/ai/      Nitro API โ€” streaming chat, agent, generation, image search
โ”‚   โ”‚       โ”œโ”€โ”€ api/mcp/     MCP HTTP transport endpoints
โ”‚   โ”‚       โ””โ”€โ”€ utils/       Claude, OpenCode, Codex, Copilot, Gemini CLI wrappers
โ”‚   โ”œโ”€โ”€ desktop/             Electron desktop app
โ”‚   โ”‚   โ”œโ”€โ”€ main.ts          Window, Nitro fork, native menu, auto-updater
โ”‚   โ”‚   โ”œโ”€โ”€ ipc-handlers.ts  Native file dialogs, theme sync, prefs IPC
โ”‚   โ”‚   โ””โ”€โ”€ preload.ts       IPC bridge
โ”‚   โ””โ”€โ”€ cli/                 CLI tool โ€” `op` command
โ”‚       โ”œโ”€โ”€ src/commands/    Design, document, export, import, node, page, variable commands
โ”‚       โ”œโ”€โ”€ connection.ts    WebSocket connection to running app
โ”‚       โ””โ”€โ”€ launcher.ts      Auto-detect and launch desktop app or web server
โ”œโ”€โ”€ packages/
โ”‚   โ”œโ”€โ”€ pen-types/           Type definitions for PenDocument model
โ”‚   โ”œโ”€โ”€ pen-core/            Document tree ops, layout engine, variables
โ”‚   โ”œโ”€โ”€ pen-codegen/         Code generators (React, HTML, Vue, Flutter, ...)
โ”‚   โ”œโ”€โ”€ pen-figma/           Figma .fig file parser and converter
โ”‚   โ”œโ”€โ”€ pen-renderer/        Standalone CanvasKit/Skia renderer
โ”‚   โ”œโ”€โ”€ pen-sdk/             Umbrella SDK (re-exports all packages)
โ”‚   โ”œโ”€โ”€ pen-ai-skills/       AI prompt skill engine (phase-driven prompt loading)
โ”‚   โ””โ”€โ”€ agent/               AI agent SDK (Vercel AI SDK, multi-provider, agent teams)
โ””โ”€โ”€ .githooks/               Pre-commit version sync from branch name

Keyboard Shortcuts

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

Scripts

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 bump <version>     # Sync version across all package.json
bun run electron:dev       # Electron dev
bun run electron:build     # Electron package
bun run cli:dev            # Run CLI from source
bun run cli:compile        # Compile CLI to dist

Contributing

Contributions are welcome! See CLAUDE.md for architecture details and code style.

  1. Fork and clone
  2. Set up version sync: git config core.hooksPath .githooks
  3. Create a branch: git checkout -b feat/my-feature
  4. Run checks: npx tsc --noEmit && bun --bun run test
  5. Commit with Conventional Commits: feat(canvas): add rotation snapping
  6. Open a PR against main

Roadmap

  • Design variables & tokens with CSS sync
  • Component system (instances & overrides)
  • AI design generation with orchestrator
  • MCP server integration with layered design workflow
  • Multi-page support
  • Figma .fig import
  • Boolean operations (union, subtract, intersect)
  • Multi-model capability profiles
  • Monorepo restructure with reusable packages
  • CLI tool (op) for terminal control
  • Built-in AI agent SDK with multi-provider support
  • i18n โ€” 15 languages
  • Collaborative editing
  • Plugin system

Contributors

Contributors

Community

Discord Join our Discord โ€” Ask questions, share designs, suggest features.

Star History

Star History Chart

License

MIT โ€” Copyright (c) 2026 ZSeven-W

About

The world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages