Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

so-fancy/diff-so-fancy

Make your diffs human readable for improved code quality and faster defect detection. :tada:

so-fancy/diff-so-fancy.json
{
"createdAt": "2016-02-04T11:32:08Z",
"defaultBranch": "next",
"description": "Make your diffs human readable for improved code quality and faster defect detection. :tada:",
"fullName": "so-fancy/diff-so-fancy",
"homepage": "",
"language": "Perl",
"name": "diff-so-fancy",
"pushedAt": "2026-03-21T16:09:35Z",
"stargazersCount": 17964,
"topics": [
"diff",
"diff-highlight",
"diffs",
"fancy",
"git",
"hacktoberfest"
],
"updatedAt": "2026-03-21T16:09:39Z",
"url": "https://github.com/so-fancy/diff-so-fancy"
}

diff-so-fancy makes 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 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Terminal window
git config --global diff-so-fancy.shortHeaders true
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 for advanced users]!(pro-tips.md)
  • [Reporting Bugs]!(reporting-bugs.md)
  • [Hacking and Testing]!(hacking-and-testing.md)
  • [History]!(history.md)

MIT