How to Install Jujutsu on Debian: A Git-Compatible Version Control System
Jujutsu, whose binary is jj, is a version control system that keeps the ecosystem you already rely on while replacing the mental model that trips people up. It uses Git as a storage backend, so it works with existing repositories and remotes on GitHub, GitLab, and anywhere else, but it presents a cleaner, more forgiving interface built around changes rather than the staging area.
The two ideas that make Jujutsu click are the working-copy-as-a-commit and the operation log. Your working directory is always a real commit that Jujutsu amends automatically as you edit, so there is no separate git add step and no stashing dance. Every command you run is recorded in an operation log, which means jj undo can reverse almost anything, including operations Git would consider destructive.
Jujutsu is not in the official Debian repositories, and building it requires the Rust toolchain. The unofficial deb.griffo.io repository provides an up-to-date prebuilt package you can install with apt.
What Makes Jujutsu Special?
- 🔄 Git-compatible backend - Works directly with Git repositories and remotes, so you can adopt it incrementally.
- 📸 Working copy is a commit - Changes are recorded automatically; there is no separate staging area.
- ↩️ Undo anything - The operation log lets
jj undoreverse any prior operation, including rebases. - 🌿 Anonymous branches - Work without naming a branch for every small change; bookmarks are optional.
- 🧩 First-class conflicts - Conflicts are stored in commits, so you can resolve them whenever you like.
- 🔍 Powerful revsets - A query language for selecting commits, inspired by Mercurial.
- ✂️ Effortless history editing -
jj split,jj squash, andjj rebasereshape history safely. - ⚡ Fast Rust implementation - A single, self-contained binary.
Why Use the deb.griffo.io Repository?
- Easy installation and updates through the standard APT workflow.
- Automatic dependency management handled by the package.
- Always tracks upstream releases, so new Jujutsu versions arrive quickly.
- No compiling from source and no Rust toolchain to install.
- Works across supported Debian releases (Bookworm, Trixie, and Sid).
Prerequisites
Before you begin, make sure you have:
- A Debian-based system (Bookworm 12, Trixie 13, or Sid)
sudoprivilegescurlinstalled (sudo apt install curlif it is missing)gitinstalled if you plan to work with existing Git repositories
Step 1: Add the deb.griffo.io Repository
Add the signing key and the repository to APT:
# Create the keyrings directory
sudo install -d -m 0755 /etc/apt/keyrings
# Download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
# Add the repository (auto-detects your distro codename)
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
# Update the package list
sudo apt update
What each command does:
- Create the keyrings directory - Ensures
/etc/apt/keyringsexists with correct permissions. - Install the GPG key - Downloads and de-armours the signing key for signature verification.
- Add the repository - Writes a sources entry bound to that key, auto-detecting your Debian codename.
- Update the package list - Refreshes APT so the new packages become visible.
Step 2: Update the Package List
If you did not run the last command above, run it now:
sudo apt update
Step 3: Install Jujutsu
Install the package with APT:
sudo apt install jujutsu
This installs the latest packaged Jujutsu along with any dependencies. The command you will use day to day is jj.
Step 4: Verify the Installation
Check the version, remembering the binary is jj:
jj --version
You should see output similar to:
jj 0.28.0
Before doing anything else, set your name and email so commits are attributed correctly:
jj config set --user user.name "Your Name"
jj config set --user user.email "you@example.com"
Getting Started with Jujutsu
Starting a Repository
You can begin a brand-new project or, more commonly, adopt Jujutsu inside an existing Git repository. The --colocate flag keeps a normal .git directory alongside jj, so both tools work side by side:
# Use jj inside an existing Git repository
cd my-existing-repo
jj git init --colocate
# Or start a completely new project
mkdir new-project && cd new-project
jj git init
You can also clone a remote directly:
jj git clone https://github.com/owner/repo.git
The Everyday Cycle
There is no staging area. You edit files, and your working copy is already a commit. Describe it and start the next one:
# See what has changed
jj st
# View the change graph
jj log
# Give the current change a message
jj describe -m "Add login form validation"
# Start a new change on top of the current one
jj new
jj new finalises the current change and opens a fresh working-copy commit, so you move forward one logical change at a time.
Editing History
Because every change is a commit, rewriting history is routine and safe:
# Split the current change into two
jj split
# Squash the current change into its parent
jj squash
# Move a change onto a different base
jj rebase -d main
# Undo the last operation, whatever it was
jj undo
The operation log underpins all of this. Inspect it with jj op log and restore an earlier state with jj op restore <id>.
Bookmarks and Pushing to Git
Jujutsu does not require a named branch for every change. When you are ready to publish, attach a bookmark (Jujutsu’s term for a Git branch) and push:
# Create a bookmark pointing at the current change
jj bookmark create my-feature
# Push it to the Git remote
jj git push --bookmark my-feature
# Fetch updates from the remote
jj git fetch
Anyone using plain Git sees my-feature as an ordinary branch.
Selecting Commits with Revsets
Revsets are a compact query language for choosing commits, used by many commands:
# Show only your own changes not yet on main
jj log -r 'mine() & ~::main'
# Describe a specific commit by its change id
jj describe -r abcde -m "Refine error handling"
Keeping Jujutsu Updated
Because Jujutsu came from the repository, updates are part of routine maintenance:
sudo apt update && sudo apt upgrade
Other Tools from deb.griffo.io
The repository packages several tools that complement a version-control workflow:
- lazygit - A terminal UI for Git that pairs well with a colocated jj repo.
- helix - A modal editor that makes a great
$EDITORfor commit messages. - fzf - A fuzzy finder for quickly locating files and revisions.
- zellij - A terminal multiplexer for juggling multiple working views.
Troubleshooting
GPG or Key Errors
If APT reports the repository is not signed, re-add the key:
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Package Not Found
If apt install jujutsu cannot find the package:
- Run
sudo apt updateagain to refresh the index. - Confirm your Debian release is supported (Bookworm, Trixie, or Sid).
- Inspect the sources entry:
cat /etc/apt/sources.list.d/deb.griffo.io.list
Git Tools Do Not See My Changes
If you initialised without --colocate, there is no visible .git directory for Git commands to use. Either run Git operations through jj git, or re-initialise with colocation to keep both tools in sync:
jj git init --colocate
Remember, too, that unpushed changes only reach the remote after jj git push.
Uninstalling
To remove Jujutsu:
sudo apt remove jujutsu
To remove the repository as well:
sudo rm -f /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Conclusion
Jujutsu keeps everything you value about the Git ecosystem while replacing the parts that cause friction: no staging area, safe and undoable history editing, and conflicts you can resolve on your own schedule. On Debian, the deb.griffo.io repository is the easiest way to install a current build and keep it aligned with your system updates.
Colocate it into a repository you already have, and you can try Jujutsu without giving up Git for a single moment.
Resources
Disclaimer: The deb.griffo.io repository is an unofficial community project and is not affiliated with the official Debian or Ubuntu projects, or with the upstream Jujutsu project.