TUI for Jujutsu/jj. Built in Rust with Ratatui. Interacts with jj CLI.
lazyjj.mp4
- Log
- Scroll through the jj log and view change details in side panel
- Create new changes from selected change with
n - Edit changes with
e/E - Desribe changes with
d - Abandon changes with
a - Toggle between color words and git diff with
p - See different revset with
r - Set a bookmark to selected change with
b - Fetch/push with
f/p - Squash current changes to selected change with
s/S
- Files
- View files in current change and diff in side panel
- See a change's files from the log tab with
Enter - View conflicts list in current change
- Toggle between color words and git diff with
w - Untrack file with
x
- Bookmarks
- View list of bookmarks, including from all remotes with
a - Create with
c, rename withr, delete withd, forget withf - Track bookmarks with
t, untrack bookmarks withT - Create new change with
n, edit change withe/E
- View list of bookmarks, including from all remotes with
- Command log: View every command lazyjj executes
- Config: Configure lazyjj with your jj config
- Command box: Run jj commands directly in lazyjj with
: - Help: See all key mappings with
?
Make sure you have jj installed first.
- With
cargo binstall:cargo binstall lazyjj - With
cargo install:cargo install lazyjj --locked(may take a few moments to compile) - With pre-built binaries: View releases
- For Arch Linux:
pacman -S lazyjj
To build and install a pre-release version: cargo install --git https://github.com/Cretezy/lazyjj.git --locked
You can optionally configure the following options through your jj config:
lazyjj.highlight-color: Changes the highlight color. Can use named colors. Defaults to#323264lazyjj.diff-format: Change the default diff format. Can becolor-wordsorgit. Defaults tocolor_words- If
lazyjj.diff-formatis not set butui.diff.formatis, the latter will be used
- If
lazyjj.diff-tool: Specify which diff tool to use by default- If
lazyjj.diff-toolis not set butui.diff.toolis, the latter will be used
- If
lazyjj.bookmark-prefix: Change the bookmark name prefix for generated bookmark names. Defaults topush-- If
lazyjj.bookmark-prefixis not set butgit.push-bookmark-prefixis, the latter will be used
- If
lazyjj.layout: Changes the layout of the main and details panel. Can behorizontal(default) orverticallazyjj.layout-percent: Changes the layout split of the main page. Should be number between 0 and 100. Defaults to50
Example: jj config set --user lazyjj.diff-format "color-words" (for storing in user config file, repo config is also supported)
To start lazyjj for the repository in the current directory: lazyjj
To use a different repository: lazyjj --path ~/path/to/repo
To start with a different default revset: lazyjj -r '::@'
See all key mappings for the current tab with ?.
- Quit with
q - Change tab with
1/2/3or withh/l - Scrolling in main panel
- Scroll down/up by one line with
j/kor down/up arrow - Scroll down/up by half page with
J/Kor down/up arrow
- Scroll down/up by one line with
- Scrolling in details panel
- Scroll down/up by one line with
Ctrl+e/Ctrl+y - Scroll down/up by a half page with
Ctrl+d/Ctrl+u - Scroll down/up by a full page with
Ctrl+f/Ctrl+b
- Scroll down/up by one line with
- Open a command popup to run jj commands using
:(jj prefix not required, e.g. writenew maininstead ofjj new main)
- Select current change with
@ - View change files in files tab with
Enter - Display different revset with
r(jj log -r) - Change details panel diff format between color words (default) and Git (and diff tool if set) with
w - Toggle details panel wrapping with
W - Create new change after highlighted change with
n(jj new)- Create new change and describe with
N(jj new -m)
- Create new change and describe with
- Edit highlighted change with
e(jj edit)- Edit highlighted change ignoring immutability with
E(jj edit --ignore-immutable)
- Edit highlighted change ignoring immutability with
- Abandon a change with
a(jj abandon) - Describe the highlighted change with
d(jj describe)- Save with
Ctrl+s - Cancel with
Esc
- Save with
- Set a bookmark to the highlighted change with
b(jj bookmark set)- Scroll in bookmark list with
j/k - Create a new bookmark with
c - Use auto-generated name with
g
- Scroll in bookmark list with
- Squash current changes (in @) to the selected change with
s(jj squash)- Squash current changes to the selected change ignoring immutability with
S(jj squash --ignore-immutable)
- Squash current changes to the selected change ignoring immutability with
- Git fetch with
f(jj git fetch)- Git fetch all remotes with
F(jj git fetch --all-remotes)
- Git fetch all remotes with
- Git push with
p(jj git push)- Git push all bookmarks with
P(jj git push --all) - Use
Ctrl+porCtrl+Pto include pushing new bookmarks (--allow-new)
- Git push all bookmarks with
- Select current change with
@ - Change details panel diff format between color words (default) and Git (and diff tool if set) with
w - Toggle details panel wrapping with
W
- Show bookmarks with all remotes with
a(jj bookmark list --all) - Create a bookmark with
c(jj bookmark create) - Rename a bookmark with
r(jj bookmark rename) - Delete a bookmark with
d(jj bookmark delete) - Forget a bookmark with
f(jj bookmark forget) - Track a bookmark with
t(only works for bookmarks with remotes) (jj bookmark track) - Untrack a bookmark with
T(only works for bookmarks with remotes) (jj bookmark untrack) - Change details panel diff format between color words (default) and Git (and diff tool if set) with
w - Toggle details panel wrapping with
W - Create a new change after the highlighted bookmark's change with
n(jj new)- Create a new change and describe with
N(jj new -m)
- Create a new change and describe with
- Edit the highlighted bookmark's change with
e(jj edit)- Edit the highlighted bookmark's change ignoring immutability with
E(jj edit --ignore-immutable)
- Edit the highlighted bookmark's change ignoring immutability with
- Select latest command with
@ - Toggle details panel wrapping with
W
Keys can be configured
[lazyjj.keybinds.log_tab]
save = "ctrl+s"See more in keybindings.md
- Install Rust and
- Clone repository
- Run with
cargo run - Build with
cargo build --release(output intarget/release) - You can point it to another jj repo with
--path:cargo run -- --path ~/other-repo
lazyjj has 2 debugging tools:
- Logging: Enabled by setting
LAZYJJ_LOG=1when running. Produces alazyjj.loglog file - Tracing: Enabled by setting
LAZYJJ_TRACE=1when running. Producestrace-*.jsonChrome trace file, forchrome://tracingor ui.perfetto.dev