zstd breaking changes
Every breaking API change we have recorded in zstd on crates.io: 18 breaking changes in 1 version. Below are its newest version, removals and renames first, each with its source.
Newest change September 4, 2026

On this page
0.14.0
- Removed
zstd::stream::write::Decoder::do_finish
zstd::stream::write::Decoder::do_finish was removed in zstd 0.14.0 crates.io - Removed
zstd::stream::write::Decoder::finish
zstd::stream::write::Decoder::finish was removed in zstd 0.14.0 crates.io - Behavior changed
Decoder.finish
finish() now reads the remaining frame epilogue, so the reader is positioned after the frame but may be read further. Callers relying on the old position or read count should use finish_frame() instead. github.com - Configuration changed
The crate now depends on zstd-safe 8.0.0. Users who pin an older zstd-safe must update that dependency. github.com - Signature changed
with_prepared_dictionary
The with_prepared_dictionary() constructors now take a borrow of the dictionary that must outlive the stream. Code that drops the dictionary early or stores the stream beyond it must be changed. github.com - Signature changed
zstd::Decoder::finish
Was fn finish(self) -> R; now fn finish(mut self) -> R. crates.io - Signature changed
zstd::Decoder::with_prepared_dictionary
Was fn with_prepared_dictionary<'b>(reader: R, dictionary: &DecoderDictionary<'b>) -> io::Result<Self> where 'b: 'a,; now fn with_prepared_dictionary<'b>(reader: R, dictionary: &'a DecoderDictionary<'b>) -> io::Result<Self> where 'b: 'a,. crates.io - Signature changed
zstd::Encoder::with_prepared_dictionary
Was fn with_prepared_dictionary<'b>(writer: W, dictionary: &EncoderDictionary<'b>) -> io::Result<Self> where 'b: 'a,; now fn with_prepared_dictionary<'b>(writer: W, dictionary: &'a EncoderDictionary<'b>) -> io::Result<Self> where 'b: 'a,. crates.io - Signature changed
zstd::stream::Decoder::finish
Was fn finish(self) -> R; now fn finish(mut self) -> R. crates.io - Signature changed
zstd::stream::Decoder::with_prepared_dictionary
Was fn with_prepared_dictionary<'b>(reader: R, dictionary: &DecoderDictionary<'b>) -> io::Result<Self> where 'b: 'a,; now fn with_prepared_dictionary<'b>(reader: R, dictionary: &'a DecoderDictionary<'b>) -> io::Result<Self> where 'b: 'a,. crates.io
And 8 more in this version.
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp