Skip to content

hewigovens/jayjay

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, graft, 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.

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 App launcher plus agent-facing review subcommands Through jayjay-core

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 - development loop, testing, architecture, and the jj-lib vs jj CLI backend split.
  • DeepWiki - indexed codebase reference.
  • FAQ - install, licensing, platform support, and common feature questions.

Alpha GPUI Shell

There is also an experimental GPUI shell for cross-platform work. It is not the released product yet; 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

License

Contributing

Stars

84 stars

Watchers

1 watching

Forks

Sponsor this project

 

Contributors