so-fancy/diff-so-fancy
{ "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

Section titled “🎩 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.
🖼️ Screenshot
Section titled “🖼️ Screenshot”Vanilla git diff vs git and diff-so-fancy
![diff-highlight vs diff-so-fancy]!(diff-so-fancy.png)
📦 Install
Section titled “📦 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
Section titled “✨ Usage”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"Use -u with diff for unified output, and pipe the output to diff-so-fancy:
diff -u file_a file_b | diff-so-fancyWe also support recursive mode with -r or --recursive
diff --recursive -u /path/folder_a /path/folder_b | diff-so-fancy⚒️ Options
Section titled “⚒️ Options”markEmptyLines
Section titled “markEmptyLines”Colorize the first block of an empty line. (Default: true)
git config --bool --global diff-so-fancy.markEmptyLines falsechangeHunkIndicators
Section titled “changeHunkIndicators”Simplify Git header chunks to a human readable format. (Default: true)
git config --bool --global diff-so-fancy.changeHunkIndicators falsestripLeadingSymbols
Section titled “stripLeadingSymbols”Remove the + or - symbols at start of each diff line. (Default: true)
git config --bool --global diff-so-fancy.stripLeadingSymbols falseuseUnicodeRuler
Section titled “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 falserulerWidth
Section titled “rulerWidth”rulerWidth sets the width of the ruler lines. (Default: screen width)
git config --global diff-so-fancy.rulerWidth 80shortHeaders
Section titled “shortHeaders”Simplify the header inforation to a single line for filename and line number. (Default false)
git config --global diff-so-fancy.shortHeaders true👨 The diff-so-fancy team
Section titled “👨 The diff-so-fancy team”| Person | Role |
|---|---|
| @scottchiefbaker | Project lead |
| @OJFord | Bug triage |
| @GenieTim | Travis OSX fixes |
| @AOS | Debian packager |
| @Stevemao/@Paul Irish | NPM release team |
🧬 Contributing
Section titled “🧬 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
Section titled “Other documentation”- [Pro-tips for advanced users]!(pro-tips.md)
- [Reporting Bugs]!(reporting-bugs.md)
- [Hacking and Testing]!(hacking-and-testing.md)
- [History]!(history.md)
🔃 Alternatives
Section titled “🔃 Alternatives”- Delta
- Lazygit with diff-so-fancy integration
🏛️ License
Section titled “🏛️ License”MIT