Find a file
Danila Poyarkov cb8bbcf289 Extract magic numbers to constants
Move ruler config (colors, sizes, tick ratios, badge dimensions),
font sizes, pen handle radius, and outline alpha from renderer
inline values to src/constants.ts.
2026-02-28 09:52:56 +03:00
.vscode Initial commit: Tauri + CanvasKit + React editor scaffold 2026-02-27 15:48:29 +03:00
desktop Rename src-tauri → desktop, symlink for CLI compat 2026-02-28 08:10:09 +03:00
public Encode fig-kiwi binary on copy for Figma paste compatibility 2026-02-27 23:31:01 +03:00
src Extract magic numbers to constants 2026-02-28 09:52:56 +03:00
tests Canvas rulers with selection highlight 2026-02-28 09:35:50 +03:00
.gitignore Playwright visual regression testing with Figma CDP reference 2026-02-28 07:32:15 +03:00
.oxfmtrc.json Add oxlint, oxfmt, typescript-go 2026-02-27 15:52:55 +03:00
bun.lock Add IconsResolver for auto-import, explicit imports only for dynamic maps 2026-02-28 08:29:39 +03:00
components.d.ts Appearance section: opacity + corner radius + visibility toggle 2026-02-28 09:20:31 +03:00
index.html Migrate React → Vue 3 + VueUse + Reka UI 2026-02-27 21:25:31 +03:00
oxlint.json Rename src-tauri → desktop, symlink for CLI compat 2026-02-28 08:10:09 +03:00
package.json Add IconsResolver for auto-import, explicit imports only for dynamic maps 2026-02-28 08:29:39 +03:00
PLAN.md Add full keyboard shortcut reference to PLAN.md, fix zoom speed 2026-02-27 23:10:27 +03:00
playwright.config.ts Skip stability check: toMatchSnapshot, 2.1s → 1.3s 2026-02-28 07:44:20 +03:00
README.md Simplify README, add desktop build instructions 2026-02-28 08:14:28 +03:00
tsconfig.json Migrate React → Vue 3 + VueUse + Reka UI 2026-02-27 21:25:31 +03:00
tsconfig.node.json Initial commit: Tauri + CanvasKit + React editor scaffold 2026-02-27 15:48:29 +03:00
vite.config.ts Add IconsResolver for auto-import, explicit imports only for dynamic maps 2026-02-28 08:29:39 +03:00

OpenPencil

Open-source, AI-native design editor. Figma alternative built from scratch with full .fig file compatibility.

Status: Active development. Not ready for production use.

Features

  • Figma .fig file import — open native Figma files directly
  • Figma clipboard — copy/paste between OpenPencil and Figma
  • Vector networks — complex boolean shapes and open paths, like Figma
  • Auto-layout — constraint-based layout matching Figma behavior
  • Pen tool — bezier curves with tangent handles
  • Inline text editing — multi-line text with Inter font
  • Undo/redo — all operations are undoable
  • Snap guides — edge and center snapping
  • Color picker — HSV, hue/alpha sliders, hex input

Tech Stack

Layer Tech
UI Vue 3, VueUse, Reka UI
Styling Tailwind CSS 4
Rendering Skia (CanvasKit WASM)
Layout Yoga WASM
File format Kiwi binary (vendored) + Zstd + ZIP
Color culori
Desktop Tauri v2
Testing Playwright (visual regression), bun:test (unit)
Tooling Vite 7, oxlint, oxfmt, typescript-go

Getting Started

bun install
bun run dev

Scripts

Command Description
bun run dev Dev server at http://localhost:1420
bun run build Production build
bun run check Lint + typecheck
bun run test E2E visual regression
bun run test:update Regenerate screenshot baselines
bun run test:unit Unit tests
bun run tauri dev Desktop app (requires Rust)

Desktop Builds

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

bun run tauri build                    # Current platform
bun run tauri build --target universal-apple-darwin  # macOS universal

Cross-compilation to other platforms requires their respective toolchains or CI (e.g. GitHub Actions).

Project Structure

src/
  components/     Vue SFCs (canvas, panels, toolbar, color picker)
  composables/    Canvas input, keyboard shortcuts, rendering
  stores/         Editor state (Vue reactivity)
  engine/         Scene graph, renderer, layout, clipboard, undo, vector, snap
  kiwi/           Figma file format (Kiwi codec, .fig import)
    kiwi-schema/  Vendored from evanw/kiwi
  types.ts        Shared types
  constants.ts    UI colors, defaults, thresholds
desktop/          Tauri v2 (Rust + config)
tests/
  e2e/            Playwright visual regression
  engine/         Unit tests

License

MIT