Ignition
Contributing

Development Setup

Set up your development environment and learn the dev workflow.

Setup

git clone https://github.com/grovemotorco/ignition.git
cd ignition
bun install

Development commands

CommandDescription
bun run src/cli.ts run <recipe> <target>Run CLI from source
bun run verifyFull quality gate: typecheck → lint → fmt:check → test
bun run typecheckType-check (tsgo --noEmit)
bun run lintLint with oxlint
bun run fmtFormat with oxfmt
bun run fmt:checkFormat check (CI)
bun run testRun unit tests
bun test tests/core/resource_test.tsRun a single test file
bun run build:executableBuild standalone binary

Quality gate

bun run verify must pass before every commit. It runs:

  1. bun run typecheck — type-check
  2. oxlint --type-aware --type-check — lint
  3. oxfmt --check — format check
  4. bun test — test suite

Commit conventions

Use conventional commits:

<type>(<scope>): <description>

Types: feat, fix, chore, docs, refactor, test

Scopes: core, cli, ssh, resources, output, dashboard, inventory, recipe

Examples:

feat(resources): add user resource
fix(ssh): handle connection timeout gracefully
chore(cli): update help text

Dashboard development

Start two processes:

Terminal 1 — mock event server on :9090:

bun run dev:dashboard

This pushes synthetic run events with realistic timing.

Terminal 2 — Vite dev server on :5173:

bun run dev:ui

Open http://localhost:5173 — the React UI has HMR and proxies /ws and /api to the mock backend.

Building the dashboard

The dashboard UI is a React SPA embedded as a single HTML string:

bun run dashboard:build

This compiles the React app, produces dist/index.html, and auto-embeds it into src/dashboard/assets.ts.

Building an executable

bun run build:executable

Produces dist/ignition — a single-file binary.

Code style

  • 2-space indentation, 100 character line width, no semicolons
  • Enforced by oxfmt (bun run fmt) and oxlint (bun run lint)

On this page