What is jjui?
jjui is a terminal user interface for Jujutsu, the Git-compatible version control system you drive with the jj command. Run it inside a jj repository and it shows the revision graph, then lets you work on it directly: change the revset with auto-complete to choose what is shown, rebase a revision or a whole branch, squash, split and abandon revisions, move bookmarks, open a revision to see its files and diffs and restore files one by one, preview jj show and jj diff output beside the graph, push and fetch through a Git menu, and browse or restore the operation log. Everything works from the keyboard or with the mouse. jjui is written in Go by Ibrahim Dursun and is MIT licensed.
apt upgrade updates jjui and the jj it depends on together.
⚡ Key Features of jjui
🌳 The Revision Graph, Live
jjui opens on the same graph jj log prints, but you can move through it, select revisions and act on them, and the graph redraws after every change.
🔎 Revsets with Auto-Complete
Edit the revset at the top of the screen to choose which revisions are shown; functions and aliases are completed as you type, so you do not have to remember the revset language.
✂️ Rebase, Squash, Split, Abandon
Rebase a single revision or a whole branch onto another, squash a revision into its parent, split it in two, abandon it, or move a bookmark, all from the graph, and see the result straight away.
📄 Files, Diffs and Previews
Open a revision to list the files it changes, read their diffs and restore files interactively, or keep a preview pane with the jj show or jj diff output of whatever is selected.
🔄 Git Menu and Operation Log
Push and fetch through a Git menu without leaving the graph, and browse the operation log to see what changed and restore the repository to an earlier state.
🖱️ Keyboard, Mouse, Lua and Themes
Every action has a key binding (press ? to list them) and the mouse works too. Lua scripting adds your own actions, and themes change the colours.
apt upgrade keeps you on the latest version.
📦 Installation from deb.griffo.io
Step 1: Add Repository
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update🆓 There is an always-free mirror. deb-free.griffo.io serves packages free forever, no account, no subscription, at most 2 months behind upstream, security fixes immediately. It currently carries cliamp, Forgejo Runner, Ghostty, lazydocker, Oh My Posh, Uncloud and Zed; jjui is not one of them, so the repository above is the only way to get it today, ask and it can be enrolled.
Step 2: Install jjui
# Install latest jjui (pulls in jujutsu, which provides jj)
sudo apt install jjui
# Verify installation
dpkg -s jjui | grep Version# Install latest jjui (pulls in jujutsu, which provides jj)
apt install jjui
# Verify installation
dpkg -s jjui | grep VersionStep 3: First run
# jjui drives jj, so start inside a jj repository
cd ~/src/myproject
# An existing Git checkout? Colocate jj with it first
jj git init --colocate
# Open the revision graph
jjui
# Press ? inside jjui for the key bindings, q to quit🎯 Basic Usage Examples
Starting and configuring jjui:
# Open the revision graph of the repository you are in
jjui
# Edit the configuration in $EDITOR (key bindings, theme, Lua actions)
jjui -config
# jjui runs the jj on your PATH; check which version that is
jj --versionInside jjui:
# Press ? for every key binding of the view you are in
# Change the revset at the top, with auto-complete, to choose what is shown
# Select a revision, then rebase, squash, split or abandon it, or move a bookmark
# Open a revision to list its files, read their diffs and restore them one by one
# Preview jj show / jj diff beside the graph, or open the operation log to restore a state
# Push and fetch from the Git menu, without leaving the graphKeeping it current:
# jjui and jj update with the rest of the system
sudo apt update && sudo apt upgrade
# Which versions are installed, and which are the newest available
apt policy jjui jujutsu
# Remove it again (jj stays installed)
sudo apt remove jjui# jjui and jj update with the rest of the system
apt update && apt upgrade
# Which versions are installed, and which are the newest available
apt policy jjui jujutsu
# Remove it again (jj stays installed)
apt remove jjui🔧 Tool Integrations
jjui is a front end for jj, so it fits wherever jj already does:
- Jujutsu: every action runs the
jjcommand, so jjui sees the same repository, config and revset aliases as jj itself; the package depends onjujutsu (>= 0.37), and deb.griffo.io packages Jujutsu for every suite, so apt installs it along with jjui - Git remotes: in a colocated repository, push and fetch from the Git menu go to your normal Git remotes with the credentials you already use
- Your editor:
jjui -configopens the configuration file in$EDITOR, where key bindings, the theme and custom actions live - Lua scripting: write your own actions in Lua and bind them to keys, for the jj commands you run often
- Themes: the colours of the graph, the selection and the panes come from a theme you can change or write yourself
- Mouse: click to select revisions and scroll the graph and the preview, in any terminal with mouse support
- Documentation: upstream ships no man page, so the full guide is at idursun.github.io/jjui, and
?inside jjui lists the key bindings
🚀 Why Choose deb.griffo.io?
- Official Ubuntu: does not package jjui,
apt install jjuifails on a stock system - Upstream downloads: a zip with one binary on the GitHub releases page, copied into your PATH by hand, fetched again for every release, with jj installed separately
- Building from source: a Go toolchain and a
go installfor every release, and jj still to be installed some other way - deb.griffo.io: latest version with automatic updates
- ✅ The Only apt Source: jjui is in neither the Debian nor the Ubuntu archives; this repository packages the official upstream release
- ✅ jj Comes With It: the package depends on
jujutsu (>= 0.37), upstream's minimum, and deb.griffo.io packages Jujutsu for every suite, sosudo apt install jjuiinstalls a recent jj in the same step - ✅ Honest Packaging: the upstream binary at
/usr/bin/jjui: upstream ships no man page and no shell completions, so the package does not invent any - ✅ Automatic Updates: packages updated within hours of upstream releases
- ✅ Two Architectures: amd64 and arm64 on every suite, so the same jjui runs on laptops, servers and ARM boards like the Raspberry Pi
- ✅ Multi-Distribution: works on Ubuntu 22.04, 24.04, 25.10 and 26.04
- ✅ Easy Maintenance: standard apt commands for updates
📦 Package Build Repository
The Ubuntu packages are automatically built and maintained in this GitHub repository:
- 🪢 jjui-debian - Latest release builds
🔗 Related Packages
Also available from deb.griffo.io:
- Jujutsu - The jj version control system that jjui drives, installed with it
- lazygit - A terminal UI for Git, for the repositories you still drive with git
- GitUI - A fast, keyboard-only terminal UI for Git
- difftastic - A structural diff tool that jj can use for its diffs
- serie - A rich Git commit graph in the terminal
💝 Support This Project
If this repository saves you time and effort, please consider supporting it!