Tij
Text-mode Interface for Jujutsu - A TUI for the Jujutsu version control system, inspired by tig.
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)
&&
# From crates.io
# From source
&&
Requirements: Jujutsu in PATH (Homebrew installs it automatically)
Quick Start
Press ? for help, q to quit.
Features
| Area | Features |
|---|---|
| Views | Log (with split-pane preview) / Diff / Status / Help (with / search) / Operation History / Blame (with Log jump) / Bookmark / Evolog (evolution history) |
| 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 |
| Conflict Resolution | Resolve List View / :ours / :theirs / External merge tool / Conflict jump |
| Recovery | Undo / 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) |
| 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:
- Press
r, typeall(), Enter - Or set in
~/.jjconfig.toml:[] = "all()"
Development
Test categories: Unit (632), Integration (86), Snapshot (20), Property-based (15)
Acknowledgments
License
MIT