ripdiff 0.1.0

Terminal UI for watching and reviewing agent progress
ripdiff-0.1.0 is not a library.
Visit the last successful build: ripdiff-0.2.0
            ███                █████  ███     ██████     ██████ 
           ░░░                ░░███  ░░░     ███░░███   ███░░███
 ████████  ████  ████████   ███████  ████   ░███ ░░░   ░███ ░░░ 
░░███░░███░░███ ░░███░░███ ███░░███ ░░███  ███████    ███████   
 ░███ ░░░  ░███  ░███ ░███░███ ░███  ░███ ░░░███░    ░░░███░    
 ░███      ░███  ░███ ░███░███ ░███  ░███   ░███       ░███     
 █████     █████ ░███████ ░░████████ █████  █████      █████    
░░░░░     ░░░░░  ░███░░░   ░░░░░░░░ ░░░░░  ░░░░░      ░░░░░     
                 ░███                                           
                 █████                                          
                ░░░░░

A terminal UI for watching and reviewing agent progress, designed for a tmux panel workflow where you monitor agent changes on one side while working on the other.

Uses difftastic for structural, syntax-aware diffs with ANSI color output. Falls back to plain git diff if difft is not installed.

Install

Install from crates.io

cargo install ripdiff

This installs ripdiff into ~/.cargo/bin/.

Install from source (local checkout)

cargo install --path .

For best results, install difftastic:

cargo install difftastic

Publishing and release process

ripdiff follows Semantic Versioning (MAJOR.MINOR.PATCH):

  • PATCH for bug fixes and internal improvements.
  • MINOR for backwards-compatible features.
  • MAJOR for breaking changes.

Maintainer release checklist

  1. Bump version in Cargo.toml.
  2. Ensure CI passes (cargo fmt, cargo clippy, cargo test, cargo build).
  3. Commit and tag the release:
    git tag vX.Y.Z
    git push origin vX.Y.Z
    
  4. The GitHub Actions release workflow publishes the crate when a v* tag is pushed.

To publish from CI, set a CARGO_REGISTRY_TOKEN repository secret with a crates.io API token.

Usage

Run inside any git repo with uncommitted changes:

ripdiff

Or point it at a specific repo:

ripdiff --path /some/repo

Key Bindings

Global

Key Action
Tab / Shift-Tab Toggle focus between panels
h / ? Open or close help
t Toggle between inline and side-by-side diff
r Force refresh
q / Esc Quit

File List Panel

Key Action
j / Move file selection down
k / Move file selection up
Switch to diff panel
gg / G Jump to top / bottom of file list
s / S Toggle selected file staged / toggle all files staged
Space e Hide / show file list sidebar
Enter Toggle diff visibility for selected file

Diff Panel

Key Action
j / Scroll down one line
k / Scroll up one line
Switch to file list
Ctrl-d / Ctrl-u Scroll half page down / up
gg / G Jump to top / bottom of diff
s / S Toggle selected file staged / toggle all files staged
] / [ Jump to next / previous hunk
Space e Hide / show file list sidebar
Enter Toggle diff visibility for selected file

Quick Test

cd $(mktemp -d)
git init && git commit --allow-empty -m "init"
echo "hello" > test.txt
git add test.txt
ripdiff

Edit a file in another terminal — the diff auto-updates within ~1 second.

Layout

  ripdiff  [repo: myproject]   main  3 files changed  mode: inline  panel: files
  M src/main.rs  +5-2 │ src/main.rs
  A src/lib.rs   +3   │
  M README.md    +1-1 │   fn main() {
  ? new_file.rs  +12  │ -     println!("old");
                      │ +     println!("new");
                      │   }
  • 25% left: file list with status indicators (M/A/D/R/?) and stage markers ( staged, unstaged, mixed)
  • 75% right: diff output with scrollbar
  • h opens a help popup with keybinding and symbol descriptions
  • Minimal borders — just a vertical divider between panels
  • Auto-refreshes on .git/index changes and every 500ms