NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #536 most downloaded on crates.io
A diff library for Rust
Last release 1 months ago
17 Aug 2026
Release timing varies
gaps range from 9 days to 1.2 years
Nearly every release is documented
notes for 25 of 25 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
25 releases · first in 2021
One column per quarter.
chore(release): prepare 3.2.0
chore(release): prepare 3.2.0
TextMerge, with
merge and diff3 conflict output, configurable labels and marker sizes, owned
and borrowed inputs, byte output, and whitespace-insensitive comparison.WhitespaceMode and TextDiffConfig::whitespace_mode for Git-style
line comparisons that ignore changes in whitespace (-b) or all whitespace
(-w).Algorithm::Myers to reduce unmatched/confusing records and use
Git-style bounded, non-minimal splits on expensive searches, and added
Algorithm::RawMyers for the previous shortest-edit-script behavior without
output-changing heuristics.chore(release): prepare 3.1.2
chore(release): prepare 3.1.2
Algorithm::Lcs deadline fallback emitting edits twice, which produced
out-of-bounds DiffOp ranges and panics when consuming timed-out diffs. #97Algorithm::Lcs reporting identical subranges with zero-based indices
instead of preserving the supplied range offsets. #98Algorithm::Lcs and Algorithm::Hunt emitting zero-length delete
operations when both inputs are empty. #99chore(release): prepare 3.1.1
chore(release): prepare 3.1.1
DiffOp cursor positions when compacting adjacent inserts/deletes and
in Algorithm::Histogram full-replacement output, ensuring operations form
contiguous ranges. #95caseNN.01.before_* / caseNN.02.after_* scheme.chore(release): prepare 3.1.0
chore(release): prepare 3.1.0
capture_diff_slices_by_key and capture_diff_slices_by_key_deadline
as convenience helpers for diffing slices by derived keys.Compact emitting inconsistent DiffOp cursor positions after
compaction, which could leave Delete/Insert operations with stale
new_index/old_index values.+ use<...>) on iterator-returning APIs to
improve compatibility with Rust 2024 lifetime capture behavior. #93fix(ci): configure crates.io trusted publishing
fix(ci): configure crates.io trusted publishing
Algorithm::Histogram, including deadline-aware Myers fallback and
comprehensive regression/behavior tests.Algorithm::Hunt.InlineChangeOptions and
InlineChangeMode, including semantic cleanup and new
TextDiff::iter_inline_changes_with_options* methods. #92algorithms::diff_deadline
to avoid pathological runtimes on large, fully distinct inputs.Algorithm::Myers performance on heavily unbalanced diffs to
avoid pathological slowdowns.diff_deadline_raw entrypoints in the algorithm modules to bypass
shared heuristics and keep minimal intrinsic trait bounds where needed.examples/diffs that can be used with the some of the
examples as input pairs.CachedLookup, a helper for adapting virtual or computed sequences by
materializing items on first access and then serving borrowed values through
normal indexing. The owned-lookup example demonstrates this approach for
issue #33.TextDiff::from_* and TextDiffConfig::diff_* now accept owned inputs
(String, Vec<u8>, Cow) in addition to borrowed inputs. This allows
returning text diffs from functions without external owner lifetimes. #65TextDiff no longer exposes old_slices / new_slices. Use
old_len, new_len, old_slice, new_slice, iter_old_slices,
iter_new_slices, old_lookup, and new_lookup instead.TextDiff::iter_changes now panics on invalid out-of-bounds DiffOp
ranges instead of silently truncating iteration.utils::diff_lines_inline now takes &TextDiff and options rather than
(Algorithm, old, new, options).utils::diff_lines now avoids a second line-tokenization pass.get_diff_ratio to diff_ratio.no_std + alloc support with an explicit default std
feature.hashbrown backend for no_std map storage
(default-features = false, features = ["hashbrown"]), while the default
no_std backend uses alloc::collections::BTreeMap.Capture::new, Replace::new,
NoFinishHook::new, InlineChangeOptions::new, TextDiff::configure).Add optional support for web-time to support web WASM targets. #73
web-time to support web WASM targets. #73wasm32_web_time feature. #74Bump bstr dependency to 1.5. #69
Added support for TextDiff::iter_inline_changes_deadline. #61
TextDiff::iter_inline_changes_deadline. #61Fixed a bug where the LCS diff algorithm didn't always call D::finish.
D::finish. (#58)Added support for Change::value_ref and Change::value_mut.
Change::value_ref and Change::value_mut.Fixed a panic in LCS diffs on matching input.
Fixed a panic in text diff generation.
Removed deprecated alternative slice diffing functions.
serde feature to allow serialization with serde.Change the Change type and associated methods to work on any T: Clone instead of &T. This makes the iter_changes method also work on slices of integer
Change type and associated methods to work on any T: Clone instead
of &T. This makes the iter_changes method also work on slices of integers
or other values.Deprecated slice diffing methods in the individual algorithm modules.
IdentifyDistinct to convert sequences to ints.IdentifyDistinct
automatically above a threshold.Capture type.Added support for Rust 1.41.0 for better compatibility.
Added support for Rust 1.43.0 for better compatibility.
Make the unicode feature optional for inline diffing.
lcs).NoFinishHook to aid composing of diff hooks.More generic lifetimes for iter_changes and iter_inline_changes.
iter_changes and iter_inline_changes.iter_all_changes shortcut as this is commonly useful.iter_slices to DiffOp to quickly get an iterator over the
encoded slices rather than individual items like iter_changes does.utils module with various text diffing utilities.TextDiffRemapper which helps with working with the original, pre
TextDiff tokenization slices.Add support for byte diffing and change the text interface to abstract over DiffableStr.
get_diff_ratio.DiffableStr.Change type now also works for non text diffs.Add DiffOp::apply_to_hook to apply a captured op to a diff hook.
DiffOp::apply_to_hook to apply a captured op to a diff hook.Changes type.UnifiedDiff type.TextDiff::from_unicode_words).Change get_close_matches to use Python's quick ratio optimization and order lexicographically when tied.
get_close_matches to use Python's quick ratio optimization
and order lexicographically when tied.Added grapheme and character level diffing utilities.
DiffOp::as_tag_tuple is now taking the argument by reference.TextDiff::ratio.get_close_matches.Fixed a bug in the patience algorithm causing it not not work.
* Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →