Find a file
Kayshen Xu 917a16751f V0.2.0 (#21)
* feat(ai): add agent identity system with visual indicators for concurrent generation

- Agent identity: assign unique colors and names to each sub-agent
- Canvas indicators: breathing glow border + name pill above streaming nodes
- Preview effect: outline appears 500ms before element materializes
- Screen grouping: subtasks with same `screen` field share one root frame,
  fixing multi-page apps being split into too many frames
- Screen-level parallelism: subtasks within same screen run sequentially
  (preserving section order), different screens run in parallel

* fix(canvas): make agent indicator visual effect much more dramatic

- Outer glow: 8px soft border for visible halo effect
- Inner border: 2.5px sharp crisp border at high alpha
- Preview fill: 10-15% alpha (was ~1% before, essentially invisible)
- Breathing: faster cycle (400ms), higher range [0.35, 0.95]
- Name pill: larger font (11px), bold 700, drop shadow
- Pill dedup: only draw one name pill per agent (not per node)
- Rounded rect helper for polished pill rendering

* fix(canvas): use globalThis for agent indicator state to prevent module isolation

Vite module splitting can create separate module instances for the same
file when imported from different chunks. This causes the indicator Map
written by the orchestrator (services/ai/) to be a different instance
than the one read by the canvas hook (canvas/). Using globalThis
guarantees a single shared instance across all chunks.

* feat(i18n): enhance internationalization support by integrating i18next for translation in various components. Added new dependencies: i18next, i18next-browser-languagedetector, and react-i18next. Updated UI elements in the editor, toolbar, and status bar to utilize translation keys for improved localization. Enhanced README with language options for better accessibility.

* feat(auto-update): implement auto-update functionality with settings management

- Added auto-update feature to check for updates at app startup and periodically while running.
- Introduced settings for enabling/disabling auto-update, stored in a JSON file.
- Integrated IPC handlers to manage auto-update settings from the renderer process.
- Created new API endpoints for managing MCP server status, including start/stop functionality.
- Enhanced the UI to support theme presets, allowing users to save and load variable presets.
- Updated internationalization support for new UI elements related to auto-update and presets.

* feat(ai): add element boundaries to orchestrator subtask planning

Orchestrator now outputs an "elements" field per subtask listing the
specific UI elements it owns. Sub-agent prompts display these boundaries
so each agent knows exactly what to generate and what belongs to other
sections, preventing content duplication across subtasks.

Also includes: sequential cascade reveal animation, agent indicator
recursive tagging, delayed indicator removal, single-agent identity
for sequential mode, model name truncation fix.

---------

Co-authored-by: Fini <fini.yang@gmail.com>
2026-03-05 21:14:50 +08:00
.github/workflows V0.1.1 (#17) 2026-03-02 22:26:09 +08:00
.vscode Initialize OpenPencil project with essential files and configurations 2026-02-17 21:14:16 +08:00
build V0.0.3 (#11) 2026-02-26 21:33:48 +08:00
electron V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
public V0.0.3 (#11) 2026-02-26 21:33:48 +08:00
screenshot V0.0.3 (#11) 2026-02-26 21:33:48 +08:00
scripts feat(electron): integrate Electron framework for desktop application support 2026-02-20 20:19:06 +08:00
server V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
src V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
.cta.json Initialize OpenPencil project with essential files and configurations 2026-02-17 21:14:16 +08:00
.gitignore V0.1.0 (#13) 2026-03-01 09:33:52 +08:00
bun.lock V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
CLAUDE.md V0.1.2 (#19) 2026-03-03 21:08:52 +08:00
components.json feat(editor): scaffold core canvas engine and editor layout 2026-02-18 21:49:16 +08:00
electron-builder.yml V0.1.1 (#17) 2026-03-02 22:26:09 +08:00
LICENSE chore: update documentation and add MIT License 2026-02-18 22:35:15 +08:00
package.json V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.de.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.es.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.fr.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.hi.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.id.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.ja.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.ko.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.pt.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.ru.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.th.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.tr.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.vi.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.zh-TW.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
README.zh.md V0.2.0 (#21) 2026-03-05 21:14:50 +08:00
tsconfig.json Initialize OpenPencil project with essential files and configurations 2026-02-17 21:14:16 +08:00
vite.config.ts V0.0.3 (#11) 2026-02-26 21:33:48 +08:00

OpenPencil

OpenPencil

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

Stars License CI Discord

Quick Start · AI · Features · Discord · Contributing


OpenPencil — click to watch demo

Click the image to watch the demo video


Quick Start

# 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

AI-Native Design

OpenPencil is built around AI from the ground up — not as a plugin, but as a core workflow.

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
Claude Code No config — uses Claude Agent SDK with local OAuth
Codex CLI Connect in Agent Settings (Cmd+,)
OpenCode Connect in Agent Settings (Cmd+,)

MCP Server

  • Built-in MCP server — one-click install into Claude Code / Codex / Gemini / OpenCode / Kiro CLIs
  • Design automation from terminal: read, create, and modify .op files via any MCP-compatible agent

Code Generation

  • React + Tailwind CSS
  • HTML + CSS
  • CSS Variables from design tokens

Features

Canvas & Drawing

  • Infinite canvas with pan, zoom, smart alignment guides, and snapping
  • Rectangle, Ellipse, Line, Polygon, Pen (Bezier), Frame, Text
  • 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
  • Auto-update from GitHub Releases
  • Native application menu and file dialogs

Tech Stack

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
Runtime Bun · Vite 7
File format .op — JSON-based, human-readable, Git-friendly

Project Structure

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 client wrappers
electron/
  main.ts          Window, Nitro fork, native menu, auto-updater
  preload.ts       IPC bridge

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

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 electron:dev       # Electron dev
bun run electron:build     # Electron package

Contributing

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

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

Roadmap

  • Design variables & tokens with CSS sync
  • Component system (instances & overrides)
  • AI design generation with orchestrator
  • MCP server integration
  • Multi-page support
  • Figma .fig import
  • Boolean operations (union, subtract, intersect)
  • Collaborative editing
  • Plugin system

Contributors

Contributors

Community

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

License

MIT — Copyright (c) 2026 ZSeven-W