jjpr
jjpr manages stacked pull requests for Jujutsu repositories. It pushes bookmarks, creates and updates PRs/MRs, merges them, and syncs the stack on GitHub, GitLab, and Forgejo.
jjpr watch is the main driver. It creates draft PRs, promotes them
when CI passes, merges from the bottom up once approved, and keeps the
rest of the stack rebased onto the new base.
jj bookmark set auth
jj bookmark set profile
jjpr watch
Install
brew install michaeldhopkins/tap/jjpr # Homebrew
cargo binstall jjpr # cargo-binstall
cargo install jjpr # crates.io
Requires Rust 1.91+ to build from source and jj 0.36+ at runtime.
Documentation
Full docs at michaeldhopkins.com/docs/jjpr: quickstart, per-command reference, configuration, forge support, and troubleshooting.
The doc sources are in docs/src/ and are hand-edited.
Run ./generate-docs.sh to rebuild the site and mirror it into the
michaeldhopkins.com repo.
Development
cargo test # unit + jj integration tests
cargo clippy --tests # lint
JJPR_E2E=1 cargo test # add E2E tests against a real forge
Test tiers:
- Unit: fast, no I/O, stub
JjandForgetraits. - jj integration: real
jjbinary against temp repos, no network. - E2E: real
jjand a real forge against jjpr-testing-environment, gated byJJPR_E2E.
Contributor conventions live in CLAUDE.md.
License
MIT or Apache-2.0.