* fix: explain unsupported browsers instead of a blank window The desktop app on macOS 13 with WebKit older than Safari 17.4 opened an empty window because startup called Promise.withResolvers, which Vite lowers nothing for: build.target only rewrites syntax and never polyfills APIs, and the target itself was an implicit Vite default (#744). Make the supported baseline explicit in src/app/shell/support/baseline.ts and feed it to build.target, a lint rule that rejects newer static built-ins in browser-shipped sources, and the documented system requirements. Replace Promise.withResolvers with a createDeferred() helper. Turn src/main.ts into a small gate that checks sentinel features before dynamically importing the app, so an old engine still evaluates enough code to render platform-specific update guidance: macOS/Safari via Software Update, WebKitGTK and WebView2 on Linux and Windows, and each browser's own update path on the web, with a prefilled bug report link. Render-blocking errors during the first route are captured through app.config.errorHandler and shown the same way instead of leaving the window blank. Desktop facts come from tauri-plugin-os and a webview_version command; the bundle now declares macOS 13 as its minimum system version. * build: enforce the browser baseline from compatibility data Replace the hand-maintained list of built-ins newer than the baseline with two data-driven checks. The app and browser-shipped packages pin their TypeScript lib to ES2023, the last edition Chrome 111, Firefox 128 and Safari 16.4 implement in full, so a newer built-in such as Promise.withResolvers fails type-checking. Web APIs, which lib.dom does not version, go through eslint-plugin-compat under oxlint with the same browsers in settings.browsers, scoped to sources that ship to a browser. A unit test keeps the oxlint browser list and the tsconfig libs derived from src/app/shell/support/baseline.ts, so the three cannot drift apart. * fix: recognise production error codes in the boot observer Vue passes the error reference URL as the errorHandler info argument in production builds instead of the development string, so the observer never classified a setup or render failure as fatal in the shipped app and the boot-failure notice only appeared on the dev server. Match Vue's exported ErrorCodes in both forms, and cover the component-setup path in the E2E spec; the scenario was also verified against a production build.
4.3 KiB
Getting Started
Try Online
OpenPencil runs in the browser — no installation required. Open app.openpencil.dev to start designing.
If you want to build on top of it instead of only using the default app, see the Programmable section and the Vue SDK.
Download Desktop App
Pre-built binaries for macOS, Windows, and Linux are available on the releases page.
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | .dmg (aarch64) |
| macOS (Intel) | .dmg (x64) |
| Windows (x64) | .msi / .exe |
| Windows (ARM) | .msi / .exe |
| Linux (x64) | .AppImage / .deb |
System Requirements
OpenPencil renders with CanvasKit on WebGL and relies on current web platform features, so it needs a recent browser engine. The web app supports Chrome 111, Edge 111, Firefox 128, and Safari 16.4 or later; Chromium-based browsers such as Brave and Opera follow their Chrome version. The desktop app renders in the system WebView, so its floor is the operating system's engine:
| Platform | Requirement |
|---|---|
| macOS | macOS 13 Ventura or later with the current Safari updates installed (Safari 16.4 shipped with macOS 13.3). |
| Windows | Windows 10 or later with the Microsoft Edge WebView2 Evergreen runtime, which updates itself. |
| Linux | WebKitGTK 2.40 or later (webkit2gtk-4.1). |
When the engine is too old, OpenPencil shows what to update instead of a blank window. If you see that notice on a system that meets the requirements, use its "Report a problem" link, which prefills the browser and engine details.
macOS via Homebrew
brew install --cask openpencil
This installs the signed macOS app (Apple Silicon and Intel) from the official Homebrew cask. Homebrew updates are reviewed upstream and may lag behind GitHub releases. For a release not yet available through Homebrew, use the direct download.
The desktop cask does not install the CLI; install it separately with npm install -g @open-pencil/cli.
If you used the archived custom tap, migrate with:
brew uninstall open-pencil/tap/open-pencil
brew install --cask openpencil
Building from Source
Prerequisites
Installation
git clone https://github.com/open-pencil/open-pencil.git
cd open-pencil
bun install
Development Server
bun run dev
Opens the editor at http://localhost:1420.
Available Scripts
| Command | Description |
|---|---|
bun run dev |
Dev server with HMR |
bun run build |
Production build |
bun run check |
Lint (oxlint) + typecheck (tsgo) |
bun run test |
E2E visual regression (Playwright) |
bun run test:update |
Regenerate screenshot baselines |
bun run test:unit |
Unit tests (bun:test) |
bun run docs:dev |
Documentation dev server |
bun run docs:build |
Build documentation locally (fast validation build) |
bun run docs:build:production |
Build deployable documentation, including LLM files |
Desktop App (Tauri)
The desktop app requires Rust and platform-specific prerequisites.
macOS
xcode-select --install
cargo install tauri-cli --version "^2"
bun run tauri dev
Windows
- Install Rust with
stable-msvctoolchain:rustup default stable-msvc - Install Visual Studio Build Tools with "Desktop development with C++" workload
- WebView2 is pre-installed on Windows 10 (1803+) and Windows 11
- Run:
bun run tauri dev
Linux
Install system dependencies (Debian/Ubuntu):
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \
libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
Then:
bun run tauri dev
Build for Distribution
bun run tauri build # Current platform
bun run tauri build --target universal-apple-darwin # macOS universal