A desktop workbench for Jujutsu

Jiji puts jj's model on screen: your stacks on trunk, the diff of whatever you select, and an operation log that makes every rewrite undoable. It is built on jj-lib, so it works with the repo and config you already have, alongside the CLI.

v0.4.1·Apple Silicon and Intel·signed and notarized·free to use

Jiji on the jj repository: five workstreams in the change graph, and the diff of a change that adds an op log filter Jiji on the jj repository: five workstreams in the change graph, and the diff of a change that adds an op log filter

jj, on one screen

The graph and the diff stay side by side, and the rest of jj is a click or a keystroke away. A command palette (⌘K) reaches everything else.

  • Read history

    A dense graph of your stacks on trunk, with how far each sits behind it. Switch the lens to your own work, your team's bookmarks, recent changes, or any revset.

    jj log -r <revset>
  • Review diffs

    Unified or split, syntax-highlighted, with a file tree. Read a whole stack as one diff, scrub through a change's evolution, and annotate any file.

    jj diff · jj evolog · jj file annotate
  • Rewrite directly

    Describe, new, edit, squash, split down to single lines, absorb, abandon and revert. Drag a change onto a new parent to rebase it.

    jj squash -i · jj split · jj rebase
  • Undo anything

    Every action is one jj operation. Undo it from the status bar, back out a single operation, or restore the repository to any point in its history.

    jj undo · jj op revert · jj op restore
  • Resolve conflicts

    A conflicted file renders as its merge structure, each side against the base, instead of marker soup. Take a side, or open your merge tool.

    jj resolve
  • Manage bookmarks

    Create, move, rename, track and delete bookmarks. Remotes are fetched in the background, and nothing is pushed until you ask.

    jj bookmark · jj git fetch · jj git push

Stacks become pull requests

Publish pushes a stack to GitHub as one pull request per change, in landing order, and brings their bases and descriptions up to date each time you publish again. Follow checks and reviews in the app, land one round, or let auto-land merge the stack and rebase what is left while Jiji is open. Stacks made with jjpr are recognized as they are.

The same engine runs in your terminal as jiji. Every stack command takes --dry-run and --json, so scripts and coding agents can publish and land too. Read the CLI guide.

$ jiji status             # stack, PRs, landing readiness
$ jiji publish --dry-run  # preview pushes and PR updates
$ jiji publish --draft    # open new PRs as drafts
$ jiji ready              # mark them ready for review
$ jiji land               # land one round, reconcile
$ jiji watch              # auto-land until done

Works with the jj you have

Built on jj-lib 0.45
Same repository format and config as jj 0.45: your trunk(), immutable_heads(), revset aliases and merge tools apply as they do in the CLI. The jj binary itself is optional.
Next to the terminal
A file watcher picks up edits and operations from your terminal as they happen, and jj op log shows everything Jiji did. jj undo works on it.
Git repositories too
Open a plain Git repository and Jiji offers to set jj up in it, the way jj git init --colocate does. Git keeps working alongside.

No telemetry

Your Git remotes
A git fetch when you open a repository and then every 15 minutes (adjustable, or off). Pushes happen only when you ask.
GitHub
Only for publishing and pull requests, with a token you provide or gh auth token. Tokens live in the macOS Keychain.
Updates and licensing
An update check against GitHub Releases, which downloads in the background and waits for you to restart. A license key, if you enter one, is validated with Polar at most once a day.

Free to use. Themes if you'd like to support it.

Every jj feature works without a license. A one-time license unlocks the color themes and pays for development; without one, Jiji uses its default light theme.

Free

$0 Everything jj in Jiji

  • Every feature, no time limit
  • The default light theme
  • Updates included
Included with the download

Solo

$15 One-time purchase

  • 1 device
  • All ten themes, light and dark
  • Funds development
Buy Solo

Personal

$20 One-time purchase

  • Up to 5 devices
  • All ten themes, light and dark
  • Funds development
Buy Personal

Try the themes on this page:

Checkout and license keys are handled by Polar, taxes included. The key arrives by email; paste it into Jiji to unlock the themes.

Questions

Something else? Open an issue or write to hello@jijiworkbench.com.

Is it open source?
It is source-available under FSL-1.1-MIT. You can read, modify and redistribute it for anything except a competing commercial product, and each release becomes MIT two years after it ships.
Which platforms does it run on?
macOS only for now: one universal build for Apple Silicon and Intel, signed and notarized. Linux and Windows builds aren't available yet.
Do I need the jj CLI?
No. Jiji embeds jj-lib 0.45, so it reads and writes repositories and config the way jj 0.45 does. Keep jj installed if you like a terminal; both work on the same repository at once. Fetch and push use Git, so git must be on your PATH.
Can I use it on a Git repository?
Yes. Opening a plain Git repository offers to set jj up in it, like jj git init --colocate: a .jj folder appears next to .git, your branches become bookmarks, and Git keeps working.
How is it different from gg, jjui or VisualJJ?
They are good front ends for jj: gg is a desktop app, jjui and lazyjj run in a terminal, VisualJJ and Jujutsu Kaizen live in VS Code. Jiji is a diff-first desktop workbench with stacked-PR publishing, landing and a CLI built in.
Is it stable?
It is alpha. It is meant for people who know jj well enough to sanity-check what a GUI does. Everything Jiji changes goes through jj's operation log, so jj undo and jj op restore can take any of it back.
How do updates work?
Jiji checks GitHub Releases, downloads a new version in the background, and offers to restart. It never restarts on its own.
How do licenses work?
A one-time purchase through Polar. Solo activates one device and Personal up to five. The key is checked with Polar at most once a day and keeps working offline.

The full terms are in the license.