Thank you for your interest in contributing to jjui!
We welcome contributions from the community and appreciate your help in making this project better.
- Go 1.24.2 or later
- Jujutsu version control system v0.36 or later
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/jjui.git cd jjui - Build the project:
go build ./cmd/jjui
Bug fix pull requests are always welcome! If you've found a bug and have a fix for it, feel free to submit a pull request directly. Please include:
- A clear description of the bug you're fixing
- Steps to reproduce the issue (if applicable)
- Your solution and why it fixes the problem
For new features, we prefer a discussion-first approach:
- Open an issue first to discuss the feature and potential implementations
- Wait for feedback from maintainers and the community
- Implement the agreed-upon design
- Submit a pull request with the implementation
This process helps ensure that:
- The feature aligns with the project's goals
- We avoid duplicate work
- The implementation follows the project's patterns and conventions
- Ensure your code builds successfully:
go run ./cmd/jjui - If you have made a change to the dependencies then update the
nix/vendor-hashfile. - (Optional) Submit your pull request with screenshots (if applicable)
- Follow standard Go conventions and formatting
- Use
go fmtto format your code - Ensure compatibility with the minimum supported
jjversion (v0.36+)
If you add or modify intent types with //jjui:bind annotations in internal/ui/intents/, you must regenerate the action catalog:
go run ./cmd/genactionsThis produces catalog_gen.go and builtins_gen.go. A staleness test will fail if generated code is out of sync with annotations.
- Test your changes with different scenarios and configurations.
- If adding new features, consider adding appropriate test cases (although I know it is a pain at the moment)
- The main entry point is in
cmd/jjui/main.go - UI components are organized in the
internal/ui/directory - jj integration logic is in the
internal/jj/directory - Configuration handling is in the
internal/config/directory - Default configuration and key bindings are in the
internal/config/defaultdirectory - Operations (rebase, squash, split, etc.) are implemented as operations the
internal/ui/operations/directory - Set
JJUI_DEBUG=1environment variable for printing debug messages todebug.logfile
If you contribute a feature or if you find something that can be documented better, feel free to send a PR against the docs branch.
The site is built with starlight, you can run the local server with:
pnpm install
pnpm run dev- Check the documentation website for detailed documentation
- Look at existing issues for similar problems or questions
- Feel free to ask questions in new issues
Thank you for contributing to jjui!