JayJay is a native macOS GUI for Jujutsu and a set of Rust libraries for jj-aware diff and review tooling.
This repository has two primary products:
- JayJay macOS app - the released GUI, built with Rust + SwiftUI.
- Rust libraries - reusable crates for diffing, review state, repo operations, and app bindings.
JayJay macOS App
JayJay is a fast, keyboard-driven GUI for people who use jj every day.
Highlights
- DAG visualization with bookmarks, tags, conflicts, author avatars, relative time, and revset filters.
- Unified and side-by-side diffs with syntax highlighting, word-level changes, context collapsing, rename detection, and image/SVG/Markdown/HTML previews.
- Interdiff for PR-style revision comparison, file annotate, file history, and change evolution (
jj evolog). - Diff edit mode: select files, hunks, or line ranges across a change.
- Persistent file review state that survives restart and auto-invalidates when content changes.
- Conflict resolution with one-click "Use Ours" / "Use Theirs" and editor-backed
jj resolve --tool. - Common jj operations from the app: new, edit, describe, squash, abandon, split, duplicate, merge, absorb, back out, Git push/fetch, and undo.
- Bookmark Manager, drag-to-move bookmarks and working copy, GitHub/GitLab/Codeberg PR actions, stacked PRs/MRs, and command palette.
- AI commit-message fallback chain: Codex CLI, Claude CLI, then Apple Intelligence.
- External editor and terminal integration, multi-window support, recent repos, Dock menu, and CLI launcher.
See the full feature guide for screenshots and workflows.
Install
Requirements: macOS 26 or later.
Homebrew:
brew install --cask hewigovens/tap/jayjay
Direct download: grab the latest .zip from GitHub Releases, unzip, and move JayJay to Applications.
JayJay checks for updates automatically through Sparkle. You can also run JayJay -> Check for Updates.
Feedback
Choose Help -> Send Feedback in JayJay to email us.
Build The App
just run # Build and launch the SwiftUI macOS app just install-cli # Install the jayjay launcher to ~/.local/bin jayjay . # Open the current repo
Rust Libraries
The app is not the only product here. The Rust workspace is split so reusable lower layers do not have to inherit jj-lib.
| Crate | Role | jj-lib? |
|---|---|---|
jj-diff |
Standalone diff engine: histogram line diff, word diff, syntax highlighting, context collapse, side-by-side rows | No |
jayjay-primitives |
Shared jj-lib-free domain and review identity types | No |
jayjay-review |
Local review marks, notes, and reconciliation | No |
jayjay-network |
Shared blocking HTTP helpers | No |
jayjay-core |
App-facing repo operations, jj data access, mutations, and format projections | Yes |
jayjay-uniffi |
Swift bindings for the SwiftUI app | Through jayjay-core |
jayjay-cli |
Thin app launcher; command-line subcommands are served by the bundled macOS app executable | No |
Rule of thumb: jj-lib belongs in jayjay-core. Diff rendering, review state, and shared domain types stay below that boundary so they can be reused without embedding jj's repo model.
jj-diff
jj-diff is the most reusable standalone library in the repo. It has zero dependency on jj-lib.
[dependencies] jj-diff = { git = "https://github.com/hewigovens/jayjay" }
use jj_diff::{collapse_context_with_mapping, compute_file_diff}; let diff = compute_file_diff("main.rs", &old_content, &new_content, false); let collapsed = collapse_context_with_mapping(&diff); for line in &collapsed.diff.lines { // render line.style and line.spans in your UI }
Features:
- Histogram line diff via
similar. - Word-level highlighting within changed lines.
- tree-sitter syntax highlighting for common source formats.
- Context collapsing with display-to-full line index mapping.
- Side-by-side row building for two-column renderers.
- Placeholder detection for Git LFS, submodules, and binary content.
See crates/jj-diff/README.md for the full API.
Docs
- User Guide - shipped features and workflows.
- Roadmap - current milestones and platform status.
- Contributing - setup, development checks, testing, and pull request policy.
- DeepWiki - indexed codebase reference.
- FAQ - install, licensing, platform support, and common feature questions.
Alpha GPUI Shell
There is also an experimental GPUI shell whose current parity target is Linux. Its macOS build is for development; the released macOS product remains the SwiftUI app. See Roadmap.md if you want to follow or try that track.
just gpui # Build and launch the alpha GPUI shell just gpui-appimage # Build the Linux AppImage
Keyboard Shortcuts
| Key | Action |
|---|---|
| Cmd+Shift+P | Command palette |
| Cmd+F | Find in diff |
| Cmd+R | Refresh |
| Cmd+O | Open repository |
| Cmd+Plus / Cmd+Minus / Cmd+0 | Zoom in / out / reset |
| Cmd+Shift+B | Bookmark Manager |
| Cmd+Shift+U | Undo through operation log |
| Space | Toggle file reviewed |
| Shift+Click | Compare two revisions |
License
- Rust crates (
crates/): Apache-2.0 - App shells and everything else (
shell/, docs, packaging): BSL 1.1 - free to use, modify, and redistribute; paid app store distribution requires permission. Converts to Apache-2.0 on 2030-03-23.
