# Contributing ## Setup ```bash git clone https://github.com/open-pencil/open-pencil.git cd open-pencil git clone https://github.com/open-pencil/vue-stream-markdown.git bun install ``` ## Development ```bash bun run dev # Vite dev server on localhost:1420 bun run tauri dev # Tauri desktop app with hot reload # For macOS release builds with ad-hoc signing (no Apple Developer account, local testing only): APPLE_SIGNING_IDENTITY=- bun run tauri build ``` ## Quality checks Run all of these before submitting a PR: ```bash bun run check # oxlint + typecheck bun run format # oxfmt with import sorting bun run test:dupes # jscpd < 3% duplication bun run test:unit # bun:test (tests/engine/) bun run test # Playwright E2E (auto-starts dev server) ``` ## Project structure - `packages/core` — scene graph, renderer, layout, codec (zero DOM deps) - `packages/cli` — headless CLI for .fig inspection and export - `packages/mcp` — MCP server for AI tools (stdio + HTTP) - `packages/docs` — VitePress documentation site (openpencil.dev) - `src/` — Tauri/Vite desktop editor ## Conventions See [`AGENTS.md`](./AGENTS.md) for the full architecture reference, code conventions, and quality checklist. Key points: - Bun runtime, not Node - Tailwind 4 for styles, no inline CSS or `