NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3978 most downloaded on crates.io
Implementation of Kafka wire protocol.
Last release 1 months ago
20 Aug 2026
Release timing varies
gaps range from 2 weeks to 9 months
Nearly every release is documented
notes for 26 of 26 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
26 releases · first in 2021
One column per quarter.
feat: add KIP-534 Batch attribute delete_horizon by @zac-torkelson in #157
delete_horizon by @zac-torkelson in #157paste dependency by @michaelbeaumont in #160Full Changelog: 0.17.0...0.18.0
delete_horizon by @zac-torkelson in https://github.com/kafka-protocol-rs/kafka-protocol-rs/pull/157Fix ApiKey::iter by @rukai in #139
Full Changelog: 0.16.0...0.17.0
Support kafka 4.0 [breaking change] by @rukai in #120
Full Changelog: 0.15.1...0.16.0
Fix bytes version by @belltoy in #126
[Breaking Change] Remove unneeded trait bounds from Records::encode/Records::decode by @rukai in #102
impl Borrow<[u8]> for StrBytes, not Borrow<str> by @michaelbeaumont in #117Full Changelog: 0.14.0...0.15.0
Records::encode/Records::decode no longer has unneeded trait bounds.ByteBuf::try_get_* methods that already exist on Buf are removed in favor of the Buf methodExplicitly use trait impl in types (branch V0.14) by @rukai in #109
Full Changelog: 0.14.0...0.14.1
[Breaking change] Fix calling Records::encode / Records::decode with None by @rukai in #100
Records::encode / Records::decode with None by @rukai in #100Full Changelog: 0.13.0...0.14.0
Records::encode/Records::decode is now reverted back to their original API, instead encode_with_custom_compression and decode_with_custom_compression is provided for custom compression.ApiKey variants are renamed to remove the Key suffix.iterate_all and valid_versions methods to ApiKeyPartialEq and Display for VersionRangeMake ApiKey non_exhaustive by @rukai in #76
Full Changelog: 0.12.0...0.13.0
IndexMap<K, V> are now of type Vec<V>, the value of K is stored as a field within V.
.get() on the map, the best way to migrate is to refactor your code to avoid the need to lookup by iterating over the items in the response instead.responses.get(name) with something like responses.iter().find(|x| x.name == name) to achieve the same result. But note that this access is now O(N) instead of O(1).GroupId("some group") but is now "some group".gzip, zstd, snappy and lz4 features to enable the different compression algorithms for records (All enabled by default)Add helper methods to RequestKind and ResponseKind by @rukai in #70
client feature to enable encoding of requests and decoding of responses (enabled by default)broker feature to enable encoding of responses and decoding of requests (enabled by default)messages_enums feature to enable ResponseKind and RequestKind enumsencode, decode and header_version methods to ResponseKind and RequestKind[Breaking change] RequestKind/ResponseKind - Avoid redundant variant names by @rukai in #61
Display and more From<T> implementations for StrBytes by @Hackzzila in #64IntoIterator instead of Iterator for RecordBatchEncoder::encode by @Hackzzila in #67RecordBatchEncoder::encode by @Hackzzila in #68EncodeError/DecodeError aliases by @Hackzzila in #69Full Changelog: 0.10.2...0.11.0
derive_builder with custom impl.EncodeError/DecodeError aliasesRecordBatchEncoder::encodeIntoIterator instead of Iterator for RecordBatchEncoder::encodeDisplay and more From<T> implementations for StrBytes.Implement From for RequestKind and ResponseKind.
From<T> for RequestKind and ResponseKind.- Fix lz4 compression.
Use anyhow for public error types. In general, these errors reflect non-recoverable programmer error and should not occur when interacting with a well
anyhow for public error types. In general, these errors reflect non-recoverable programmer error and
should not occur when interacting with a well-formed Kafka implementation.StrBytes::from_str to from_static_str to avoid overlap with the FromStr trait.v3.7.0 Kafka.- Remove the string crate. - Update derive-builder.
string crate.derive-builder.- Expose protocol::gap module.
Re-export indexmap as part of the public api.
indexmap as part of the public api.Implement Zstd and Lz4 compression.
Switch to crc32c crate, providing hardware acceleration for crc operations on supported platforms.
derive_builder implementation in which default fields were not being used correctly.Miscellaneous dependency updates.
Add ApiKey::request_header_version and ApiKey::response_header_version to assist deserializing headers without reference to message type.
ApiKey::request_header_version and ApiKey::response_header_version to assist deserializing
headers without reference to message type.Bump uuid crate version.
Bump uuid crate version.
Clarify versioning support for upstream Kafka, tracking the latest Kafka stable release. Improve docs.
Builder::builder trait for retrieving builder instances from messages
without requiring extra builder imports.#[non_exhaustive] added to all items to ensure forward compatability
with protocol upgrades.Add utilities for dealing with response error codes.
Build messages from crate root.
Add derive builder for all messages.
Initial release.
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →