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

bin+lib tij

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

54 releases

Uses new Rust 2024

new 0.4.13 Mar 6, 2026
0.4.12 Mar 2, 2026
0.4.10 Feb 27, 2026
0.3.39 Feb 18, 2026
0.1.0 Feb 3, 2026

#583 in Command line utilities

MIT license

1MB
22K 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 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 / 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
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) / 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 / Text search / Adaptive status bar / Dynamic context-aware hints / --limit 200 default (unlimited with revset)

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 (712), Integration (86), Snapshot (20), Property-based (15)

Acknowledgments

License

MIT

Dependencies

~15–22MB
~412K SLoC