kajji
v0.14.1
Published
A terminal UI for Jujutsu: the rudder for your jj
Downloads
161
Maintainers
Readme
kajji
A terminal UI for jj / Jujutsu: navigate changes, inspect polished diffs, and run common jj workflows with ease and speed.
Kajji gives jj a fast, keyboard-first interface with a commit graph, file tree, operation log, bookmark management, GitHub helpers, revset filtering, and custom diff rendering with syntax highlighting, word-level emphasis, split/unified layouts, wrapping, and binary-file handling.

Installation
# recommended if you use Homebrew
brew install eliaskc/tap/kajji
# standalone binary installer, no package manager required
curl -fsSL https://kajji.sh/install.sh | bash
# or via JavaScript package manager
npm install -g kajji
bun install -g kajji
pnpm add -g kajji
yarn global add kajji
# or run directly without installing
npx kajji
bunx kajjiTo remove kajji and its config/data:
kajji uninstall # interactive: removes config, data, and the binary
kajji uninstall --dry-run # show what would be removed
kajji uninstall --keep-config --keep-data
kajji uninstall --force # skip the confirmation promptFrom source
Requirements: Bun
git clone https://github.com/eliaskc/kajji.git
cd kajji
bun install
bun devUsage
Run kajji in any jj repository:
kajji # current directory
kajji /path/to/repo # specific directoryKajji has two main viewing modes:
- Normal mode keeps the log, bookmarks, detail, and command log visible.
- Diff focus mode gives the detail pane more space for side-by-side diffs.
Toggle between them with ctrl+x.
Features
jj workflows
- Commit log with graph and revset filtering
- File view with tree/list toggle, editor launching, and discard for working-copy files
- New, edit, describe, squash, abandon, duplicate, rebase, split, resolve
- Undo, redo, operation log, and restore
- Bookmark create/delete/rename/forget/set/move plus remote-only filtering
- Git fetch/push menus
- Open commits and PRs on GitHub
- Recent repository switcher
Diff viewing
- Custom unified and split diff renderers
- Syntax highlighting and word-level change emphasis
- Line wrapping and horizontal scrolling
- Hunk and file navigation
- Optional jj formatter output
- Binary file detection
TUI polish
- Vim-style navigation plus mouse support
- Focusable panels and tabs
- Command palette with fuzzy search (
?/ctrl+p) - Context-aware status hints
- JSONC config with schema autocomplete
- Automatic update notifications
CLI
Kajji includes a small CLI for scripting and agent workflows:
# List changes with addressable hunk IDs
kajji changes -r @
# Comments
kajji comment list -r @
kajji comment set -r @ --hunk h1 -m "note"
kajji comment set -r @ --file src/App.tsx --line 12 -m "note"
kajji comment delete -r @ --hunk h1
kajji comment delete -r @ --file src/App.tsx --line 12
kajji comment delete -r @ --file src/App.tsx
kajji comment delete -r @ --all -yConfiguration
Kajji reads JSONC config from ~/.config/kajji/config.json (comments and trailing commas are supported).
- Open it from the command palette (
?) withopen config - Changes made through
open configare reloaded when you return to kajji - The default config includes
$schema: "https://kajji.sh/schema.json"for editor autocomplete
Common settings include:
ui.themeMode:system,dark, orlightui.syntaxTheme.dark/ui.syntaxTheme.light: syntax highlighting theme namesui.showFileTree: show files as a tree or flat listdiff.layout:auto,unified, orsplitdiff.autoSwitchWidth: terminal width whereautoswitches to split viewdiff.wrap: wrap long diff linesdiff.useJjFormatter: use jj's configured diff formatter in the detail panehooks: commands to run before specific operationswhatsNewDisabled/autoUpdatesDisabled: update notification controls
Keybindings
Default keybindings are contextual. Press ? or ctrl+p in kajji for the full command list available in the current panel.
Global and navigation
| Key | Action |
| ---------------------- | --------------------------------------- |
| q | Quit |
| ? / ctrl+p | Command palette |
| Tab / shift+Tab | Next / previous panel |
| 1 / 2 / 3 / 4 | Focus log / refs / detail / command log |
| j / k or ↓ / ↑ | Move down / up |
| ctrl+d / ctrl+u | Page down / up |
| Enter | Open/drill into the selected item |
| Escape | Back, close, or clear filter |
| [ / ] or h / l | Previous / next tab |
| / | Filter revisions or bookmarks |
| ctrl+r | Refresh |
| ctrl+x | Toggle normal/diff focus mode |
| ctrl+o | Open recent repository |
jj operations
| Key | Action |
| --------- | ------------------------------------------------------------------------------------------ |
| n / N | New change / new menu |
| e | Edit change, or open selected file in editor from file view |
| E | Open all files in editor from file view |
| d | Describe, delete bookmark, restore operation, or discard file changes depending on context |
| s | Squash |
| a | Abandon |
| r | Rebase, or rename bookmark in refs |
| S | Split |
| D | Duplicate |
| R | Resolve conflicts, or toggle remote-only bookmarks in refs |
| u / U | Undo / redo |
| f / F | Git fetch / fetch menu |
| p / P | Git push / push menu |
Diff and files
| Key | Action |
| ---------------------- | ------------------------------------------------------------- |
| - | Toggle file tree/list in file view, or jj formatter in detail |
| v | Toggle split/unified diff |
| w | Toggle diff line wrapping |
| h / l or ← / → | Horizontal scroll when wrapping is off |
| [ / ] | Previous / next hunk in custom diff view |
| { / } | Previous / next file in custom diff view |
Bookmarks and GitHub
| Key | Action |
| --------- | -------------------------------------------------- |
| c | Create bookmark |
| d | Delete bookmark |
| r | Rename bookmark |
| x | Forget bookmark locally |
| b | Set bookmark on selected revision |
| m | Move bookmark |
| o / O | Open selected revision on GitHub (prompt / direct) |
| o | Open selected bookmark's commit or PR on GitHub |
Built With
- OpenTUI + SolidJS - TypeScript TUI framework
- Bun - JavaScript runtime and build tooling
- jj (Jujutsu) - Git-compatible VCS
Related Projects
License
MIT
