Skip to content

Repository files navigation

JayJay

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.

CI Release macOS Rust License Ask DeepWiki

JayJay macOS App

JayJay is a fast, keyboard-driven GUI for people who use jj every day.

JayJay - DAG graph and side-by-side diff

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 = "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/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.
  • Blog - notes on Jujutsu, collaboration, and the tools around them.

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.

About

A native macOS GUI for Jujutsu (jj) — DAG graph, side-by-side diffs, interdiff, conflict resolution. Built with Rust + SwiftUI.

Topics

Resources

Contributing

Stars

121 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages