#version-control #jj #tui #git #jujutsu

bin+lib tij

Text-mode interface for Jujutsu - a TUI for jj version control

68 releases

Uses new Rust 2024

0.4.27 May 8, 2026
0.4.26 May 8, 2026
0.4.24 Apr 10, 2026
0.4.22 Mar 25, 2026
0.1.0 Feb 3, 2026

#574 in Command line utilities

MIT license

1MB
24K SLoC

Tij

Text-mode Interface for Jujutsu - A TUI for the Jujutsu version control system, inspired by tig.

Rust Crates.io

Why Tij?

Jujutsu (jj) makes Git's painful operations easy and safe. Tij brings that power to a visual interface:

Git's Pain jj's Solution Tij's UI
git stash management Always-committed working copy One-key context switching
git rebase -i complexity jj edit + auto-rebase Visual history editing
git reflog recovery jj undo / jj op log Operation history view
Commit splitting jj split Integrated diff editor
Conflicts block work Keep conflicts, continue working Visual conflict status

Installation

# Homebrew (macOS/Linux)
brew tap nakamura-shuta/tij && brew install tij

# From crates.io
cargo install tij

# From source
git clone https://github.com/nakamura-shuta/tij.git
cd tij && cargo install --path .

Requirements: Jujutsu >= 0.40.0 in PATH (Homebrew installs it automatically)

Quick Start

cd /path/to/jj-repo
tij

Press ? for help, q to quit.

Features

Area Features
Views Log (with split-pane preview) / Diff / Status / Help (with / search + synonym expansion) / Operation History / Blame (with Log jump) / Bookmark / Tag / Workspace (w, list/add/forget/rename with <name>@ markers in Log) / Evolog (evolution history) / Command History (H, shows executed jj commands with OK/NG status)
History Editing Describe (d quick edit / Ctrl+E external editor) / Edit / New / New from selected / Commit / Squash / Abandon / Split / Diffedit / Rebase (revision/source/branch/insert-after/insert-before, with --skip-emptied toggle and revset input for multi-revision rebase) / Absorb / Duplicate / Revert / Simplify Parents / Parallelize / Fix / Arrange (O, interactive commit graph rearrangement) / Metaedit (v, edit author/change-id/timestamp)
Conflict Resolution Resolve List View / :ours / :theirs / External merge tool / Conflict jump
Recovery Undo (shows undone operation detail) / Redo / Operation Restore / Restore file / Restore all
Bookmarks Create / Move to @ (with backward detection) / Delete (multi-select) / Rename / Forget / Track / Untrack / Jump / Bookmark View (M)
Tags Create on @ / Delete / Jump (with revset expansion) / Tag View (t)
Git Integration Fetch (multi-remote selection, branch-specific fetch, tracked-only fetch) / Push (with dry-run preview, force push warnings, protected bookmark detection, multi-remote selection, push-by-change, push-by-revision, bulk options: --all/--tracked/--deleted, auto-retry for private commits and empty descriptions)
Navigation Next/Prev (]/[ to move @ through history) / Reversed log order (V)
Diff Compare two revisions (=, jj diff --from --to) / Interdiff (I, jj interdiff --from --to: compare patches between revisions) / Bisect (W, jj bisect run: binary search for bad revision with command or interactive shell) / Display mode cycle (m: color-words → stat → git) / Copy to clipboard (y full / Y diff-only) / Export to .patch file (w, git unified format)
Usability Revset filtering (with count + truncation indicator) / Text search / Adaptive status bar / Dynamic context-aware hints / --limit 200 for all queries / Startup jj version check (>= 0.40)

Revset Examples

Press r to filter commits:

all()                    # Show all commits
@-..@                    # Recent commits
author(email)            # By author
ancestors(main)          # Branch history

See jj revset docs for more.

Default Display

Tij uses jj's default revset (recent/relevant commits). To see all:

  1. Press r, type all(), Enter
  2. Or set in ~/.jjconfig.toml:
    [revsets]
    log = "all()"
    

Development

cargo test                    # All tests (unit + integration)
cargo test --lib              # Unit tests only
cargo test --tests            # Integration tests only
cargo insta test              # Snapshot tests

Test categories: Unit (741), Integration (86), Snapshot (20), Property-based (15)

Acknowledgments

License

MIT

Dependencies

~15–22MB
~411K SLoC