---
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" }}.