dlvhdr/diffnav
A git diff pager based on delta but with a file tree, à la GitHub.
{ "createdAt": "2024-09-18T14:41:16Z", "defaultBranch": "main", "description": "A git diff pager based on delta but with a file tree, à la GitHub.", "fullName": "dlvhdr/diffnav", "homepage": "", "language": "Go", "name": "diffnav", "pushedAt": "2025-09-22T10:14:16Z", "stargazersCount": 418, "topics": [ "cli", "delta", "diff", "git", "github", "golang", "tui" ], "updatedAt": "2025-11-25T09:51:47Z", "url": "https://github.com/dlvhdr/diffnav"}diffnav
Section titled “diffnav”A git diff pager based on delta but with a file tree, à la GitHub.
[!CAUTION] This is early in development, bugs are to be expected.
Feel free to open issues.
Demo
Installation
Section titled “Installation”Homebrew:
brew install dlvhdr/formulae/diffnavGo:
go install github.com/dlvhdr/diffnav@latest[!NOTE] To get the icons to render properly you should download and install a Nerd font from https://www.nerdfonts.com/. Then, select that font as your font for the terminal.
You can install these with brew as well:
brew install --cask font-<FONT NAME>-nerd-font
Pipe into diffnav
Section titled “Pipe into diffnav”git diff | diffnavgh pr diff https://github.com/dlvhdr/gh-dash/pull/447 | diffnav
Set up as global git diff pager
Section titled “Set up as global git diff pager”git config --global pager.diff diffnavConfiguration
Section titled “Configuration”- Currently you can configure
diffnavonly through delta so check out their docs. - If you want the exact configuration I’m using - it can be found here.
| Key | Description |
|---|---|
| j | Next file |
| k | Previous file |
| Ctrl-d | Scroll the diff down |
| Ctrl-u | Scroll the diff up |
| e | Toggle the file tree |
| t | Search/go-to file |
| y | Copy file path |
| q | Quit |
Under the hood
Section titled “Under the hood”diffnav uses:
- Bubble Tea for the TUI
deltafor viewing the diffed file
Screenshots use:
- kitty for the terminal
- tokyonight for the color scheme
- CommitMono for the font