NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #273 most downloaded on crates.io
Core types and traits for axum
Last release 9 months ago
27 Dec 2025
Release timing varies
gaps range from 2 weeks to 8 months
Nearly every release is documented
notes for 29 of 31 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
37 releases · first in 2021
One column per quarter.
Improve error messages with #[diagnostic::do_not_recommend] .
Improve error messages with #[diagnostic::do_not_recommend].
Released without changes to fix docs.rs build.
Released without changes to fix docs.rs build.
fixed: Removed unused rustversion dependency ([#3502])
rustversion dependency (#3502)added: DefaultBodyLimit::apply for changing the DefaultBodyLimit inside extractors. ([#3368])
DefaultBodyLimit::apply for changing the DefaultBodyLimit inside extractors.
(#3368)added: Implement Stream::size_hint for BodyDataStream ([#3195])
Stream::size_hint for BodyDataStream (#3195)Yanked from crates.io due to unforeseen breaking change, see [#3190] for details.
Yanked from crates.io due to unforeseen breaking change, see #3190 for details.
change: The Display impl of all rejections generated by the define_rejection!() will now include the Display output of the inner error too. This match
<details>
Display impl of all rejections generated by the
define_rejection!() will now include the Display output of the
inner error too. This matches the body_text() fn output now. (#3118)</details>
#[async_trait] with return-position impl Trait in traits (#2308)Option<T> as an extractor now requires T to implement the
new trait OptionalFromRequest (if used as the last extractor) or
OptionalFromRequestParts (other extractors) (#2475)Display impl of all rejections generated by the
define_rejection!() will now include the Display output of the
inner error too. This matches the body_text() fn output now. (#3118)Option<T> as an extractor now requires T to implement the
new trait OptionalFromRequest (if used as the last extractor) or
OptionalFromRequestParts (other extractors) (#2475)#[async_trait] with return-position impl Trait in traits (#2308)Nothing published for this version
Pre-release Pre-release Compare
Pre-release
Pre-release
Compare
fixed: Compile errors from the internal __log_rejection macro under certain Cargo feature combinations between axum crates ([#2933])
__log_rejection macro under
certain Cargo feature combinations between axum crates (#2933)added: Derive Clone and Copy for AppendHeaders ([#2776])
Clone and Copy for AppendHeaders (#2776)must_use attribute on AppendHeaders (#2846)must_use attribute on ErrorResponse (#2846)must_use attribute on IntoResponse::into_response (#2846)must_use attribute on IntoResponseParts trait methods (#2846)Copy for DefaultBodyLimit (#2875)DefaultBodyLimit::max and DefaultBodyLimit::disable are now
allowed in const context (#2875)added: Implement IntoResponseParts for () ([#2471])
IntoResponseParts for () (#2471)added: Body implements From<()> now ([#2411])
Body implements From<()> now (#2411)Fix from_stream doc link to Stream in docs ([#2391])
Stream in docs (#2391)added: Implement IntoResponse for (R,) where R: IntoResponse ([#2143])
IntoResponse for (R,) where R: IntoResponse (#2143)DefaultBodyLimit to individual routes (#2157)B type param has been removed) ([#1751] and [#1789]):
FromRequestPartsFromRequestRequestExthyper::Body as that type is removed
in hyper 1.0. Instead axum has its own body type at axum_core::body::Body ([#1751])- Changes to private APIs.
fixed: Add #[must_use] attributes to types that do nothing unless used ([#1809])
#[must_use] attributes to types that do nothing unless used (#1809)added: Implement IntoResponse for &'static [u8; N] and [u8; N] ([#1690])
IntoResponse for &'static [u8; N] and [u8; N] (#1690)added: Add body_text and status methods to built-in rejections ([#1612])
body_text and status methods to built-in rejections (#1612)added: Added new FromRequestParts trait. See axum's changelog for more details ([#1272])
FromRequestParts trait. See axum's changelog for more
details (#1272)FromRequest has been reworked and RequestParts has been
removed. See axum's changelog for more details (#1272)BodyAlreadyExtracted has been removed (#1272)AppendHeaders now works on any impl IntoIterator (#1495)<details> <summary>0.3.0 Pre-Releases</summary>
added: Add DefaultBodyLimit::max for changing the default body limit ([#1397])
breaking: Added default limit to how much data Bytes::from_request will consume. Previously it would attempt to consume the entire request body withou
breaking: Added default limit to how much data Bytes::from_request will
consume. Previously it would attempt to consume the entire request body
without checking its length. This meant if a malicious peer sent an large (or
infinite) request body your server might run out of memory and crash.
The default limit is at 2 MB and can be disabled by adding the new
DefaultBodyLimit::disable() middleware. See its documentation for more
details.
This also applies to String which used Bytes::from_request internally.
(#1346)
breaking: FromRequest has been reworked and RequestParts has been removed. See axum's changelog for more details ([#1272])
Nothing published for this version
breaking: Added default limit to how much data Bytes::from_request will consume. Previously it would attempt to consume the entire request body withou
breaking: Added default limit to how much data Bytes::from_request will
consume. Previously it would attempt to consume the entire request body
without checking its length. This meant if a malicious peer sent an large (or
infinite) request body your server might run out of memory and crash.
The default limit is at 2 MB and can be disabled by adding the new
DefaultBodyLimit::disable() middleware. See its documentation for more
details.
This also applies to String which used Bytes::from_request internally.
(#1346)
fix: Fix typos in RequestParts docs ([#1147])
RequestParts docs (#1147)change: axum-core's MSRV is now 1.56 ([#1098])
added: Automatically handle http_body::LengthLimitError in FailedToBufferBody and map such errors to 413 Payload Too Large ([#1048])
added: Implement IntoResponse and IntoResponseParts for http::Extensions ([#975])
IntoResponse and IntoResponseParts for http::Extensions (#975)IntoResponse for (http::response::Parts, impl IntoResponse) (#950)IntoResponse for (http::response::Response<()>, impl IntoResponse) (#950)IntoResponse for (Parts | Request<()>, $(impl IntoResponseParts)+, impl IntoResponse) (#980)added: Add response::ErrorResponse and response::Result for IntoResponse-based error handling ([#921])
response::ErrorResponse and response::Result for
IntoResponse-based error handling (#921)added: Add AppendHeaders for appending headers to a response rather than overriding them ([#927])
AppendHeaders for appending headers to a response rather than overriding them (#927)added: Add RequestParts::extract which allows applying an extractor as a method call ([#897])
RequestParts::extract which allows applying an extractor as a method call (#897)This includes these breaking changes:
added: Add IntoResponseParts trait which allows defining custom response
types for adding headers or extensions to responses (#797)
breaking: Using HeaderMap as an extractor will no longer remove the headers and thus
they'll still be accessible to other extractors, such as axum::extract::Json. Instead
HeaderMap will clone the headers. You should prefer to use TypedHeader to extract only the
headers you need (#698)
This includes these breaking changes:
RequestParts::take_headers has been removed.RequestParts::headers returns &HeaderMap.RequestParts::headers_mut returns &mut HeaderMap.HeadersAlreadyExtracted has been removed.HeadersAlreadyExtracted variant has been removed from these rejections:
RequestAlreadyExtractedRequestPartsAlreadyExtracted<HeaderMap as FromRequest<_>>::Rejection has been changed to std::convert::Infallible.breaking: axum::http::Extensions is no longer an extractor (ie it
doesn't implement FromRequest). The axum::extract::Extension extractor is
not impacted by this and works the same. This change makes it harder to
accidentally remove all extensions which would result in confusing errors
elsewhere (#699)
This includes these breaking changes:
RequestParts::take_extensions has been removed.RequestParts::extensions returns &Extensions.RequestParts::extensions_mut returns &mut Extensions.RequestAlreadyExtracted has been removed.<Request as FromRequest>::Rejection is now BodyAlreadyExtracted.<http::request::Parts as FromRequest>::Rejection is now Infallible.ExtensionsAlreadyExtracted has been removed.breaking: RequestParts::body_mut now returns &mut Option<B> so the
body can be swapped (#869)
added: Implement IntoResponse for bytes::BytesMut and bytes::Chain ([#767])
IntoResponse for bytes::BytesMut and bytes::Chain<T, U> (#767)added: axum_core::Response now exists as a shorthand for writing Response ([#590])
axum_core::response::Response now exists as a shorthand for writing Response<BoxBody> (#590)- Initial release.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →