Review and refine Git diffs before you push
Go to file
Rui Chen da342748ee
chore: add .gitignore
Signed-off-by: Rui Chen <rui@chenrui.dev>
2026-02-07 10:19:32 -05:00
.github fix: Embed version in GoReleaser builds 2026-02-07 10:18:43 -05:00
cmd/difi add: --plain non-interactive mode 2026-02-06 19:26:38 -05:00
internal Merge main into feat/fugitive-support 2026-02-06 17:06:41 -05:00
.gitignore chore: add .gitignore 2026-02-07 10:19:32 -05:00
.goreleaser.yaml fix: Embed version in GoReleaser builds 2026-02-07 10:18:43 -05:00
go.mod chore: update go.mod/go.sum 2026-02-07 10:19:13 -05:00
go.sum chore: update go.mod/go.sum 2026-02-07 10:19:13 -05:00
LICENSE Update copyright owner in LICENSE file 2026-02-01 21:13:57 -05:00
README.md Update README.md 2026-02-06 17:45:06 -05:00

difi

Review and refine Git diffs before you push

difi_demo

Why difi?

git diff shows changes. difi helps you review them.

  • Instant — Built in Go. Launches immediately with no daemon or indexing.
  • 🎨 Structured — A clean file tree and focused diffs for fast mental parsing.
  • 🧠 Editor-Aware — Jump straight to the exact line in nvim/vim to fix issues.
  • ⌨️ Keyboard-First — Navigate everything with h j k l. No mouse required.

(back to top)

Installation

Homebrew (macOS & Linux)

brew tap oug-t/difi
brew install difi

Go Install

go install github.com/oug-t/difi/cmd/difi@latest

AUR (Arch Linux)

Binary (pre-built):

pikaur -S difi-bin

Build from source:

pikaur -S difi

Manual (Linux / Windows)

  • Download the binary from Releases and add it to your $PATH.

(back to top)

Workflow

  • Run difi in any Git repository.
  • By default, it compares your current branch against main.
cd my-project
difi

(back to top)

Controls

Key Action
Tab Toggle focus between File Tree and Diff View
j / k Move cursor down / up
h / l Focus Left (Tree) / Focus Right (Diff)
e / Enter Edit file (opens editor at selected line)
? Toggle help drawer
q Quit

(back to top)

Integrations

vim-fugitive

  • The "Unix philosophy" approach: Uses the industry-standard Git wrapper to provide a robust, side-by-side editing experience.
  • Side-by-Side Editing: Instantly opens a vertical split (:Gvdiffsplit!) against the index.
  • Merge Conflicts: Automatically detects conflicts and opens a 3-way merge view for resolution.
  • Config: Add the line below to if using lazy.nvim.
{
  "tpope/vim-fugitive",
  cmd = { "Gvdiffsplit", "Git" }, -- Add this line
}

Supports vim-fugitive

difi.nvim

Get the ultimate review experience with difi.nvim.

  • Auto-Open: Instantly jumps to the file and line when you press e in the CLI.
  • Visual Diff: Renders diffs inline with familiar green/red highlights—just like reviewing a PR on GitHub.
  • Interactive Review: Restore a "deleted" line by simply removing the - marker. Discard an added line by deleting it entirely.
  • Context Aware: Automatically syncs with your difi session target.

Get difi.nvim

(back to top)

Git Integration

To use difi as a native git command (e.g., git difi), add it as an alias in your global git config:

git config --global alias.difi '!difi'

Now you can run it directly from git:

git difi

(back to top)

Contributing

git clone https://github.com/oug-t/difi
cd difi
go run cmd/difi/main.go

Contributions are especially welcome in:

  • diff.nvim rendering edge cases
  • UI polish and accessibility
  • Windows support

(back to top)

Star History

Star History Chart

(back to top)


Made with ❤️ by oug-t