---
title: "zstd Breaking Changes on crates.io | Since.dev"
description: "What each zstd release removed, renamed or changed: 18 breaking changes in 1 version on crates.io, each with its source."
canonical_url: https://since.dev/packages/crates/zstd
last_updated: 2026-09-04
---

# 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

## 0.14.0

18 breaking changes, first published September 4, 2026.

- **Removed** `zstd::stream::write::Decoder::do_finish`  

zstd::stream::write::Decoder::do_finish was removed in zstd 0.14.0 [crates.io](https://crates.io/crates/zstd/0.14.0)
- **Removed** `zstd::stream::write::Decoder::finish`  

zstd::stream::write::Decoder::finish was removed in zstd 0.14.0 [crates.io](https://crates.io/crates/zstd/0.14.0)
- **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](https://github.com/gyscos/zstd-rs/releases/tag/v0.14.0)
- **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](https://github.com/gyscos/zstd-rs/releases/tag/v0.14.0)
- **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](https://github.com/gyscos/zstd-rs/releases/tag/v0.14.0)
- **Signature changed** `zstd::Decoder::finish`  

Was fn finish(self) -> R; now fn finish(mut self) -> R. [crates.io](https://crates.io/crates/zstd/0.14.0)
- **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](https://crates.io/crates/zstd/0.14.0)
- **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](https://crates.io/crates/zstd/0.14.0)
- **Signature changed** `zstd::stream::Decoder::finish`  

Was fn finish(self) -> R; now fn finish(mut self) -> R. [crates.io](https://crates.io/crates/zstd/0.14.0)
- **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](https://crates.io/crates/zstd/0.14.0)

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](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#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.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
