tij 0.3.0

Text-mode interface for Jujutsu - a TUI for jj version control
tij-0.3.0 is not a library.

Tij

Text-mode Interface for Jujutsu - A terminal user interface (TUI) for the Jujutsu version control system, inspired by tig.

Features

  • Log View: Browse commit history with DAG graph visualization
  • Diff View: View changes with syntax-highlighted diffs (added/deleted/context lines)
  • Status View: See working copy status and changed files
  • Operation History: Browse and restore to any previous jj operation
  • Undo/Redo: Safely undo and redo jj operations
  • Vim-like Navigation: Familiar keybindings (j/k, g/G, ↑/↓)
  • Revset Filtering: Filter commits using jj's powerful revset expressions
  • Search: Find commits by description, author, or bookmark name

Requirements

  • Rust 1.85+ (Edition 2024)
  • Jujutsu installed and available in PATH

Installation

From crates.io (Recommended)

cargo install tij

From Source

# Clone the repository
git clone https://github.com/nakamura-shuta/tij.git
cd tij

# Build and install
cargo install --path .

Development Build

cargo build --release

Usage

Run tij in any Jujutsu repository:

cd /path/to/jj-repo
tij

Or specify a path:

tij /path/to/jj-repo

Key Bindings

Log View

Key Action
j / Move down
k / Move up
g Go to top
G Go to bottom
Enter Open diff view
d Edit description
e Edit change (set working copy)
c Create new change
S Squash into parent
A Abandon change
x Split change (opens diff editor)
b Create bookmark
D Delete bookmark
r Revset filter
/ Search
n / N Next/prev search result
u Undo
Ctrl+R Redo
s Status view
o Operation history
Tab Switch view
? Help
q Quit

Diff View

Key Action
j / Scroll down
k / Scroll up
d / u Half page down/up
g / G Top/bottom
] / [ Next/prev file
q Back

Status View

Key Action
j / Move down
k / Move up
Enter Open diff for file
C Commit changes
Tab Switch view
q Quit

Operation History View

Key Action
j / Move down
k / Move up
g / G Top/bottom
Enter Restore to operation
q Back

Input Mode (Revset/Search)

Key Action
Enter Submit
Esc Cancel
Backspace Delete character

Revset Examples

Filter commits using jj's revset expressions:

# Show all commits
all()

# Show recent commits
@-..@

# Show commits by author
author(email)

# Show commits on a branch
ancestors(bookmark_name)

# Combine expressions
ancestors(main) & author(me)

See jj revset documentation for more.

Default Display Behavior

Tij respects jj's default revset configuration. By default, jj shows only "relevant" commits:

  • Current working copy (@)
  • Recent mutable commits
  • Trunk branch (main/master)

This means older commits and unrelated branches may not appear in the initial view. To see all commits:

  1. Press r to open revset input
  2. Enter all() and press Enter

To permanently change the default, add to ~/.jjconfig.toml:

[revsets]
log = "all()"

Development

# Run with cargo
cargo run

# Run tests
cargo test

# Run linter
cargo clippy

# Format code
cargo fmt

Acknowledgments

  • Jujutsu - The modern version control system
  • tig - Text-mode interface for Git (inspiration)
  • ratatui - Rust TUI framework