Open-source design editor. Opens .fig and .pen design files, supports real-time collaboration, and ships as a programmable toolkit with a headless Vue SDK for building custom editors.
Status: Active development. Not ready for production use.
Fork note: Willow is an independent fork of OpenPencil, not an official rename by the original maintainers. Thank you to the original creator and every contributor who helped build the project to this point.
macOS (Homebrew):
brew install willow/tap/willowOr download from the releases page, or use the web app — no install needed.
- Opens
.figand.penfiles — read and write native Figma files, open Pencil documents, copy & paste nodes between apps - Fully programmable — Figma-compatible scene graph, design-to-code export, and a headless Vue SDK for custom editor shells
- Lint, convert, and extract tokens — inspect documents, lint naming/layout/accessibility, convert between supported formats, analyze colors/typography/spacing/clusters, and extract design tokens
- Design-to-code export — export selections as JSX/Tailwind, generate token outputs, and map designs into component-oriented code workflows
- Vue SDK for custom editors — headless components and composables for embedding Willow into other apps or building workflow-specific editing surfaces
- Real-time collaboration — server-backed rooms with accounts, roles, cursors, presence, and follow mode
- Self-hosted project server — Bun server with SQLite and local disk storage for durable small-team projects
- Auto layout & CSS Grid — flex and grid layout via Yoga WASM, with gap, padding, alignment, track sizing
- ~7 MB desktop app — Tauri v2 for macOS, Windows, Linux. Also runs in the browser as a PWA
The optional server is designed for small trusted teams and intranet deployments. It uses Bun, SQLite, and local disk storage only:
WILLOW_DATA_DIR=./data \
WILLOW_ADMIN_USERNAME=admin \
WILLOW_ADMIN_PASSWORD=change-me \
bun run server:startData lives under the configured data directory. The default Docker layout is /data/sqlite.db and /data/assets.
For a built frontend, set WILLOW_PUBLIC_DIR=dist so the same process serves the app and API.
Share a link to co-edit in real time. Collaboration runs through the self-hosted server so projects, rooms, members, and permissions share one source of truth.
- Sign in to the self-hosted server
- Open or create a server-backed project
- Click Invite others in the Collaborate panel
- Share the generated link (
app.willow.dev/share/<room-id>) - Collaborators see your cursor, selection, and edits in real time
Room owners can set each participant to edit or view-only access.
Figma is a closed platform that actively fights programmatic access. figma-use added full read/write automation via CDP — then Figma 126 killed CDP. Your design files are in a proprietary binary format that only their software can fully read. Your workflows break when they decide to ship a point release.
Willow is the alternative: open source (MIT), reads .fig files natively, every operation is scriptable, and your data never leaves your machine.
- 100% Figma compatibility — full import/export fidelity, rendering parity, and broader automated compatibility coverage
- Prototyping — frame transitions, interaction triggers, overlay management, preview mode
- Shader effects (SkSL) — custom visual effects via GPU shaders
- Raster tile caching — instant zoom/pan for complex documents
- Component libraries — publish, share, and consume design systems across files
- CI tools — design linting, code export, visual regression in pipelines
- Grid child positioning UI — column/row span controls, grid overlay on canvas
- Windows code signing (Azure Authenticode certificates)
bun install
bun run dev # Dev server at localhost:1420
bun run tauri dev # Desktop app (requires Rust)Local dev starts Willow on localhost:1420. Vite serves the app for hot reload and proxies /api to the Bun server, so the browser still uses one origin. Production and Docker are served by the Bun server directly on a single port. The default local dev login is admin / admin unless WILLOW_ADMIN_USERNAME or WILLOW_ADMIN_PASSWORD is set.
| Command | Description |
|---|---|
bun run check |
Lint + typecheck |
bun run format |
Code formatting |
packages/
core/ @willow/core — engine (scene graph, renderer, layout, file formats, tools)
vue/ @willow/vue — headless Vue SDK
src/ Vue app (components, composables, stores)
desktop/ Tauri v2 (Rust + config)
| Layer | Tech |
|---|---|
| Rendering | Skia (CanvasKit WASM) |
| Layout | Yoga WASM (flex + grid via fork) |
| UI | Vue 3, Reka UI, Tailwind CSS 4 |
| File format | Kiwi binary + Zstd + ZIP |
| Collaboration | Bun WebSockets + Yjs (CRDT) + SQLite room/member records |
| Desktop | Tauri v2 |
Requires Rust and platform-specific prerequisites (Tauri v2 guide).
bun run tauri buildMIT