Skip to content

Contributing

Pitchfork welcomes focused fixes and improvements. For a non-obvious change, discuss the direction first in GitHub Discussions or Discord. The project has a specific scope; settling the direction early avoids work on a change that will not be accepted.

Before requesting review, CI must pass and automated review comments must be addressed. Maintainer review time is limited, and changes may be declined briefly when they do not fit the project's scope or quality expectations.

Set up a checkout

sh
git clone --recurse-submodules https://github.com/jdx/pitchfork.git
cd pitchfork
mise install
mise run build

The build task builds the embedded web UI before the Rust binary. Use the task instead of a bare cargo build for normal development.

Develop and verify

TaskCommand
Build the UI and CLImise run build
Rebuild and restart your local supervisormise run build-dev
Check formatting and lintsmise run lint
Apply formatting and lint fixesmise run lint-fix
Run Rust and shell integration testsmise run test
Run one Rust testcargo nextest run test_name
Run web UI browser testsmise run test:web-ui
Run the development checks before committingmise run ci-dev

build-dev restarts the supervisor used by your local pitchfork installation. Use it when you intend to run your development build. ci-dev builds, fixes lints, builds docs, runs tests, and regenerates references; inspect its changes before committing.

Work on the docs

sh
mise run docs

Open the local URL printed by VitePress. Markdown lives in docs/, navigation in docs/.vitepress/config.mts, and theme components and styles in docs/.vitepress/theme/.

For prose and styling changes:

sh
mise run build:docs

The production build checks examples and internal links, including anchors, and generates and verifies social preview images. Preview landing and article pages at mobile and desktop widths and in both themes after styling changes.

Edit the source of generated content

ChangeSourceRegenerate with
Command help, flags, argumentssrc/cli/ usage-rs definitionsmise run render
Settings documentation and defaultssrc/settings.rsmise run render
TOML schemaConfig types and schemars definitionsmise run render
HTTP response schemaAPI typesmise run render

Do not hand-edit docs/cli/, docs/public/schema.json, docs/public/api-schema.json, or pitchfork.usage.kdl. The render task stages generated files and the docs directory, so inspect both staged and unstaged changes afterward. Build the docs again after rendering.

Keep tutorials runnable, label prerequisites, and distinguish complete config examples from fields to add to an existing table. Link to the canonical guide instead of repeating long explanations across pages.

If the mbx build cache fails

Compilation-heavy tasks use mbx through the repository's Cargo wrapper. If the cache command fails, build the UI first, then run the equivalent Cargo command without the wrapper. See CONTRIBUTING.md for the fallback commands and the information needed to report a mismatch.

Pull requests

Use a Conventional Commit title that starts with a lowercase description:

  • fix(supervisor): handle a missing process
  • docs: clarify project setup
  • chore(deps): update dependencies

Explain the problem, the resulting behavior, and how you verified the change. Use fix for application bugs and chore or ci for infrastructure changes. See AGENTS.md for repository conventions, including disclosure for AI-assisted GitHub content.

MIT LicenseCopyright © 2026jdx.dev