--- layout: page title: "diffoscope: in-depth comparison of files, archives, and directories" --- # {{ site.title }}
{{ site.description }}

*diffoscope* tries to get to the bottom of what makes files or directories different. It will recursively unpack archives of many kinds and transform various binary formats into more human-readable form to compare them. It can compare two tarballs, ISO images, or PDF just as easily. **Latest release**: {{ site.data.diffoscope.latest_release.version }} ({{ site.data.diffoscope.latest_release.date|date: "%d %b %Y" }})
You can try it now using Docker: echo foo > file1 echo bar > file2 docker run --rm -t -w $(pwd) -v $(pwd):$(pwd):ro \ registry.salsa.debian.org/reproducible-builds/diffoscope file1 file2 ... or try it on [**try.diffoscope.org**](https://try.diffoscope.org/)! ## News {% for x in site.posts limit: 5 %} * [{{ x.title }}]({{ x.url }}) ({{ x.date|date: "%d %b %Y" }}){% endfor %} ([RSS]({{ "feed.xml" | relative_url }})) ## Examples [![Example of diffoscope HTML output]({{ "examples/https-everywhere-5.0.6_vs_5.0.7.thumbnail.png" | relative_url }}?{{ site.time | date: '%s%N' }})]({{ "examples/https-everywhere-5.0.6_vs_5.0.7.html" | relative_url }}) [Firefox extensions compared (HTML output)]({{ "examples/https-everywhere-5.0.6_vs_5.0.7.html" | relative_url }}) [![Example of diffoscope text output]({{ "examples/igerman98_20131206-5.thumbnail.png" | relative_url }}?{{ site.time | date: '%s%N' }})]({{ "examples/igerman98_20131206-5.txt" | relative_url }}) [Debian packages compared (text output)]({{ "/examples/igerman98_20131206-5.txt" | relative_url }}) … and more [examples on tests.reproducible-builds.org](https://tests.reproducible-builds.org/debian/unstable/amd64/index_FTBR.html). You can also view an [demonstration interactive shell session]({{ "static/images/progressbar.gif" | relative_url }}?{{ site.time | date: '%s%N' }}) (220K). ## Features * Command-line interface * Text and HTML ouput * {{ site.data.diffoscope.description }} * Fallback on hexdump comparison * Fuzzy-matching to handle renamings * … and many more! ## Get diffoscope * **Try it online!** * Via `pip`:
`pip install diffoscope`
*Note:* You might still want to install Python modules from tlsh and rpm and other external tools to get more meaningful results. Use `diffoscope --list-tools` to get the full list. * On Debian and derivatives:
`apt install diffoscope` * Via Docker:
`docker run --rm -t -w $(pwd) -v $(pwd):$(pwd):ro registry.salsa.debian.org/reproducible-builds/diffoscope` * On Fedora based systems:
`dnf install diffoscope` * On Gentoo based systems:
`emerge dev-util/diffoscope` * On openSUSE:
`zypper in diffoscope` * On Arch Linux:
`pacman -S diffoscope` * On FreeBSD based systems:
`pkg install py38-diffoscope` * On OpenBSD based systems (packaging):
`pkg_add diffoscope` * On NixOS/nixpkgs:
`nix-shell -p diffoscope` * On Homebrew:
`brew install diffoscope` * Source tarballs * Through Git:
`git clone {{ site.salsa_url }}.git` ## Contribute *diffoscope* is developed within the “Reproducible builds” effort. * Git repository * Issues and feature requests * File a new issue! (registration instructions) * Users and developers mailing-list * `#reproducible-builds` and/or `#debian-reproducible` on OFTC Extending *diffoscope* to support new formats is quite straightforward in most cases. It also has a comprehensive test suite. Patches welcome! ## Similar software * pkgdiff * `pkg-diff.sh` from Open Build Service build-compare ## License *diffoscope* is free software licensed under the GNU General Public License version 3 or later. ## Contributors {{ site.data.diffoscope.contributors|array_to_sentence_string:"and" }}.