A native GUI for
Jujutsu Beta

Fast, open and native, optimized for dev productivity. Browse your DAG, review diffs, resolve conflicts — all from one window. Built with Rust + SwiftUI.

$ brew install --cask hewigovens/tap/jayjay
JayJay
JayJay — light mode JayJay — dark mode

Everything you need for jj

A complete visual interface for Jujutsu — from your first commit to production.

DAG Graph

Lane-based fork/merge rendering. Bookmark, conflict, and divergent indicators. Revset filtering with preset chips. Immutable-aware context menus.

Diff & Review

Myers diff algorithm — instant even for large files. Unified + side-by-side with tree-sitter syntax highlighting. Word-level changes. Background preloading. Context collapsing.

Conflict Resolution

One-click Use Ours / Use Theirs. Resolve in VS Code or Zed merge editor via jj resolve. Divergent commit detection and resolution.

Bookmark Manager

Stats dashboard with active/deleted/conflicted counts. Filter, clean up stale branches (prune + forget), resolve conflicts. Auto-track on fetch.

File Annotate & Interdiff

Syntax-highlighted blame gutter — click to navigate. Shift-click two commits to compare any revisions. Full file history view.

AI Commit Messages

Generate via Codex CLI, Claude CLI, or Apple Intelligence. Auto-detected fallback chain.

Command Palette

~35 commands with fuzzy search. Inline jj CLI with ! prefix. Zoom, filters, bookmarks, git operations — all keyboard-accessible.

Editor & Terminal

VS Code, Zed, Xcode, Android Studio, Vim. Terminal.app, iTerm2, Ghostty. Commit avatars via GitHub and Gravatar.

All jj Operations

New, edit, squash, split, graft, duplicate, merge, rebase, absorb, backout, abandon. Git push/pull with auto-track. Multi-window support.

Command Palette

Every action, one keystroke away

Hit ⌘ ⇧ P to open the command palette. Search any operation with fuzzy matching. Prefix with ! to run raw jj commands with inline output — no terminal needed.

Command Palette Command Palette
Conflict Resolution

Resolve conflicts without leaving the app

Conflicted files get a red indicator and a resolution bar. One click for Use Ours / Use Theirs, or open directly in VS Code's merge editor via jj resolve.

Conflict Resolution Conflict Resolution
Interdiff

Compare any two revisions

Shift-click two commits in the DAG to see what changed between them. Full syntax-highlighted diff with file navigation — like a PR review for any pair of changes.

Interdiff Interdiff
File Annotate

Blame with syntax highlighting

Right-click any file → Annotate. See who changed each line, color-coded by revision. Click any gutter entry to jump to that commit in the DAG.

File Annotate File Annotate
Review & Split

Review files, then split with one click

Press Space to mark files as reviewed — auto-advances to the next unreviewed file. Select multiple files with Shift-click, then split them into a new change. Perfect for breaking large working copy changes into focused commits.

Review & Split Review & Split

Keyboard-first

Every action reachable without leaving the keyboard.

Command palette⌘ ⇧ P
Bookmark manager⌘ ⇧ B
Find in diff⌘ F
Refresh⌘ R
Open repository⌘ O
Zoom in / out / reset⌘+ / ⌘- / ⌘0
Undo (operation log)⌘ ⇧ U
Mark reviewedSpace
Compare revisions⇧ Click

Get started in seconds

Recommends macOS 26 (Tahoe). Install, open a repo, and you're in.

1

Install

brew install --cask hewigovens/tap/jayjay
2

Open a repository

jayjay ~/my-project
or use File → Open in the app
3

Start working

Browse your DAG, review diffs, commit changes — all keyboard-driven.

Built for jj, from day one

Jujutsu is a powerful version control system, but most GUI tools are designed around git's mental model or are web-based and clunky. "Why isn't there any true native GUI that speaks jj?" That question sparked JayJay.

JayJay is built from the ground up for jj — Rust core powered by jj-lib, SwiftUI shell for a native macOS experience. No git translation layer, no impedance mismatch. Changes, bookmarks, and mutable history — the way jj intended.