๐ŸŽฉ diff-so-fancy [](https://circleci.com/gh/so-fancy/diff-so-fancy) [](https://ci.appveyor.com/project/stevemao/diff-so-fancy/branch/master)

April 27, 2026 ยท View on GitHub

diff-so-fancy makes your diffs human readable instead of machine readable. This helps improve code quality and helps you spot defects faster.

๐Ÿ–ผ๏ธ Screenshot

Vanilla git diff vs git and diff-so-fancy

diff-highlight vs diff-so-fancy

๐Ÿ“ฆ Install

Simply copy the diff-so-fancy script from the latest Github release into your $PATH and you're done. Alternately to test development features you can clone this repo and then put the diff-so-fancy script (symlink will work) into your $PATH. The lib/ directory will need to be kept relative to the core script.

diff-so-fancy is also available from the NPM registry, brew, Fedora, in the Arch extra repo, and as ppa:aos for Debian/Ubuntu Linux.

Issues relating to packaging ("installation does not work", "version is out of date", etc.) should be directed to those packages' repositories/issue trackers where applicable.

โœจ Usage

Git

Configure git to use diff-so-fancy for all diff output:

git config --global core.pager "diff-so-fancy | less --tabs=4 -RF"
git config --global interactive.diffFilter "diff-so-fancy --patch"

Diff

Use -u with diff for unified output, and pipe the output to diff-so-fancy:

diff -u file_a file_b | diff-so-fancy

We also support recursive mode with -r or --recursive

diff --recursive -u /path/folder_a /path/folder_b | diff-so-fancy

โš’๏ธ Options

markEmptyLines

Colorize the first block of an empty line. (Default: true)

git config --bool --global diff-so-fancy.markEmptyLines false

changeHunkIndicators

Simplify Git header chunks to a human readable format. (Default: true)

git config --bool --global diff-so-fancy.changeHunkIndicators false

stripLeadingSymbols

Remove the + or - symbols at start of each diff line. (Default: true)

git config --bool --global diff-so-fancy.stripLeadingSymbols false

useUnicodeRuler

Use Unicode to draw the ruler lines. Setting this to false will use ASCII instead. (Default: true)

git config --bool --global diff-so-fancy.useUnicodeRuler false

rulerWidth

rulerWidth sets the width of the ruler lines. (Default: screen width)

git config --global diff-so-fancy.rulerWidth 80

shortHeaders

Simplify the header inforation to a single line for filename and line number. (Default false)

git config --global diff-so-fancy.shortHeaders true

semIntegration

Include the summary from sem in the header for each changed file. (Default false)

git config --global diff-so-fancy.semIntegration true

๐Ÿ‘จ The diff-so-fancy team

PersonRole
@scottchiefbakerProject lead
@OJFordBug triage
@GenieTimTravis OSX fixes
@AOSDebian packager
@Stevemao/@Paul IrishNPM release team

๐Ÿงฌ Contributing

Pull requests are quite welcome, and should target the next branch. We are also looking for any feedback or ideas on how to make diff-so-fancy even fancier.

Other documentation

๐Ÿ”ƒ Alternatives

๐Ÿ›๏ธ License

MIT