GeezerVison is showing github.com — Releases · uutils/diffutils
Releases · uutils/diffutils
v0.6.0
Rust Diffutils 0.6.0 Release:
We are happy to announce the release of Rust Diffutils 0.6.0 - a release focused on output compatibility, cmp on large files and project infrastructure.
On the diff side, three output formats moved closer to GNU: unified and context hunks are now merged when they are separated by up to twice the context size, the context format marks every line of a change block with !, and the side-by-side (-y) gutter marker sits in the middle of the gutter. These are small differences on screen, but they are exactly what makes a generated patch differ byte for byte from the one GNU produces.
cmp got faster and more capable: verbose byte printing no longer allocates (about 2.3x faster than before on large, completely different files), and --bytes / --ignore-initial are now 64-bit everywhere, so 32-bit systems can compare files beyond 4 GiB like GNU cmp does with large file support.
Around the code, the project grew up a lot this cycle: we now run the upstream GNU diffutils test suite in CI and track its results on every pull request, we have Divan benchmarks tracked by CodSpeed, a security audit workflow, a SECURITY.md, pre-commit hooks, and a wasm32-wasip1 build in CI.
We are now at 7 passing, 22 failing, 4 skipped on the GNU test suite.
GNU Test Suite Compatibility:
| Result |
0.6.0 |
% Total 0.6.0 |
| Pass |
7 |
21.21% |
| Skip |
4 |
12.12% |
| Fail |
22 |
66.67% |
| Error |
0 |
0% |
| Total |
33 |
|
Note: this is the first release with GNU test suite tracking (#217), so there is no 0.5.0 baseline to compare against. Many of the failing tests exercise options that are not implemented yet; they give us a clear list of what to work on next. The evolution is now tracked in uutils/diffutils-tracking, refreshed twice a day.

Download diffutils 0.6.0
Highlights:
-
diff Output Compatibility
- Hunks separated by up to twice the context size are merged into one, like GNU (#306)
- Context format (
-c) marks every line of a change block with ! (#311)
- Side-by-side (
-y) places the gutter marker at the middle of the gutter (#277)
-
cmp Improvements
- Verbose byte printing (
-l, -b) no longer allocates: ~2.3x faster than 0.5.0 on large, fully different files (#153)
--bytes and --ignore-initial are now u64, lifting the 4 GiB limit on 32-bit systems (#183)
- Checked subtraction for the verbose offset padding (#275)
-
GNU Compatibility & Robustness
- Unknown options are reported as
unrecognized option, in the same format as GNU (#179, #180)
- Fixed a panic on a non-UTF-8 argument ending in
--width=N (#250)
- The multicall binary accepts prefixed names, so it can be installed as
gdiff, uu-cmp, rust-diffutils, etc. (#231)
-
Testing & Benchmarking
- The upstream GNU diffutils test suite runs in CI, with a PR comment showing regressions and fixes (#217, #278)
- Divan benchmarks with continuous performance tracking on CodSpeed (#185, #189)
- The integration tests validate
patch and ed once with meaningful messages, and work with gpatch on macOS
-
Platform & Security
wasm32-wasip1 builds again and is now covered by CI (#215, #218)
- Binaries are published from
main (#163)
- New
SECURITY.md, COPYRIGHT file and a cargo audit workflow
-
Contributions: This release landed 92 pull requests from 13 new contributors
Call to Action:
Help us improve compatibility - Pick a failing GNU test and send a PR: github.com/uutils/diffutils
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
What's Changed
diff
cmp
- cmp: stop allocating for byte printing by @kov in #153
- cmp: fix 32-bit usize overflow in test by @JustSoup312 in #173
- cmp Feat: change data type for 'bytes' limit and 'ignore initial' to u64 by @GunterSchmidt in #183
- cmp: use .map_err by @oech3 in #236
- cmp.rs: simplify by .ok_or by @oech3 in #243
- cmp: use checked subtraction for the verbose offset padding by @MsfPablo in #275
diffutils
- fix: rename "Unknown option" to "unrecognized option" for diff and cmp by @Ryujiyasu in #179
- fix: match GNU error format for unrecognized options by @Ryujiyasu in #180
- support prefixed names by @oech3 in #231
- diffutils: fix panic on non-UTF-8 argument ending in --width=N by @SAY-5 in #250
Testing
- fix: create target directory in fuzz targets by @pocopepe in #219
- tests: fix "old" names in generated patch files by @marc-hb in #224
- tests: validate "patch" and "ed" commands once, print meaningful messages by @marc-hb in #226
- tests: fix "gpatch --version" error message on mac by @marc-hb in #235
Performance & Benchmarks
Code Quality & Cleanup
CI & Build
- Publish binary from main by @oech3 in #163
- Use preinstalled rust, disable incremental build by @oech3 in #164
- fuzzing.yml: Avoid non reusable cache generation by @oech3 in #170
- Cargo.toml: Simplify profiles by @oech3 in #191
- fix: follow redirects when fetching gnulib init.sh in upstream test suite by @kevinburkesegment in #202
- *.yml: dedup env: by @oech3 in #204
- actions: add security audit workflow by @xtqqczze in #210
- feat: add GNU testsuite tracking workflows by @pocopepe in #217
- ci: add
.pre-commit-config.yaml by @cakebaker in #227
- Make `compare_tes...
Read more
Contributors
cakebaker, sylvestre, and 17 other contributors
Assets
16
-
sha256:19bf7ad0fbb00ce8f1f628dd70c1db05f2d5a88ecc1167226930a456a2470f10
480 KB
2026-10-23T09:08:05Z
-
sha256:b8e046a71abf5237e52c7989d11e5b8a3e25b9e42eed4ff13b2e44be5bafa0db
105 Bytes
2026-10-23T09:08:05Z
-
sha256:09adafbe725832c8d744017e73b9a2b9fe1ede6bcaf2dd2f459592dcc884d27e
530 KB
2026-10-23T09:08:05Z
-
sha256:750957e10c34b46c4b7a846c0db7bb10cc6dc26a721af56904f4ad28f959f42d
110 Bytes
2026-10-23T09:08:05Z
-
sha256:3fc55505760736bdd43d6124b7de9b1dbedc3b657bc7f2d7675194eec572da31
564 KB
2026-10-23T09:08:05Z
-
sha256:aca0e898e61df8f13accb09507d28dafebdb1a50dc8068b5c37a885e8de8e5dd
104 Bytes
2026-10-23T09:08:05Z
-
sha256:69063ab317b737314ac509a1db0edee4be0b75892ac098969104103d9748e413
694 KB
2026-10-23T09:08:05Z
-
sha256:49e32ff552937bf888d884c30df54253376baead70e947a47f35118e74d93340
104 Bytes
2026-10-23T09:08:05Z
-
sha256:a0a8fcab78954ddc75a5c9fae3af8a33924cf4a637d7f5bfde1bd1b4da1f88bb
598 KB
2026-10-23T09:08:05Z
-
sha256:72157752157af3259baebc6017c2f535629a9a891f62c6940ccb386a4cceda5b
109 Bytes
2026-10-23T09:08:05Z
-
2026-10-23T08:38:44Z
-
2026-10-23T08:38:44Z
-
Loading
Uh oh!
There was an error while loading. Please reload this page.
cakebaker and mustafaelrasheid reacted with hooray emoji
2 people reacted
latest-commit
bdf449e
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Assets
3
Loading
Uh oh!
There was an error while loading. Please reload this page.
v0.5.0
c38fe5f
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Download diffutils 0.5.0
What's Changed
- Update Rust crate pretty_assertions to v1.4.1 by @renovate[bot] in #85
- Update Rust crate unicode-width to v0.1.14 by @renovate[bot] in #86
- Update Rust crate unicode-width to 0.2.0 by @renovate[bot] in #87
- When running the upstream test suite, fetch missing tests/init.sh (fixes #90) by @oSoMoN in #91
- Update Rust crate tempfile to v3.13.0 by @renovate[bot] in #94
- Update Rust crate regex to v1.11.0 by @renovate[bot] in #95
- Add cmp utility by @kov in #88
- Upstream test suite: correctly handle tests that are skipped (fixes #92) by @oSoMoN in #93
- README.md: be explicit with the list of tools by @sylvestre in #99
- cmp: print verbose diffs as we find them by @kov in #100
- Fix clippy warnings by @cakebaker in #101
- fix(deps): update rust crate regex to v1.11.1 by @renovate[bot] in #102
- chore(deps): update rust crate tempfile to v3.14.0 by @renovate[bot] in #104
- Fix "unused import" warning on Windows by @cakebaker in #105
- ci: remove
CARGO_FEATURES_OPTION by @cakebaker in #106
- chore(deps): update codecov/codecov-action action to v5 by @renovate[bot] in #107
- ci: make sure gpatch is actually being used for tests on MacOS by @oSoMoN in #112
- fix(deps): update rust crate itoa to v1.0.15 by @renovate[bot] in #108
- fix(deps): update rust crate chrono to v0.4.40 by @renovate[bot] in #109
- chore(deps): update rust crate predicates to v3.1.3 by @renovate[bot] in #110
- chore(deps): update rust crate tempfile to v3.17.1 by @renovate[bot] in #111
- chore(deps): update rust crate tempfile to v3.18.0 by @renovate[bot] in #113
- chore(deps): update rust crate tempfile to v3.19.0 by @renovate[bot] in #114
- chore(deps): update rust crate tempfile to v3.19.1 by @renovate[bot] in #115
- chore(deps): update rust crate assert_cmd to v2.0.17 by @renovate[bot] in #116
- fix(deps): update rust crate chrono to v0.4.41 by @renovate[bot] in #118
- chore(deps): update rust crate tempfile to v3.20.0 by @renovate[bot] in #119
- Create the side-by-side option (-y) feature for the diff command (Incomplete) by @sami-daniel in #117
- fix(deps): update rust crate unicode-width to v0.2.1 by @renovate[bot] in #122
- clippy: fix warnings by @cakebaker in #123
- clippy: fix warnings from
unnecessary_unwrap lint by @cakebaker in #125
- chore(deps): update rust crate tempfile to v3.21.0 by @renovate[bot] in #127
- fix(deps): update rust crate regex to v1.11.2 by @renovate[bot] in #128
- fix(deps): update rust crate chrono to v0.4.42 by @renovate[bot] in #129
- chore(deps): update rust crate tempfile to v3.22.0 by @renovate[bot] in #130
- chore(deps): update rust crate tempfile to v3.23.0 by @renovate[bot] in #131
- cargo dist: update to a recent release by @oSoMoN in #132
- chore(deps): update rust crate regex to v1.11.3 by @renovate[bot] in #133
- chore(deps): update rust crate unicode-width to v0.2.2 by @renovate[bot] in #134
- chore(deps): update rust crate regex to v1.12.1 by @renovate[bot] in #135
- chore(deps): update rust crate regex to v1.12.2 by @renovate[bot] in #136
- chore(deps): update rust crate assert_cmd to v2.1.0 by @renovate[bot] in #139
- Cargo.toml sync profiles with findutils by @oech3 in #140
- chore(deps): update rust crate assert_cmd to v2.1.1 by @renovate[bot] in #141
- tests: fix deprecation warnings from
assert_cmd by @cakebaker in #142
- chore(deps): update actions/cache action to v5 by @renovate[bot] in #147
- chore(deps): update rust crate itoa to v1.0.16 by @renovate[bot] in #150
- Fix compilation for 32-bit targets by @LunarEclipse363 in #146
- chore(deps): update rust crate tempfile to v3.24.0 by @renovate[bot] in #151
- chore(deps): update rust crate itoa to v1.0.17 by @renovate[bot] in #154
- cmp_fast_path test improvements by @kov in #152
- prepare version 0.5.0 by @sylvestre in #156
- update cargo dist conf by @sylvestre in #157
- cargo-dist: remove duplicate info by @sylvestre in #158
New Contributors
Full Changelog: v0.4.2...v0.5.0
Contributors
cakebaker, sylvestre, and 6 other contributors
Assets
16
Loading
Uh oh!
There was an error while loading. Please reload this page.
239 reacted with thumbs up emoji
cakebaker, kiwijam, and mustafaelrasheid reacted with hooray emoji
239 reacted with heart emoji
All reactions
-
👍
1 reaction
-
🎉
3 reactions
-
❤️
1 reaction
4 people reacted
v0.4.2
Download diffutils 0.4.2
What's Changed
- CI: install GNU patch on MacOS (fixes #66) by @oSoMoN in #67
- CI: Update 'cargo dist' to version 0.13.3 by @oSoMoN in #69
- cargo-dist: generate more targets by @sylvestre in #74
- Make error message consistent with GNU diff's implementation when failing to read input file(s) by @oSoMoN in #63
- Use the instrumentation-based code coverage implementation by @oSoMoN in #70
- Fix clippy warnings in tests by @cakebaker in #84
Dependencies
Full Changelog: v0.4.1...v0.4.2
Contributors
cakebaker, sylvestre, and 2 other contributors
Assets
13
Loading
Uh oh!
There was an error while loading. Please reload this page.
239 and home7ech2025 reacted with thumbs up emoji
AceofSpades5757 reacted with hooray emoji
239 reacted with heart emoji
All reactions
-
👍
2 reactions
-
🎉
1 reaction
-
❤️
1 reaction
3 people reacted
v0.4.1
Download diffutils 0.4.1
What's Changed
- Un-hardcode a test filename in an integration test (fixes #61) by @oSoMoN in #62
- Handle long option names for the supported output styles… by @oSoMoN in #52
- Handle directory-file and file-directory comparisons in the diff by @TanmayPatil105 in #56
Full Changelog: v0.4.0...v0.4.1
Contributors
oSoMoN and TanmayPatil105
Assets
13
Loading
Uh oh!
There was an error while loading. Please reload this page.
v0.4.0
Download diffutils 0.4.0
What's Changed
- Normal diff: compact ranges of lines where possible (fixes #10) by @oSoMoN in #11
- Fix trivial typo in error message by @oSoMoN in #12
- Match GNU diff's implementation for exit codes (fixes #17) by @oSoMoN in #18
- Ed diff: compact ranges of lines where possible (fixes #21) by @oSoMoN in #22
- Implement -s/--report-identical-files option (fixes #23) by @oSoMoN in #24
- Implement -q/--brief option (fixes #19) by @oSoMoN in #20
- clippy: fix warnings from useless_vec lint by @cakebaker in #30
- Implement
-t/--expand-tabs option (fixes #26) and --tabsize=NUM option (fixes #27) by @oSoMoN in #28
- Implement the Default trait for Params by @oSoMoN in #36
- Pass a Params reference to the various diff() functions, instead of a long list of arguments by @oSoMoN in #37
- Fix the link to the Codecov badge by @oSoMoN in #44
- Unit and integration tests for reading data from standard input by @oSoMoN in #45
- Run clippy pedantic fixes by @sylvestre in #48
- Disable tests on Windows that use
ed by @cakebaker in #50
- Unit test to verify that conflicting output styles result in an error by @oSoMoN in #51
- Handle the rewrite of "-" to "/dev/stdin" in main to leave the filenames unchanged (fixes #46) by @oSoMoN in #47
- Display modification times of input files in context and unified diff by @TanmayPatil105 in #33
- Move test assertions in the cfg block where they belong (fixes #3) by @oSoMoN in #58
Documentation
- README: minor grammar correction by @oSoMoN in #38
CI
- Use the private Codecov token stored as a secret, by @oSoMoN in #55
- CI: On Windows, use GNU's patch.exe instead of Strawberry Perl patch by @oSoMoN in #57
- Run the upstream test suite in CI (fixes #8) by @oSoMoN in #13
- ci: fuzzers in the Github Actions CI. by @hanbings in #29
- Disable the fail fast (closes: #40) by @sylvestre in #41
Dependencies
- Configure Renovate by @renovate in #1
- fix(deps): update rust crate libfuzzer-sys to 0.4 by @renovate in #5
- Update Rust crate chrono to 0.4.38 - autoclosed by @renovate in #54
- Update Rust crate diff to 0.1.13 by @renovate in #4
- Update codecov/codecov-action action to v4 by @renovate in #9
- Update Rust crate regex to 1.10.4 by @renovate in #34
- chore(deps): update rust crate tempfile to 3.10.1 by @renovate in #25
New Contributors
Full Changelog: v0.3.0...v0.4.0
Contributors
cakebaker, sylvestre, and 4 other contributors
Assets
13
Loading
Uh oh!
There was an error while loading. Please reload this page.
|