NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #48 most downloaded on crates.io
Types and traits for working with bytes
Last release 3 months ago
08 Jul 2026
Release timing varies
gaps range from 3 weeks to 8 months
Most releases are documented
notes for 38 of 55 stable releases
4 versions withdrawn
withdrawn after publishing
12 years old
59 releases · first in 2015
Properly handle when Box::new panics
One column per quarter.
Fix integer overflow in BytesMut::reserve
BytesMut::reservefix: BytesMut only reuse if src has remaining
Fix memory leak when using to_vec with Bytes::from_owner
Add feature to support platforms without atomic CAS
Add Bytes::from_owner to enable externally-allocated memory
Guarantee address in split_off / split_to for empty slices
split_off/split_to for empty slices (#740)Fix default impl of Buf::{get_int, get_int_le}
This release reverts the following change due to a regression:
Add conversion from Bytes to BytesMut (#695, #710)
Bytes to BytesMut (#695, #710)BytesMut::zeroed works (#714)Buf::chunk (#717)BytesMut::truncate<BytesMut as Buf>::advance impl (#698)must_use suggestion of BytesMut::split (#699)ManuallyDrop instead of mem::forget (#678)len in BytesMut::reserve (#682)Bytes::copy_to_bytes (#688)BytesMut::truncate (#694)BytesMut::resize (#696)Bytes::split_to, Bytes::split_off (#689, #693)offset_from in more places (#705)IntoIter (#707)This release fixes a bug where Bytes::is_unique returns incorrect values when the Bytes originates from a shared BytesMut.
This release fixes a bug where Bytes::is_unique returns incorrect values when
the Bytes originates from a shared BytesMut. (#718)
Move comment to correct constant
Bytes::is_unique (#643)UninitSlice::as_uninit_slice_mut() logic (#644)self. instead of Self:: (#642)BytesMut: Assert alignment of Shared (#652)From<Vec> (#667)sub instead of offset (#668)set_vec_pos does not need a second parameter (#672)get_vec_pos: use &self instead of &mut self (#670)split_at/split_to (#663)Iterator from the prelude (#673)copy_to_bytes: Add panic section to docs (#676)ManuallyDrop instead of mem::forget (#675)Add UninitSlice::{new,uninit} (#598, #599)
UninitSlice::{new,uninit} (#598, #599)BufMut for &mut [MaybeUninit<u8>] (#597)BytesMut::extend_from_slice as inline (#595)Make IntoIter constructor public
IntoIter constructor public (#581)BytesMut (#592)std (#591)Rename and expose BytesMut::spare_capacity_mut
BytesMut::spare_capacity_mut (#572)Buf and BufMut (#576)Bytes::new etc should return Self not Bytes (#568)Fix unbounded memory growth when using reserve
reserve (#560)Add conversion from BytesMut to Vec (#543, #554)
BytesMut::zeroed (#517)Extend<Bytes> for BytesMut (#527)BytesMut to Vec<u8> (#543, #554)Bytes to Vec<u8> (#547)UninitSlice::as_uninit_slice_mut() (#548)Bytes::{len,is_empty} (#514)BytesMut::reserve (#539, #544)remaining_mut() on chain (#488)BytesMut (#555)BytesMut::unsplit docs (#535)BufMut::put_bytes(self, val, cnt)
BufMut::put_bytes(self, val, cnt) (#487)From<Box<[u8]>> for Bytes (#504)put_slice for &mut [u8] (#483)Chain::remaining (#482)UninitSlice methods (#443)copy_to_bytes for Chain and Take (#481)BufMut allocation guarantees (#501)BufMut::put_int behavior (#486)clear and truncate. (#508)mark Vec::put_slice with #[inline]
Vec::put_slice with #[inline] (#459)Box::into_raw instead of mem::forget-in-disguise (#458)Rename Buf/BufMut methods bytes() and bytes_mut() to chunk() and chunk_mut()
Buf/BufMut methods bytes() and bytes_mut() to chunk() and chunk_mut() (#450)API polish in preparation for a 1.0 release.
API polish in preparation for a 1.0 release.
BufMut is now an unsafe trait (#432).BufMut::bytes_mut() returns &mut UninitSlice, a type owned by bytes to
avoid undefined behavior (#433).Buf::copy_to_bytes(len) replaces Buf::into_bytes() (#439).Buf/BufMut utility methods are moved onto the trait and *Ext traits are
removed (#431).BufMut::bytes_vectored_mut() (#430).new methods on combinator types (#434).Improve BytesMut to reuse buffer when fully advanced.
BytesMut to reuse buffer when fully advanced.BytesMut::{as_mut, set_len} with #[inline].Bytes.loom to dev-dependencies.Allow using the serde feature in no_std environments (#385).
serde feature in no_std environments (#385).BufMut::advance_mut to panic if advanced passed the capacity (#354)..BytesMut::freeze ignoring amount previously advanced (#352).Fix reversed arguments in PartialOrd for Bytes.
Bytes::new a const fn.From<BytesMut> for Bytes.PartialOrd for Bytes.Bytes::truncate losing original capacity when repr is an unshared Vec.Bytes::from(Vec) when allocator gave Vec a pointer with LSB set.Bytes::slice_ref if argument is an empty slice.must_use attributes to split, split_off, and split_to methods (#337).
must_use attributes to split, split_off, and split_to methods (#337).Bytes when constructed with an empty Vec<u8> (#341, #342).Bytes::truncate with a size large than the length will no longer clear the Bytes (#333).Limit methods into_inner, get_ref, get_mut, limit, and set_limit (#325).
Limit methods into_inner, get_ref, get_mut, limit, and set_limit (#325).Growth documentation for BytesMut
BytesMut (#321)Potential overflow in copy_to_slice
copy_to_sliceBytes is now a "trait object", allowing for custom allocation strategies (#298)BytesMut implicitly grows internal storage. remaining_mut() returns
usize::MAX (#316).BufMut::bytes_mut returns &mut [MaybeUninit<u8>] to reflect the unknown
initialization state (#305).Buf / BufMut implementations for &[u8] and &mut [u8]
respectively (#261).Buf / BufMut "extra" functions to an extension trait (#306).BufMutExt::limit (#309).Bytes::slice takes a RangeBounds argument (#265).Bytes::from_static is now a const fn (#311).no_std support (#281).get_*, put_*, get_*_le, and put_*le accessors for handling byte order.BorrowMut implementation for BytesMut (#185).IntoBuf (#288).Buf implementation for &str (#301).byteorder dependency (#280).iovec dependency, use std::IoSlice instead (#263).either dependency (#315).i128 feature -- now available on stable. (#276).Implement FromIterator<&'a u8> for BytesMut/Bytes (#244).
FromIterator<&'a u8> for BytesMut/Bytes (#244).Buf for VecDeque (#249).Use raw pointers for potentially racy loads (#233).
BufRead for buf::Reader (#232).impl Buf and BufMut for Either (#225).
Buf and BufMut for Either (#225).Bytes::slice_ref (#208).Add 128 bit number support behind a feature flag (#209).
IntoBuf for &mut [u8]Fix panic in BytesMut FromIterator implementation.
BytesMut FromIterator implementation.Make Buf and BufMut usable as trait objects (#186).
Buf and BufMut usable as trait objects (#186).Implement FromIterator for Bytes/BytesMut (#148).
advance fn to Bytes/BytesMut (#166).unsplit fn to BytesMut (#162, #173).Add extra PartialEq implementations.
Take::bytesPartialEq implementations.Bytes::with_capacityAsMut[u8] for BytesMutAdd serde support behind feature flag
extend_from_slice on Bytes and BytesMuttruncate and clear on BytesBump minimum Rust version to 1.15
Improved Debug implementation for Bytes
Debug implementation for BytesExpose buf module and have most types available from there vs. root.
buf module and have most types available from there vs. root.IntoBuf for T: Buf.FromBuf and Buf::collect.Buf.Buf and BufMut.Buf::chain.BytesMut::reserve.Debug for more types.Source in favor of IntoBuf.Extend for BytesMut.* Initial release
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →