diffy
Tools for finding and manipulating differences between files
0.5.1
14M downloads/mo
#2545 most downloaded on crates.io
bmwill/diffy
What this package is like to depend on
Last release 1 months ago
19 Jul 2026
Ships fairly regularly
a new release about every 7 months
Nearly every release is documented
notes for 11 of 12 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
12 releases · first in 2020
2 releases in the last 12 months
see the full history below
Release timeline
12 releases · Jun 2020 to Jul 2026Releases
latest 12-
0.5.119 Jul 2026Release notes
Open source →Fixed
- #85
Merge conflict markers are now always placed on their own lines.
Previously, a conflicting hunk at the end of a file without a trailing
newline glued the next marker onto its last content line, producing
unparseable output. This matches
git merge-file --diff3behavior.
- #85
Merge conflict markers are now always placed on their own lines.
Previously, a conflicting hunk at the end of a file without a trailing
newline glued the next marker onto its last content line, producing
unparseable output. This matches
-
0.5.027 Apr 2026Release notes
Open source →This is a major release introducing multi-file patch support, git binary diff handling, and
no_stdcompatibility.Breaking Changes
- #73
The crate is now
no_stdby default.Patch::to_bytes()andPatchFormatter::write_patch_into()now require thestdfeature. Addfeatures = ["std"]to restore them. - #46
Color support is now behind the
colorfeature flag. Previously color was always available. NowPatchFormatter::with_color()requires enabling thecolorfeature. The underlying implementation switched fromnu-ansi-termtoanstyle.
Added
- #55
#59
#61
#66
#74
#76
Multi-file patch support.
Parse and apply unified diff and
git diffoutput containing multiple files, including create, delete, modify, rename, and copy operations. Git binary patches (literalanddelta) are supported behind thebinaryfeature flag. - #80
New
applyexample demonstrating multi-file patch application.
Fixed
- #51
#82
Patch::from_str/from_bytesno longer error on trailing non-patch content after a complete hunk, matching GNU patch andgit applybehavior. - #65
Return an error instead of panicking on non-UTF-8 escaped filenames
when parsing as
str. - #47
Fix quoted filename escaping: handle
\a,\b,\f,\v, 3-digit octal escapes (\0xx–\3xx), and quote all control characters. - #83 Fix arithmetic overflow panic when parsing hunk headers with extremely large range values.
Changed
- #73
The crate is now
-
0.4.230 Jan 2025 -
0.4.129 Jan 2025Release notes
Open source →Added
- #36 Add ability to configure
filenames when creating a patch with
DiffOptions.
- #36 Add ability to configure
filenames when creating a patch with
-
0.4.014 Jun 2024Release notes
Open source →Fixed
- #28 Fixed an issue where conflicts were being omitted from merges.
Added
- #26 Add ability to reverse a patch.
Changed
-
0.3.029 Aug 2022Release notes
Open source →Fixed
- #17 Fix an issue which resulted in a large slowdown when applying a patch with incorrect hunk headers.
- #18 Replace unmaintained ansi_term dependency with nu_ansi_term in order to address RUSTSEC-2021-0139.
Changed
- #19 Bump minimum supported rust version (msrv) to 1.51.0.
-
0.2.201 Feb 2022Release notes
Open source →Fixed
- #16 Fix an issue where patch files failed to parse when they contained hunks which were adjacent to one another.
-
0.2.127 Jan 2021Release notes
Open source →Fixed
- #9 Fix an issue where the incorrect range was being used to index an array when calculating a merge resulting in a panic in some cases.
-
0.2.007 Jul 2020Release notes
Open source →Added
- Support for working with potentially non-utf8 data with the addition of
various
*_bytesfunctions. - Support for writing both utf8 and non-utf8 patches into a writer
W: io::write - Support for a minimum supported rust version (msrv) of 1.36.0.
Changed
- The
Patchtype is now generic across the text type, eitherstrfor utf8 text and[u8]for potentially non-utf8 texts. - The filenames for the original and modified files of a patch are now optional. This means that patches which don't include filename headers (only include hunks) can now properly be parsed.
Fixed
- Quoted filenames which include escaped characters are now properly parsed.
- Support for working with potentially non-utf8 data with the addition of
various
-
0.1.102 Jul 2020Release notes
Open source →Added
Patches can now be parsed from strings withPatch::from_str- A
Patchcan now be applied to a base image withapply
-
0.1.030 Jun 2020 -
0.0.008 Jun 2020Nothing published for this version