Diff So Fancy

Good-lookin' diffs. Actually… nah… The best-lookin' diffs. 🎉
Alternatives To Diff So Fancy
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
9 hours ago38August 31, 2022208mitRust
A syntax-highlighting pager for git, diff, and grep output
Diff So Fancy16,3084133 months ago39July 27, 202127mitPerl
Good-lookin' diffs. Actually… nah… The best-lookin' diffs. :tada:
Walle Web11,300
a year ago17May 16, 2016387apache-2.0Python
walle - 瓦力 Devops开源项目代码部署平台
Vim Gitgutter8,059
a day agomitVim Script
A Vim plugin which shows git diff markers in the sign column and stages/previews/undoes hunks and partial hunks.
2 months ago1February 27, 201817otherPython
improved colored diff
12 days ago53mitLua
Git integration for buffers
Vim Signify2,596
a month ago10mitVim Script
:heavy_plus_sign: Show a diff using Vim its sign column.
Nbdime2,448138a month ago21October 26, 202177otherPython
Tools for diffing and merging of Jupyter notebooks.
Diff2html2,3982301152 months ago178September 14, 202227mitTypeScript
Pretty diff to html javascript library (diff2html)
8 hours ago26otherLua
Single tabpage interface for easily cycling through diffs for all modified files for any git rev.
Alternatives To Diff So Fancy
Select To Compare

Alternative Project Comparisons

diff-so-fancy Circle CI build TravisCI build AppVeyor build

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


Installation is as simple as cloning this repo and then putting the diff-so-fancy script in to 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, and as a package on Nix, Fedora, in the Arch community repo, Gentoo Guru, 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' own repositories/issue trackers where applicable.

Note: Windows users may need to install MinGW or the Windows subsystem for Linux.


With git

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

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

Improved colors for the highlighted bits

The default Git colors are not optimal. The colors used for the screenshot above were:

git config --global color.ui true

git config --global color.diff-highlight.oldNormal    "red bold"
git config --global color.diff-highlight.oldHighlight "red bold 52"
git config --global color.diff-highlight.newNormal    "green bold"
git config --global color.diff-highlight.newHighlight "green bold 22"

git config --global color.diff.meta       "11"
git config --global color.diff.frag       "magenta bold"
git config --global color.diff.func       "146 bold"
git config --global color.diff.commit     "yellow bold"
git config --global color.diff.old        "red bold"
git config --global color.diff.new        "green bold"
git config --global color.diff.whitespace "red reverse"

With 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



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

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


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

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


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

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)

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.

git config --global diff-so-fancy.rulerWidth 47    # git log's commit header width

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


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




Popular Git Projects
Popular Diff Projects
Popular Version Control Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.