Getting Started
This guide walks you through setting up a local development environment so you can build, test, and iterate on skeeditor.
Prerequisites
| Tool | Minimum version | Notes |
|---|---|---|
| Node.js | 20.x | LTS recommended |
| pnpm | 9.x | npm install -g pnpm |
| Chrome | 120+ | For extension development and Playwright E2E |
| Firefox | 121+ | Nightly / Developer Edition required for manual extension loading |
| Git | 2.x | — |
macOS users
Install Node.js via nvm or mise to avoid system-Python conflicts. pnpm can be installed with npm install -g pnpm or via brew install pnpm.
Clone and install
git clone https://github.com/selfagency/skeeditor.git
cd skeeditor
pnpm installThis installs all workspace dependencies, including the build toolchain, test runners, and Playwright browsers.
Build
Development build (watch mode)
# Chrome
pnpm build:watch:chrome
# Firefox
pnpm build:watch:firefoxBoth commands start Vite in watch mode. Changes to src/ files trigger an incremental rebuild immediately.
Production build
pnpm build:chrome # outputs to dist/chrome/
pnpm build:firefox # outputs to dist/firefox/
pnpm build:safari # outputs to dist/safari/ (macOS only, requires Xcode)To build all targets at once:
pnpm buildLoad the extension in your browser
Chrome
- Run
pnpm dev:chrome(orpnpm build:chrome). - Open
chrome://extensions. - Enable Developer mode.
- Click Load unpacked → select
dist/chrome/.
The extension reloads automatically when files in dist/chrome/ change (i.e. when the watch build rebuilds).
Firefox
- Run
pnpm dev:firefox(orpnpm build:firefox). - Open
about:debugging#/runtime/this-firefox. - Click Load Temporary Add-on… → select
dist/firefox/manifest.json.
If you have web-ext installed globally you can also run:
web-ext run --source-dir dist/firefox/ --firefox=nightlySafari (macOS)
Safari extensions require an Xcode app wrapper. Build the converter output first:
pnpm build:safariThen open the generated Xcode project under dist/safari/ and run it. See Cross-Browser Platform for full instructions.
Run tests
pnpm test # unit + integration (Vitest)
pnpm test:e2e # E2E (Playwright, requires Chrome and Firefox)
pnpm test:coverage # unit + integration with coverage reportSee Testing for full details on the test suite.
Lint and type-check
pnpm lint # ESLint + oxfmt
pnpm typecheck # tsc --noEmitBoth must pass before opening a pull request. CI enforces them on every push.