Local setup
Requirements
Section titled “Requirements”- Node 24 — pinned via
.nvmrc. Use nvm or Volta to match. - pnpm 11 — the monorepo’s package manager. Enable via
Corepack:
corepack enable && corepack prepare pnpm@11.
Clone + install
Section titled “Clone + install”git clone https://github.com/ingcreators/annot.gitcd annotpnpm installThe install builds native deps (better-sqlite3, sharp,
workerd) via the allowBuilds allowlist in pnpm-workspace.yaml.
First install takes ~1 minute.
Run the web app
Section titled “Run the web app”pnpm --filter @ingcreators/annot-web devOpen http://localhost:5173. Vite watches the editor + every core / editor / render / host-ui package — edits hot-reload without restarting the dev server.
Run the headless annotator
Section titled “Run the headless annotator”pnpm --filter @ingcreators/annot-annotator buildnode packages/annotator/dist/index.js # example wiringThe package is published on npm; the same source ships in the monorepo for local development.
Run tests
Section titled “Run tests”pnpm test # allpnpm --filter @ingcreators/annot-core test # one packagepnpm --filter @ingcreators/annot-web test # the web app3500+ tests in ~30s on a developer laptop. CI runs the same command on every PR.
Run Storybook
Section titled “Run Storybook”pnpm --filter @ingcreators/annot-web storybookOpens at http://localhost:6006. Every built-in Lit component has a story; CI fails the PR if a story stops building.
Lint / typecheck
Section titled “Lint / typecheck”pnpm lint # Biome — formatter + linter (CI-blocking)pnpm lint:fix # apply auto-fixespnpm -r typecheck # tsc across every packageBuild everything
Section titled “Build everything”pnpm -r buildBuilds run in dependency order via Turborepo. Cached builds are near-instant; clean builds take ~30s.