Skip to main content
Settings
Search
Appearance
Theme Mode
About
Jekyll v3.10.0
Environment Production
Last Build
2026-07-03 02:47 UTC
Current Environment Production
Build Time Jul 03, 02:47
Jekyll v3.10.0
Build env (JEKYLL_ENV) production
Quick Links
Page Location
Page Info
Layout article
Collection tools
Path _tools/delta-git-diff-honest-review.md
URL /tools/delta-git-diff-honest-review/
Date 2026-07-01
Theme Skin
SVG Backgrounds
Layer Opacity
0.6
0.04
0.08

delta: the honest review

Verdict: install it and never read a plain git diff again — but two things will trip you before it does any good. The package you want is not called delta, and delta isn’t a command you run, it’s a pager you wire into ~/.gitconfig with two separate keys. delta is a syntax-highlighting pager for git diff, git log, git show, and git blame: line numbers, real language highlighting, side-by-side columns, and word-level change marking. It’s the git-diff member of the same modern-CLI family we’ve reviewed piece by piece — ripgrep for grep, fd for find, bat for cat, eza for ls. It pairs directly with our git alias starter pack. We ran everything below for real, and the two traps are in the box on purpose.

delta is free and open source (MIT). We have no relationship with the project and nothing to sell. The dealbreaker here isn’t price or telemetry — it’s that the install line and the setup each have exactly one sharp edge, and if you hit them cold you’ll conclude the tool is broken when nothing is wrong but the setup.

Trap one: apt install delta gives you the wrong delta

Copy the obvious install line and Debian/Ubuntu hands you a completely different program — one from 2006 that has nothing to do with git:

$ apt-cache show delta
Package: delta
Version: 2006.08.03-13
Description-en: heuristic minimizer of interesting files

$ apt-cache show git-delta
Package: git-delta
Version: 0.16.5-5
Description-en: syntax-highlighting pager for git, diff, and grep output

The package literally named delta is a nineteen-year-old test-case minimizer. And it’s a nastier trap than the fdfind/batcat renames we’ve documented before, because it doesn’t even leave you a delta command to be confused by — it ships three other binaries:

$ dpkg-deb -c delta_2006.08.03-13_amd64.deb | grep bin/
-rwxr-xr-x root/root  ./usr/bin/multidelta
-rwxr-xr-x root/root  ./usr/bin/singledelta
-rwxr-xr-x root/root  ./usr/bin/topformflat

So the failure mode is: you apt install delta, type delta, get command not found, and go in a circle assuming the install failed. It didn’t — you installed the wrong project. The one you want is git-delta:

$ sudo apt install git-delta
$ dpkg -L git-delta | grep bin/
/usr/bin/delta
$ delta --version
delta 0.16.5

On macOS this doesn’t bite — brew install git-delta and the command is delta. It’s the apt line that lies. First rule: the package is git-delta, the command is delta.

Trap two: delta is config, not a command

The second surprise is that you don’t use delta directly — you tell git to pipe through it. Two separate gitconfig keys, because git has two separate diff paths, and setting one leaves the other exactly as ugly as before:

# ~/.gitconfig
[core]
    pager = delta                       # git diff / log / show
[interactive]
    diffFilter = delta --color-only     # git add -p / git add -i
[delta]
    navigate = true                     # n / N to jump between files
    side-by-side = true
[merge]
    conflictStyle = zdiff3              # better conflict markers, unrelated but worth it

Miss the second key and git add -p — the interactive stage-by-hunk command — keeps showing you a raw, unhighlighted diff while everything else is pretty. We proved the two are independent by setting only the first:

$ git config core.pager delta
$ git config --get core.pager
delta
$ git config --get interactive.diffFilter
(unset -> git add -p is still raw)

Two keys, not one. Set both on day one or you’ll spend a week wondering why staging hunks still looks like 2015.

What you actually get

Wire it up and a plain four-line change turns into this (colors stripped so it pastes; in your terminal the changed word is highlighted):

$ git diff | delta --side-by-side --width=80

poem.txt
────────────────────────────────────────────────────────────────────────────────
│  1 │line one                          │  1 │line one
│  2 │line two                          │  2 │line two changed
│  3 │line three                        │  3 │line three
│  4 │line four                         │  4 │line four
│    │                                  │  5 │line five

Line numbers on both sides, a real two-column view, and — on a color terminal — the word “changed” highlighted rather than the whole line flagged. For reviewing anything longer than a one-liner this is the entire pitch, and it’s a good one.

The good surprise: it doesn’t break your scripts

Here’s the part that could have been a dealbreaker and isn’t. git only invokes a pager when its output is a real terminal. Pipe a diff into anything — a script, a file, CI — and git skips delta automatically and emits the plain diff a machine can parse:

$ git -c core.pager=delta diff | cat
diff --git a/poem.txt b/poem.txt
index 53f1df8..a314700 100644
--- a/poem.txt
+++ b/poem.txt
@@ -1,4 +1,5 @@
 line one
-line two
+line two changed

Same behavior that keeps bat from wrecking pipes: fancy for your eyes, plain for the machine, no GIT_PAGER=cat dance in your scripts. You can turn it on globally and your automation never notices.

The gotcha we’d want to know about: color IS the signal

delta’s default (non-side-by-side) view drops the leading +/- and encodes added-vs-removed purely in color. That’s cleaner to look at — until the color goes away. Strip it (copy-paste out of your terminal, pipe through a color-blind filter, read it over a connection that ate the escape codes) and the two versions of the line are indistinguishable:

$ git diff | delta --width=72   # then ANSI stripped, as you might copy-paste it
poem.txt
────────────────────────────────────────────────────────────────────────
line one
line two
line two changed
line three
line four
line five

Which line was removed and which was added? Without the color, you can’t tell — line two and line two changed sit there as equals. This is real: we captured it. If you paste diffs into tickets, chat, or code review, the side-by-side view (with its columns and line numbers) survives the color loss and the default view does not. Turn on side-by-side = true and this mostly stops mattering. One more small thing while we’re being precise: delta parses unified diff (git diff, diff -u) — hand it old ed-style diff output and it passes the text through untouched.

What it costs and the free alternative

It costs nothing — MIT, no account, no telemetry. The free alternative is already configured: git’s built-in --color diff, or diff-so-fancy if you want prettifying without a Rust binary. If you read one diff a week, plain git diff is fine and delta is a luxury. If you review code all day, the line numbers, word-level highlighting, and n/N file navigation earn their config in an afternoon.

What made us close the tab

Nothing — delta is staying in our ~/.gitconfig. The honest caveats, in the order they’ll bite:

  • The apt package is git-delta, not delta. apt install delta installs a 2006 test-case minimizer that doesn’t even give you a delta command. On macOS it’s brew install git-delta.
  • It’s two gitconfig keys, not one. core.pager fixes git diff/log/show; interactive.diffFilter = delta --color-only fixes git add -p. Set both.
  • The default view marks changes with color only. Strip the color and you can’t tell added from removed. Turn on side-by-side if you ever paste diffs somewhere colorless.

When it goes wrong: if delta prints command not found, you installed the wrong package — sudo apt install git-delta and try again. If your diffs are still ugly somewhere, it’s the path you didn’t configure: git diff reads core.pager, git add -p reads interactive.diffFilter, and they’re independent. Wire both keys, flip on side-by-side, and delta gets out of the way and makes git legible.