Find a file
Kayshen-X e4dd3d7b37 feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate
Phase C Task 4 closes Step 1a (G1 shared Skia context) on v0.8.0:

- crates/openpencil-shell-native/examples/basic_window.rs:
  winit + SharedSkiaContext::new_desktop + NativeBackend (Jian DrawOp)
  + JianPointerMapper integration. Paints chrome rect + "Hello 你好"
  + box outline; close → idempotent teardown. Demonstrates Phase B
  Task 3 winit → Jian PointerTranslator → JianPointerMapper →
  ShellEvent pipeline end-to-end.
- crates/openpencil-shell-native/notes/step-1a-{macos,linux,windows}-manual-smoke.md:
  manual GPU smoke runbooks for spec §1.2 acceptance #1 (macOS PASS
  recorded; Linux/Windows pending real-hardware run, deferred per
  CONCERN-R5-1 + WINDOWS_GPU_DEFERRED_NO_RUNNER).
- tools/check-jian-boundaries.sh: spec §11 + §12.3 invariants.
  Verifies that openpencil-app has no direct jian-* dep, mobile
  (aarch64-linux-android, aarch64-apple-ios) and wasm32 closures
  exclude jian-host-desktop / jian-skia, and openpencil-shell-web
  declares no jian-host-desktop dep at the manifest level.
- .github/workflows/rust-check.yml: wires bash tools/check-jian-boundaries.sh
  on Linux runner with mobile + wasm32 targets installed.
- README.md: roadmap entry for the Step 1a milestone.

Verified locally on macOS aarch64:
- cargo fmt --all -- --check
- cargo clippy --workspace --all-targets -- -D warnings
- cargo build --examples --workspace
- cargo test --workspace (38 PASS, 0 FAIL, 0 IGNORED)
- cargo check -p openpencil-shell-native --target {aarch64-linux-android, aarch64-apple-ios}
- bash tools/check-jian-boundaries.sh (4 invariants PASS)
- spec §11 invariants 1–4 grep checks PASS

