Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

so-fancy/diff-so-fancy

Good-lookin' diffs. Actually… nah… The best-lookin' diffs. :tada:

so-fancy/diff-so-fancy.json
{
"createdAt": "2016-02-04T11:32:08Z",
"defaultBranch": "next",
"description": "Good-lookin' diffs. Actually… nah… The best-lookin' diffs. :tada:",
"fullName": "so-fancy/diff-so-fancy",
"homepage": "",
"language": "Perl",
"name": "diff-so-fancy",
"pushedAt": "2025-07-15T18:09:50Z",
"stargazersCount": 17862,
"topics": [
"diff",
"diff-highlight",
"diffs",
"fancy",
"git",
"hacktoberfest"
],
"updatedAt": "2025-11-24T18:14:34Z",
"url": "https://github.com/so-fancy/diff-so-fancy"
}

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

Vanilla git diff vs git and diff-so-fancy

![diff-highlight vs diff-so-fancy]!(diff-so-fancy.png)

Simply copy the diff-so-fancy script from the latest 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.

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

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

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

Terminal window
diff -u file_a file_b | diff-so-fancy

It also supports the recursive mode of diff with -r or --recursive as first argument

Terminal window
diff -r -u folder_a folder_b | diff-so-fancy
Terminal window
diff --recursive -u folder_a folder_b | diff-so-fancy

Should the first block of an empty line be colored. (Default: true)

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

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

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

Should the pesky + or - at line-start be removed. (Default: true)

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

By default, the separator for the file header uses Unicode line-drawing characters. If this is causing output errors on your terminal, set this to false to use ASCII characters instead. (Default: true)

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

By default, the separator for the file header spans the full width of the terminal. Use this setting to set the width of the file header manually.

Terminal window
git config --global diff-so-fancy.rulerWidth 80
PersonRole
@scottchiefbakerProject lead
@OJFordBug triage
@GenieTimTravis OSX fixes
@AOSDebian packager
@Stevemao/@Paul IrishNPM release team

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.

  • [Pro-tips on advanced usage]!(pro-tips.md)
  • [Reporting Bugs]!(reporting-bugs.md)
  • [Hacking and Testing]!(hacking-and-testing.md)
  • [History]!(history.md)

MIT