eliaskc/kajji
{ "createdAt": "2025-12-30T19:10:19Z", "defaultBranch": "main", "description": "A simple terminal interface for jj", "fullName": "eliaskc/kajji", "homepage": "", "language": "TypeScript", "name": "kajji", "pushedAt": "2026-07-13T00:29:00Z", "stargazersCount": 8, "topics": [], "updatedAt": "2026-07-13T00:29:04Z", "url": "https://github.com/eliaskc/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.
![normal mode]!(./assets/normal-mode.png)
Installation
Section titled “Installation”# recommended if you use Homebrewbrew install eliaskc/tap/kajji
# standalone binary installer, no package manager requiredcurl -fsSL https://kajji.sh/install.sh | bash
# or via JavaScript package managernpm install -g kajjibun install -g kajjipnpm add -g kajjiyarn global add kajji
# or run directly without installingnpx kajjibunx kajjiTo remove kajji and its config/data:
kajji uninstall # interactive: removes config, data, and the binarykajji uninstall --dry-run # show what would be removedkajji uninstall --keep-config --keep-datakajji uninstall --force # skip the confirmation promptFrom source
Section titled “From source”Requirements: Bun
git clone https://github.com/eliaskc/kajji.gitcd kajjibun installbun devRun kajji in any jj repository:
kajji # current directorykajji /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
Section titled “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
Kajji includes a small CLI for scripting and agent workflows:
# List changes with addressable hunk IDskajji changes -r @
# Commentskajji 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 h1kajji comment delete -r @ --file src/App.tsx --line 12kajji comment delete -r @ --file src/App.tsxkajji comment delete -r @ --all -yConfiguration
Section titled “Configuration”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 panegitHooksPath: default Git-compatible hooks directory to check forpre-commitbeforejj.new(.git/hooksenables standard per-repo Git hooks in every repo)repos: repo-specificgitHooksPathand operation hooks keyed by repository pathwhatsNewDisabled/autoUpdatesDisabled: update notification controls
Keybindings
Section titled “Keybindings”Default keybindings are contextual. Press ? or ctrl+p in kajji for the full command list available in the current panel.
Global and navigation
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “Built With”- OpenTUI + SolidJS - TypeScript TUI framework
- Bun - JavaScript runtime and build tooling
- jj (Jujutsu) - Git-compatible VCS
Related Projects
Section titled “Related Projects”License
Section titled “License”MIT