Spec v19.3 FROZEN (openpencil-docs 651090d); Plan v7 FROZEN.
vendor/jian pinned at c4a794dc.
2026-05-05 12:23:43 +08:00
.cargo chore(workspace): bootstrap Cargo workspace + toolchain pin 2026-05-03 21:55:00 +08:00
.githooks Merge feat/rust-ification into v0.8.0 (Step 0 Rust workspace bootstrap) 2026-05-04 21:00:00 +08:00
.github feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate 2026-05-05 12:23:43 +08:00
.vscode V0.7.0 (#95) 2026-04-11 23:25:13 +08:00
apps ci: remove TS/Electron workflows (build-electron / ci / docker / publish-cli) 2026-05-05 12:23:33 +08:00
crates feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate 2026-05-05 12:23:43 +08:00
packages ci: remove TS/Electron workflows (build-electron / ci / docker / publish-cli) 2026-05-05 12:23:33 +08:00
screenshot docs(readme): update cover screenshot 2026-04-13 21:15:00 +08:00
scripts Merge feat/rust-ification into v0.8.0 (Step 0 Rust workspace bootstrap) 2026-05-04 21:00:00 +08:00
tools feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate 2026-05-05 12:23:43 +08:00
vendor ci+vendor: pin Jian submodule to c4a794dc (main HEAD) + drop v0.8.0 from rust-multiplatform branches 2026-05-05 12:23:36 +08:00
.cta.json V0.7.0 (#95) 2026-04-11 23:25:13 +08:00
.dockerignore V0.5.0 (#71) 2026-03-22 10:09:26 +08:00
.editorconfig V0.7.0 (#95) 2026-04-11 23:25:13 +08:00
.gitattributes fix(shell-native): enable winit Linux backends + LF line endings for cross-OS CI 2026-05-05 12:23:05 +08:00
.gitignore chore(workspace): bootstrap Cargo workspace + toolchain pin 2026-05-03 21:55:00 +08:00
.gitmodules fix(workspace): point vendor/jian submodule to ZSeven-W/jian (no fork) 2026-05-05 12:23:11 +08:00
.oxfmtrc.json V0.7.0 (#95) 2026-04-11 23:25:13 +08:00
.prettierignore style: apply formatter + bump vendor/agent submodule + ignore vendors in oxfmt 2026-05-05 12:23:34 +08:00
AGENTS.md docs: drop op export from CLI docs and clarify pen-mcp usage 2026-04-26 19:20:14 +08:00
bun.lock ci: remove TS/Electron workflows (build-electron / ci / docker / publish-cli) 2026-05-05 12:23:33 +08:00
Cargo.lock feat(shell-native): SharedSkiaContext + NativeBackend over Jian DrawOp 2026-05-05 12:23:12 +08:00
Cargo.toml style: apply formatter + bump vendor/agent submodule + ignore vendors in oxfmt 2026-05-05 12:23:34 +08:00
CLAUDE.md Merge origin/v0.8.0 into feat/rust-ification 2026-05-03 21:00:00 +08:00
deny.toml style: apply formatter + bump vendor/agent submodule + ignore vendors in oxfmt 2026-05-05 12:23:34 +08:00
Dockerfile V0.7.0 (#95) 2026-04-11 23:25:13 +08:00
LICENSE chore: update documentation and add MIT License 2026-02-18 22:35:15 +08:00
oxlintrc.json V0.7.0 (#95) 2026-04-11 23:25:13 +08:00
package.json chore(workspace): bun scripts wrap cargo commands 2026-05-03 23:30:00 +08:00
README.de.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.es.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.fr.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.hi.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.id.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.ja.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.ko.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.md feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate 2026-05-05 12:23:43 +08:00
README.pt.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.ru.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.th.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.tr.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.vi.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.zh-TW.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
README.zh.md docs: wrap MseeP badge in Assessments section above License 2026-04-29 22:05:00 +08:00
rust-toolchain.toml chore(workspace): bump rust-toolchain 1.82 → 1.85 (cargo-deny edition2024 fix) 2026-05-03 23:40:00 +08:00
rustfmt.toml chore(workspace): drop nightly-only rustfmt features (warnings under stable) 2026-05-03 23:45:00 +08:00
tsconfig.base.json V0.5.0 (#67) 2026-03-22 09:44:04 +08:00
tsconfig.json V0.7.0 (#95) 2026-04-11 23:25:13 +08:00

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 with per-member canvas indicators.

🧠 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.

🎨 Style Guides

Built-in style guide library with tag-based fuzzy matching. Apply visual styles (glassmorphism, brutalist, retro, etc.) to AI-generated designs. MCP tools for external agent access.

📦 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 — batch design DSL, node manipulation. 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.

🧩 Embeddable SDK

pen-engine (headless) + pen-react (React UI SDK) — embed the design engine in your own app. DesignProvider, DesignCanvas, hooks, panels, and toolbar components out of the box.

🛡️ Design System Kit

Manage reusable UIKits with style switching and component composition. Import/export kits from .pen files. Built-in registry with MCP tools for external access.

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

Cloning含 Rust 子系统)

git clone --recurse-submodules https://github.com/ZSeven-W/openpencil.git
# Or already cloned:
git submodule update --init --recursive

vendor/agent is the agent-rs submodule (cross-product, OP + Zode share); HTTPS URL needs no SSH key.

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. Optional: Zig >= 0.14 for building agent-native from source (a prebuilt binary will be downloaded automatically if Zig is not installed).

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 SSE streaming animation
  • Orchestrator — decomposes complex pages into spatial sub-tasks for parallel generation
  • Agent Teams — concurrent team members with delegate tool, per-member canvas indicators, and fallback strategies
  • Design modification — select elements, then describe changes in natural language
  • Vision input — attach screenshots or mockups for reference-based design
  • Style Guides — apply visual styles (glassmorphism, brutalist, retro, etc.) via tag-based fuzzy matching
  • Anti-slop — cross-generation diversity tracking to avoid repetitive AI output

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 (pen-mcp package) — 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 workflowdesign_skeletondesign_contentdesign_refine for higher-fidelity multi-section designs
  • Segmented prompt retrieval — load only the design knowledge you need (schema, layout, roles, icons, planning, etc.)
  • Style guide toolsget_style_guide_tags and get_style_guide for applying visual styles via MCP
  • 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 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
  • Reusable UIKits — import/export component kits from .pen files

AI & Agents

  • Prompt-to-canvas with streaming generation and orchestrator-driven spatial decomposition
  • Concurrent Agent Teams — multiple designers work on different sections in parallel with per-member canvas indicators
  • Layered workflow — design_skeletondesign_contentdesign_refine with focused prompts per phase
  • Style Guides — 50+ built-in styles (glassmorphism, brutalist, retro, etc.) with tag-based fuzzy matching, wired into planning and generation
  • Multi-model capability profiles — auto-adapts thinking mode, effort, and prompt shape per model tier
  • Built-in agent runtime (agent-native, Zig NAPI) + Anthropic, Claude Agent SDK, OpenCode, Codex, Copilot, Gemini providers
  • Anthropic-format passthrough for Chinese LLM providers — Kimi, Zhipu, GLM, DouBao, Ark, Bailian/DashScope, ModelScope, Coding Plans

Git Integration

  • Clone wizard with SSH / HTTPS auth and SSH key management
  • Branch picker — create, switch, delete, merge, all from the git panel
  • Pull / push cascades with auth retry and non-fast-forward handling
  • Folder-mode three-way merge with on-disk MERGE_HEAD state tracking
  • Conflict panel with per-node / per-field three-way cards, inline JSON editor, bulk actions, and inline diff block
  • Remote settings and SSH keys UI; 15-locale i18n across the whole Git surface

Export

  • Canvas export — PNG, JPEG, WEBP, PDF (Cmd+Shift+P)
  • Code export — React + Tailwind, HTML + CSS, Vue, Svelte, Flutter, SwiftUI, Jetpack Compose, React Native
  • Incremental MCP codegen pipeline — codegen_plan, codegen_submit_chunk, codegen_assemble, codegen_clean

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 with Save As, Open Recent, and an unsaved-changes dialog on close
  • Recent files persistence

Tech Stack

Frontend React 19 · TanStack Start · Tailwind CSS v4 · shadcn/ui · i18next
Canvas CanvasKit/Skia (WASM, GPU-accelerated)
Engine pen-engine (headless) · pen-react (React UI SDK)
State Zustand v5
Server Nitro
Desktop Electron 35
CLI op — terminal control, batch design DSL
AI agent-native (Zig NAPI) · Anthropic SDK · Claude Agent SDK · OpenCode SDK · Copilot SDK
Runtime Bun · Vite 7
Lint oxlint · oxfmt
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
│   │   │   ├── 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-engine/          Headless design engine — document, selection, history, viewport
│   ├── pen-react/           React UI SDK — provider, canvas, hooks, panels, toolbar
│   ├── pen-codegen/         Code generators (React, HTML, Vue, Flutter, ...)
│   ├── pen-figma/           Figma .fig file parser and converter
│   ├── pen-renderer/        Standalone CanvasKit/Skia renderer
│   ├── pen-mcp/             MCP server — tools, routes, document manager
│   ├── pen-sdk/             Umbrella SDK (re-exports all packages)
│   ├── pen-ai-skills/       AI prompt skill engine (phase-driven prompt loading)
│   └── agent-native/        Native AI agent runtime (Zig NAPI, multi-provider, 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+P Export (PNG/JPG/WEBP/PDF)
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 Cmd+Shift+S Save As

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 lint               # Lint (oxlint)
bun run format             # Format (oxfmt)
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
bun run mcp:dev            # Run MCP server from source

Rust subsystem (Step 0+)

OpenPencil 正在进行全量 Rust 化。当前状态见 openpencil-docs/superpowers/specs/2026-05-02-rust-ification-kickoff.mdv7 FROZEN

# Install Rust toolchain (rust-toolchain.toml auto-pins 1.85)
rustup toolchain install 1.85
rustup target add wasm32-unknown-unknown

# build / test / lint
bun run cargo:check
bun run cargo:test
bun run cargo:clippy
bun run cargo:wasm-check  # kickoff §1.2 wasm32 invariant
bun run cargo:deny        # cargo-deny (native + wasm32 bans; CI uses cargo-deny-action@v2)

Crate list (crates/):

Crate Category wasm32
openpencil-app Stage F entry placeholder
openpencil-shell-{core,web,native} UI shellspec §1.2 三 crate core/web / native (compile_error guard)
pen-types / pen-core / pen-engine / pen-codegen / pen-figma bucket A logic

Submodule: vendor/agentgithub.com/ZSeven-W/agent-rs (cross-product Rust agent runtime).

Phase boundary: Step 0 = workspace skeleton only (no feature porting). Real implementation begins at Step 1 (kill-spike) and beyond.

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
  • Headless design engine (pen-engine) + React UI SDK (pen-react)
  • Style Guides with tag-based matching and MCP tools
  • Concurrent Agent Teams with delegate tool and canvas indicators
  • Native agent runtime (agent-native — Zig NAPI)
  • Git integration — clone, branch, push/pull, folder-mode three-way merge
  • Canvas raster export (PNG / JPEG / WEBP / PDF)
  • Rust shell — Step 1a (G1 shared Skia context) on v0.8.0: SharedSkiaContext + NativeBackend (Jian-DrawOp-backed) + JianPointerMapper (Jian PointerEventShellEvent) + basic_window demo, with the multi-platform CI matrix green (macOS / Linux / Windows desktop, iOS / Android cargo check, wasm32). Spec v19.3 FROZEN; vendor/jian pinned at c4a794dc.
  • Collaborative editing
  • Plugin system

Contributors

Contributors

Sponsors

OpenPencil is free and open-source. Development is funded by people who find it useful — thank you for keeping the canvas open.

MrQyun

Thanks to MrQyun — want your name here too? Become a sponsor →

Community

Discord Join our Discord — Ask questions, share designs, suggest features.

Star History

Star History Chart

Assessments

MseeP.ai Security Assessment Badge

License

MIT — Copyright (c) 2026 ZSeven-W