Contributing
Repository layout, development workflow, testing, and release process.
#Contributions should keep the runner deterministic, dependency-light, and documented. This page describes the repository layout, local setup, coding conventions, test expectations, and release process.
Repository layout
#src/
cli/ command-line parsing, help, discovery, main entry
config/ config types, defaults, loading, validation
coverage/ V8 coverage collection and reporting
expect/ assertions, matchers, equality, diffs, formatting
mock/ mock functions, spies, module mocking, loader
plugins/ plugin types and loading
reporters/ built-in reporters and reporter types
runner/ registry, table tests, executor, worker pool, serialization
snapshot/ snapshot session, serialization, inline updates
transform/ TypeScript/JSX loader and transformation
utils/ glob matching
watch/ watcher and dependency tracking
tests/ Node.js test-runner suites and fixtures
docs/ documentation
scripts/ repository maintenance scripts
.github/ CI workflows and dependency automation
ROADMAP.md planned features and the release checklist
CHANGELOG.md released and unreleased changes
Setup
#npm install
Scripts
#| Script | Description |
|---|---|
npm run clean |
Remove dist/. |
npm run build |
Clean and compile with tsconfig.build.json. |
npm run typecheck |
Type-check with tsconfig.json (no emit). |
npm run lint |
Lint the source, tests, and scripts with guchho lint. |
npm run format |
Format supported files with Prettier. |
npm run format:check |
Check formatting without rewriting files. |
npm run docs:links |
Validate relative links and anchors in Markdown files. |
npm test |
Build, then run the test suite with node --test. |
npm run test:coverage |
Build and run the suite with LCOV coverage output. |
npm run prepublishOnly |
Typecheck and test before publishing. |
Development workflow
#- Inspect the relevant source and existing tests.
- Add or update tests alongside the change.
- Run
npm run lint,npm run format:check,npm run docs:links,npm run typecheck, andnpm test. - Use
npm run formatto apply formatting fixes. - Update documentation for any user-facing behavior change.
- Update
CHANGELOG.mdunder[Unreleased]. - Update
ROADMAP.mdwhen completing planned phases or items.
Do not commit unintended build output or unrelated changes.
Code style
#- Strict TypeScript; avoid
anyunless justified. - ESM imports with explicit
.jsextensions in source. - Small, focused modules; avoid unnecessary abstractions.
- No comments unless they clarify non-obvious behavior.
- Formatting is enforced by Prettier and linting by
guchho lint. Both configurations are committed at the repository root.
Tests
#The project tests itself with node:test. Tests live in tests/ and use built
output from dist/ for the public API and CLI integration. Fixtures live in
tests/fixtures/.
Guidelines:
- Add regression tests for every bug fix.
- Prefer real temporary projects and filesystem fixtures for CLI behavior.
- Keep tests deterministic; avoid timing-dependent assertions where possible.
- Run the full suite before submitting changes.
npm run test:coverage writes LCOV and text reports below coverage/. CI uploads
coverage/lcov.info to Codecov from the Linux Node.js 24 job.
Continuous integration
#The CI workflow runs:
- linting, formatting checks, documentation link checks, and type checking on Linux with Node.js 24;
- the full test suite on Linux, macOS, and Windows across Node.js 20, 22, and 24;
- coverage collection and upload on Linux with Node.js 24.
Dependabot checks npm packages and GitHub Actions weekly.
Implementation rules
#- Do not copy source code from other testing frameworks.
- Do not add placeholder or fake functionality.
- Do not document behavior that is not implemented and tested.
- Avoid new runtime dependencies without a concrete reason; the runtime relies on Node.js built-ins and the TypeScript compiler.
- Keep the public API stable and documented; do not expose internal modules.
Documentation
#Each page under docs/ should describe implemented behavior with runnable
examples. When behavior changes:
- update the relevant page;
- update API Reference if exports or signatures change;
- update the CLI Reference if flags change;
- add a changelog entry.
Release
#Releases are cut only with explicit approval. The release checklist lives in
ROADMAP.md and includes version bumps, changelog preparation, a
full verification pass, CI validation, and a package content audit.
Do not publish to npm or create a public release without permission.
Getting help
#- Open an issue for bugs, behavior changes, or documentation gaps.
- Discuss larger changes before implementing them.
- Include a minimal reproduction and the relevant command output.