Skip to content

ShadowArcanist/willow

 
 

Repository files navigation

Willow

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.

Try it online → · Download

Installation

macOS (Homebrew):

brew install willow/tap/willow

Or download from the releases page, or use the web app — no install needed.

What it does

  • Opens .fig and .pen files — 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

Self-hosted server

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:start

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

Collaboration

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.

  1. Sign in to the self-hosted server
  2. Open or create a server-backed project
  3. Click Invite others in the Collaborate panel
  4. Share the generated link (app.willow.dev/share/<room-id>)
  5. Collaborators see your cursor, selection, and edits in real time

Room owners can set each participant to edit or view-only access.

Why

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.

Roadmap

  • 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)

Contributing

Setup

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.

Quality gates

Command Description
bun run check Lint + typecheck
bun run format Code formatting

Project structure

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)

Tech stack

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

Desktop builds

Requires Rust and platform-specific prerequisites (Tauri v2 guide).

bun run tauri build

License

MIT

About

Open-source Figma alternative.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

  • TypeScript 81.3%
  • Vue 17.2%
  • Rust 0.9%
  • JavaScript 0.4%
  • HTML 0.1%
  • CSS 0.1%