Skip to content

Development

Requirements

Install Rust through rustup. The minimum compiler is Rust 1.88, with locked workspace checks and tests qualified on Linux; this is not a minimum-toolchain qualification for other platforms. The repository's rust-toolchain.toml selects stable for normal development. The supported product development environments are Linux and macOS. Windows binaries are produced as a best-effort release artifact but Windows is not a supported development environment.

The browser runtime targets locally installed Chrome or a compatible Chromium browser. It can launch a managed browser or attach to an explicitly debug-enabled Chrome/Electron renderer endpoint through MCP. Electron's Node main process is not part of the browser boundary.

Linux release artifacts target x86_64-unknown-linux-musl and aarch64-unknown-linux-musl, so they are statically linked against musl and do not inherit a glibc minimum from the GitHub runner. Local development builds remain native Cargo builds for the host environment.

Bun is optional repository tooling. It is used for VitePress documentation and selected browser fixture applications, never for the Krometrail product runtime.

Rust quality gate

Run these commands from the repository root:

bash
cargo fmt --all -- --check
bash scripts/check-wire-enum-schemas.sh
cargo check --workspace --all-targets --locked
cargo test --workspace --all-targets --locked
cargo clippy --workspace --all-targets --locked -- -D warnings

cargo fmt --all can apply formatting when needed. The other commands compile and test the workspace and root binary.

Formatting and Clippy run on stable only: formatter output and lint rules evolve independently of compiler compatibility. The separate Linux minimum-version CI job installs and explicitly selects Rust 1.88.0 for both locked gates and prints the compiler and Cargo identities. Reproduce it without allowing the repository's stable toolchain file to mask the selection:

bash
rustup toolchain install 1.88.0 --profile minimal
rustup run 1.88.0 rustc --version
rustup run 1.88.0 cargo --version
rustup run 1.88.0 cargo check --workspace --all-targets --locked
rustup run 1.88.0 cargo test --workspace --all-targets --locked

The parsed workflow/manifest contract fixture runs through bash tests/distribution-static.sh, or independently with bun test tests/minimum-rust-workflow.test.ts (Bun built-ins only; no package installation required).

Run a development build

Run the checkout through Cargo:

bash
cargo run -- --version
cargo run -- --help
cargo run -- doctor

doctor performs browser discovery without launching. For MCP development, configure a client to launch cargo run -- mcp; do not use it as an interactive health check. The command reserves standard output for protocol traffic and waits for the client to send requests.

Documentation and fixtures

Install the JavaScript tooling only when working on the docs site or a preserved browser target:

bash
bun install --frozen-lockfile
bun run docs:dev
bun run docs:build
bun run docs:preview

bun run docs:build regenerates docs/public/llms-full.txt and builds the VitePress site. Browser fixtures are standalone applications; consult the fixture classification for their uses and launch details.

Release preparation

Stable Rust releases are published from the root Cargo.toml, the sole product-version authority. The Bun release helper updates Cargo metadata, moves every registered version projection from scripts/release-ownership.ts (plugin manifests, marketplace catalogs, and the launcher marker), leaves independently versioned crates and their lock entries untouched, runs the Rust quality gate, and creates the repository release commit/tag/push workflow:

bash
bun scripts/bump-version.ts patch
# minor, major, or an explicit x.y.z version are also accepted

GitHub Actions builds and checksums these stable asset names. The Linux rows use the pinned houseabsolute/actions-rust-cross action with the v0.2.5 cross tag, digest-pinned toolchain images in Cross.toml, and fixed musl targets; each matrix artifact must run --version in its matching architecture before attestation and upload. The arm64 smoke gate uses explicit QEMU emulation on the x86_64 Linux runner.

The release matrix builds and checksums these stable asset names:

  • krometrail-linux-x64
  • krometrail-linux-arm64
  • krometrail-darwin-x64
  • krometrail-darwin-arm64
  • krometrail-windows-x64.exe

The public installer rejects the preserved v0.2.20 TypeScript/DAP release and older versions before downloading. Stable assets, checksums, and build-provenance attestations are published for each release. See the installation guide for standalone and plugin-managed binary paths. Use scripts/dev-install.sh to install a local host release build into ~/.local/bin.