Skip to content

Overview

jjui is a terminal user interface for Jujutsu (jj), a Git-compatible version control system. It wraps the most common jj workflows in an interactive, keyboard-driven interface so you can explore and manipulate your repository without memorizing command syntax.

Browse and manage revisions — the main view shows your revision graph. Move between commits, inspect diffs in the preview panel, and perform operations directly from the list.

Rebase, squash, revert, and more — interactive modes for common multi-step operations let you visually pick source and target before committing to a change. Operations include rebase, squash, absorb, split, duplicate, revert, set parents, and abandon.

Manage bookmarks and git remotes — view, create, move, delete, track, and push bookmarks. Run git fetch and git push from the git view.

Navigate history — the oplog view lets you browse every operation in the repository’s history and restore or revert to any point. The evolog view shows the evolution history of individual revisions.

Run commands inline — press : to execute a jj command or $ to run a shell command without leaving the UI. Commands are context-aware and can reference the selected revision, file, or operation.

Search and jump — fuzzy file finder, quick search across the revision list, and ace jump for instant cursor movement.

jjui is designed to be extended. Everything from key bindings to full scripted workflows can be configured:

  • config.toml — configure behavior, colors, preview settings, and log batching without writing code.
  • Key bindings — rebind any built-in action or add new ones using [[bindings]] blocks. Supports single keys, multi-key sequences, and scoped overrides.
  • Custom actions — define actions in Lua directly in config.toml or in config.lua. Actions have access to the full Lua API: run jj commands, read context, update the revset, show flash messages, open pickers, and more.
  • config.lua — programmatic setup via a setup(config) function. Register actions and bindings in code, branch on repository path, load plugins, and adjust colors at startup.
  • Themes — choose a built-in theme or override individual color keys for fine-grained control. Colors can also be set dynamically from Lua based on the repository or terminal background.
  • Plugins — Lua modules in ~/.config/jjui/plugins/ can be loaded with require and reused across configurations.

See Lua Scripting for the full API reference, or Lua Cookbook for ready-to-use examples.

Contribute Community