Thanks for contributing. This guide explains how to make changes that are easy to review and safe to merge.
- Search existing issues/PRs to avoid duplicate work.
- For non-trivial changes, open an issue first and align on scope.
- Keep one concern per PR (feature, fix, docs, or tooling).
Requirements:
- Bun
>=1.3.0 - Git
Install and run locally:
bun install
bun run devRecommended validation sequence:
bun run typecheck
bun run test
bun run buildOptional (style/static checks):
bun run lintNotes:
- If you touch formatting-heavy files, run
bun run fixbefore opening a PR.
CHANGELOG.md is the source of truth for release notes.
When preparing a new version:
- Bump
package.jsonversion. - Add a matching section to
CHANGELOG.md(for example## [0.0.3] - 2026-03-23) with at least one change line. - Run:
bun run release:sync-notesPublishing runs this automatically via prepublishOnly (release:sync-notes && build). If changelog parsing fails, or the current version section is missing/empty, publish is blocked.
- Branch naming:
feat/...,fix/...,docs/...,chore/... - Commit messages: short imperative summary (for example
fix memory diff rendering) - Keep commits focused and avoid unrelated file churn.
Every PR should include:
- clear problem statement
- implementation summary (what changed and why)
- test evidence (commands run + result)
- migration notes if behavior/config changed
Use this structure in the PR description:
## TL;DR
What:
Why:
How:
## Validation
- [ ] bun run typecheck
- [ ] bun run test
- [ ] bun run build
- [ ] (optional) bun run lintThe main CI workflow runs on pull_request and push to main.
Required checks:
- typecheck
- tests
- build
- CLI smoke (
--help,--version,info) - lint (blocking for changed
src/**/*.ts(x)andtest/**/*.ts(x)files)
AI-assisted PRs are welcome. Please:
- disclose AI usage in the PR
- verify behavior with real commands/tests
- be able to explain the code and tradeoffs
Do not open public issues for security vulnerabilities. Report privately to maintainers (or use GitHub private vulnerability reporting if enabled).