PackageTrack
Sign in Get early access

axum-extra

Extra utilities for axum

0.12.6 45M downloads/mo #1299 most downloaded on crates.io tokio-rs/axum

What this package is like to depend on

Last release 4 months ago

14 Apr 2026

Release timing varies

gaps range from 2 weeks to 6 months

Nearly every release is documented

notes for 47 of 47 stable releases

2 versions withdrawn

withdrawn after publishing

5 years old

54 releases · first in 2021

9 releases in the last 12 months

see the full history below

Release timeline

54 releases · Dec 2021 to Apr 2026
2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 54
  1. 0.12.6 14 Apr 2026
    Release notes
    • fixed: Escape backslashes and double quotes in Content-Disposition filenames to prevent header parameter injection in Attachment and FileStream (#3664)
    • vpath! macro now stops the compilation if your path is using deprecated path variables in the old 107 format, such as :var and *var. the only allowed way now is {var}. (#3618)
    • fixed: Return specific error message when multipart body limit is exceeded (#3611)
    Open source →
    Release notes
    • fixed: Escape backslashes and double quotes in Content-Disposition filenames to prevent header parameter injection in Attachment and FileStream (#3664)
    • vpath! macro now stops the compilation if your path is using deprecated path variables in the old 107 format, such as :var and *var. the only allowed way now is {var}. (#3618)
    • fixed: Return specific error message when multipart body limit is exceeded (#3611)
    Open source →
  2. 0.12.5 27 Dec 2025
    Release notes
    • fixed: JsonLines now correctly respects the default body limit (#3591)
    Open source →
  3. 0.12.4 27 Dec 2025
    Release notes
    • changed: Deprecated the Host and Scheme extractors (#3595)
      • Please comment in #3442 if you depend on one of them
    Open source →
  4. 0.12.3 20 Dec 2025
    Release notes
    • changed: Make the typed-routing feature enable the routing feature (#3514)
    • changed: Add trailing newline to ErasedJson::pretty response bodies (#3526)
    • fixed: Fix integer underflow in FileStream::try_range_response for empty files (#3566)
    Open source →
    Release notes
    • changed: Make the typed-routing feature enable the routing feature (#3514)
    • changed: Add trailing newline to ErasedJson::pretty response bodies (#3526)
    • fixed: Fix integer underflow in FileStream::try_range_response for empty files (#3566)
    Open source →
  5. 0.12.2 14 Nov 2025
    Release notes
    • Make it easier to visually scan for default features (#3550)
    Open source →
    Release notes
    • Make it easier to visually scan for default features (#3550)
    Open source →
  6. 0.12.1 02 Nov 2025
    Release notes

    This release contains no changes in code, only a small Cargo.toml fix for docs.rs.

    Open source →
  7. 0.12.0 31 Oct 2025
    Release notes
    • breaking: Remove unused async-stream feature, which was accidentally introduced as an implicit feature through an optional dependency which was no longer being used (#3298)
    • breaking: option_layer now maps the Response body type to axum::body::Body (#3469)
    • breaking: Some new features are added which need to be opted in (#3485).
      • Cached extractor requires cached feature.
      • The handler utilities require handler feature.
      • The middleware utilities require middleware feature.
      • OptionalPath extractor requires optional-path feature.
      • The routing utilities require routing feature.
      • WithRejection extractor requires with-rejection feature.
    • breaking: Upgraded prost dependency to v0.14. (#3517)
    Open source →
  8. 0.11.0 21 Jan 2025 withdrawn
    Release notes

    Yanked from crates.io due to unforeseen breaking change, see #3190 for details.

    Open source →
  9. 0.10.3 30 Sep 2025
    Release notes

    Released without changes to fix docs.rs build.

    Open source →
  10. 0.10.2 28 Sep 2025
    Release notes
    • added: Implement OptionalFromRequest for Host (#3177)
    Open source →
  11. 0.10.1 28 Mar 2025
    Release notes
    • fixed: Fix a broken link in the documentation of ErasedJson (#3186)
    • added: Add vpath! for compile time path verification on static paths. (#3288)
    Open source →
  12. 0.10.0 01 Jan 2025
    Release notes

    since rc.1

    <details>

    • breaking: Remove OptionalFromRequestParts impl for Query (#3088)
    • changed: Query/Form: Use serde_path_to_error to report fields that failed to parse (#3081)

    </details>

    full changelog

    • breaking: Update to prost 0.13. Used for the Protobuf extractor (#2829)
    • changed: Update minimum rust version to 1.75 (#2943)
    • changed: Deprecated OptionalPath<T> (#2475)
    • changed: Query/Form: Use serde_path_to_error to report fields that failed to parse (#3081)
    • changed: The multipart feature is no longer on by default (#3058)
    • fixed: Host extractor includes port number when parsing authority (#2242)
    • added: Add RouterExt::typed_connect (#2961)
    • added: Add json! for easy construction of JSON responses (#2962)
    • added: Add InternalServerError response for logging an internal error and returning HTTP 500 in a convenient way. (#3010)
    • added: Add FileStream for easy construction of file stream responses (#3047)
    • added: Add Scheme extractor (#2507)

    rc.1

    • breaking: Option<Query<T>> no longer swallows all error conditions, instead rejecting the request in many cases; see its documentation for details (#2475)
    • changed: Deprecated OptionalPath<T> and OptionalQuery<T> (#2475)
    • fixed: Host extractor includes port number when parsing authority (#2242)
    • changed: The multipart feature is no longer on by default (#3058)
    • added: Add RouterExt::typed_connect (#2961)
    • added: Add json! for easy construction of JSON responses (#2962)
    • added: Add InternalServerError response for logging an internal error and returning HTTP 500 in a convenient way. (#3010)
    • added: Add FileStream for easy construction of file stream responses (#3047)
    • added: Add Scheme extractor (#2507)

    alpha.1

    • breaking: Update to prost 0.13. Used for the Protobuf extractor (#2829)
    • change: Update minimum rust version to 1.75 (#2943)
    Open source →
  13. 0.10.0-rc.1 17 Dec 2024 pre-release

    Nothing published for this version

  14. 0.10.0-alpha.1 05 Oct 2024 pre-release

    Nothing published for this version

  15. 0.9.6 16 Nov 2024
    Release notes
    • docs: Add links to features table (#3030)
    Open source →
  16. 0.9.5 15 Nov 2024
    Release notes
    • added: Add RouterExt::typed_connect (#2961)
    • added: Add json! for easy construction of JSON responses (#2962)
    Open source →
  17. 0.9.4 20 Sep 2024
    Release notes
    • added: The response::Attachment type (#2789)
    Open source →
  18. 0.9.3 24 Mar 2024
    Release notes
    • added: New tracing feature which enables logging rejections from built-in extractor with the axum::rejection=trace target (#2584)
    Open source →
  19. 0.9.2 13 Jan 2024
    Release notes
    • added: Implement TypedPath for WithRejection<TypedPath, _>
    • fixed: Documentation link to serde::Deserialize in JsonDeserializer extractor (#2498)
    • added: Add is_missing function for TypedHeaderRejection and TypedHeaderRejectionReason (#2503)
    Open source →
  20. 0.9.1 29 Dec 2023
    Release notes
    • change: Update version of multer used internally for multipart (#2433)
    • added: JsonDeserializer extractor (#2431)
    Open source →
  21. 0.9.0 27 Nov 2023
    Release notes
    • added: OptionalQuery extractor (#2310)
    • added: TypedHeader which used to be in axum (#1850)
    • breaking: Update to prost 0.12. Used for the Protobuf extractor
    • breaking: Make tokio an optional dependency
    • breaking: Upgrade cookie dependency to 0.18 (#2343)
    • breaking: Functions and methods that previously accepted a Cookie now accept any T: Into<Cookie> (#2348)
    Open source →
  22. 0.8.0 16 Sep 2023
    Release notes
    • breaking: Update to prost 0.12. Used for the Protobuf extractor (#2224)
    Open source →
  23. 0.7.7 03 Aug 2023
    Release notes
    • added: Clone implementation for ErasedJson (#2142)
    Open source →
  24. 0.7.6 02 Aug 2023
    Release notes
    • fixed: Remove unused dependency (#2135)
    Open source →
  25. 0.7.5 17 Jul 2023
    Release notes
    • fixed: Remove explicit auto deref from PrivateCookieJar example (#2028)
    Open source →
  26. 0.7.4 18 Apr 2023
    Release notes
    • added: Add Html response type (#1921)
    • added: Add Css response type (#1921)
    • added: Add JavaScript response type (#1921)
    • added: Add Wasm response type (#1921)
    Open source →
  27. 0.7.3 11 Apr 2023
    Release notes
    • added: Implement Deref and DerefMut for built-in extractors (#1922)
    • added: Add OptionalPath extractor (#1889)
    Open source →
  28. 0.7.2 22 Mar 2023
    Release notes
    • added: Implement IntoResponse for MultipartError (#1861)
    Open source →
  29. 0.7.1 13 Mar 2023
    Release notes
    • Updated to latest axum-macros
    Open source →
  30. 0.7.0 03 Mar 2023
    Release notes
    • breaking: Remove the spa feature which should have been removed in 0.6.0 (#1802)
    • added: Add Multipart. This is similar to axum::extract::Multipart except that it enforces field exclusivity at runtime instead of compile time, as this improves usability (#1692)
    • added: Implement Clone for CookieJar, PrivateCookieJar and SignedCookieJar (#1808)
    • fixed: Add #[must_use] attributes to types that do nothing unless used (#1809)
    Open source →
  31. 0.6.0 27 Feb 2023
    Release notes
    • breaking: Change casing of ProtoBuf to Protobuf (#1595)

    • breaking: SpaRouter has been removed. Use ServeDir and ServeFile from tower-http instead:

      // before
      Router::new().merge(SpaRouter::new("/assets", "dist"));
      
      // with ServeDir
      Router::new().nest_service("/assets", ServeDir::new("dist"));
      
      // before with `index_file`
      Router::new().merge(SpaRouter::new("/assets", "dist").index_file("index.html"));
      
      // with ServeDir + ServeFile
      Router::new().nest_service(
          "/assets",
          ServeDir::new("dist").not_found_service(ServeFile::new("dist/index.html")),
      );
      

      See the static-file-server-example for more examples (#1784)

    Open source →
  32. 0.5.0 12 Feb 2023
    Release notes
    • added: Add option_layer for converting an Option<Layer> into a Layer (#1696)
    • added: Implement Layer and Service for Either (#1696)
    • added: Add TypedPath::with_query_params (#1744)
    • breaking: Update to cookie 0.17 (#1747)
    Open source →
  33. 0.4.2 02 Dec 2022
    Release notes
    • fixed: Bug fixes for RouterExt:{route_with_tsr, route_service_with_tsr} (#1608):
      • Redirects to the correct URI if the route contains path parameters
      • Keeps query parameters when redirecting
      • Better improved error message if adding route for /
    Open source →
  34. 0.4.1 29 Nov 2022
    Release notes
    • fixed: Fix wrong From impl for Resource (#1589)
    Open source →
  35. 0.4.0 25 Nov 2022
    Release notes
    • added: Add RouterExt::route_with_tsr for adding routes with an additional "trailing slash redirect" route (#1119)
    • added: Support chaining handlers with HandlerCallWithExtractors::or (#1170)
    • added: Add Protocol Buffer extractor and response (#1239)
    • added: Add Either* types for combining extractors and responses into a single type (#1263)
    • added: WithRejection extractor for customizing other extractors' rejections (#1262)
    • added: Add sync constructors to CookieJar, PrivateCookieJar, and SignedCookieJar so they're easier to use in custom middleware
    • changed: For methods that accept some S: Service, the bounds have been relaxed so the return type can be any type that implements IntoResponse rather than being a literal Response
    • change: axum-extra's MSRV is now 1.60 (#1239)
    • breaking: Form has a new rejection type (#1496)
    • breaking: Query has a new rejection type (#1496)
    • breaking: Resource::nest and Resource::nest_collection have been removed. You can instead convert the Resource into a Router and add additional routes as necessary (#1086)
    • breaking: SignedCookieJar and PrivateCookieJar now extracts the keys from the router's state, rather than extensions
    • breaking: Resource has a new S type param which represents the state (#1155)
    • breaking: RouterExt::route_with_tsr now only accepts MethodRouters (#1155)
    • added: RouterExt::route_service_with_tsr for routing to any Service (#1155)

    <details> <summary>0.4.0 Pre-Releases</summary>

    Open source →
  36. 0.4.0-rc.3 19 Nov 2022 pre-release
    Release notes
    • breaking: Depend axum 0.6.0-rc.5 and axum-macros 0.3.0-rc.3
    Open source →
  37. 0.4.0-rc.2 09 Nov 2022 pre-release
    Release notes
    • breaking: Form has a new rejection type (#1496)
    • breaking: Query has a new rejection type (#1496)
    Open source →
  38. 0.4.0-rc.1 23 Aug 2022 pre-release
    Release notes
    • added: Add RouterExt::route_with_tsr for adding routes with an additional "trailing slash redirect" route (#1119)
    • breaking: Resource::nest and Resource::nest_collection has been removed. You can instead convert the Resource into a Router and add additional routes as necessary (#1086)
    • changed: For methods that accept some S: Service, the bounds have been relaxed so the response type must implement IntoResponse rather than being a literal Response
    • added: Support chaining handlers with HandlerCallWithExtractors::or (#1170)
    • change: axum-extra's MSRV is now 1.60 (#1239)
    • breaking: SignedCookieJar and PrivateCookieJar now extracts the keys from the router's state, rather than extensions
    • added: Add Protocol Buffer extractor and response (#1239)
    • added: Add Either* types for combining extractors and responses into a single type (#1263)
    • added: WithRejection extractor for customizing other extractors' rejections (#1262)
    • added: Add sync constructors to CookieJar, PrivateCookieJar, and SignedCookieJar so they're easier to use in custom middleware
    • breaking: Resource has a new S type param which represents the state (#1155)
    • breaking: RouterExt::route_with_tsr now only accepts MethodRouters (#1155)
    • added: RouterExt::route_service_with_tsr for routing to any Service (#1155)

    </details>

    Open source →
  39. 0.3.7 09 Aug 2022
    Release notes
    • fixed: Depend on axum 0.5.15 which contains a fix for an accidental breaking change.
    Open source →
  40. 0.3.6 02 Jul 2022
    Release notes
    • fixed: Fix feature labels missing in generated docs (#1137)
    Open source →
  41. 0.3.5 27 Jun 2022
    Release notes
    • added: Add JsonLines for streaming newline delimited JSON (#1093)
    • change: axum-extra's MSRV is now 1.56 (#1098)
    Open source →
  42. 0.3.4 08 Jun 2022
    Release notes
    • fixed: Use impl IntoResponse less in docs (#1049)
    • added: Add AsyncReadBody for creating a body from a tokio::io::AsyncRead (#1072)
    Open source →
  43. 0.3.3 18 May 2022
    Release notes
    • added: Add extract::Query which supports multi-value items (#1041)
    • added: Support customizing rejections for #[derive(TypedPath)] (#1012)
    Open source →
  44. 0.3.2 15 May 2022
    Release notes
    • added: Add extract::Form which supports multi-value items (#1031)
    Open source →
  45. 0.3.1 10 May 2022
    Release notes
    • fixed: Option and Result are now supported in typed path route handler parameters (#1001)
    • fixed: Support wildcards in typed paths (#1003)
    • added: Support using a custom rejection type for #[derive(TypedPath)] instead of PathRejection (#1012)
    Open source →
  46. 0.3.0 27 Apr 2022
    Release notes
    • fixed: Don't depend on axum with default features enabled (#913)
    • breaking: Private and signed cookies now requires enabling the cookie-private and cookie-signed features respectively (#949)
    • changed: Update to tower-http 0.3 (#965)
    Open source →
  47. 0.2.1 03 Apr 2022
    Release notes
    • added: Re-export SameSite and Expiration from the cookie crate (#898)
    • added: Add PrivateCookieJar for managing private cookies (#900)
    • added: Add SpaRouter for routing setups commonly used for single page applications (#904)
    • fixed: Fix SignedCookieJar when using custom key types (#899)
    Open source →
  48. 0.2.0 31 Mar 2022
    Release notes
    • added: Add TypedPath::to_uri for converting the path into a Uri (#790)
    • added: Extractors and responses for dealing with cookies. See extract::cookies for more details (#816)
    • breaking: CachedRejection has been removed (#699)
    • breaking: <Cached<T> as FromRequest>::Rejection is now T::Rejection. (#699)
    • breaking: middleware::from_fn has been remove from axum-extra and moved into the main axum crate (#719)
    • breaking: HasRoutes has been removed. Router::merge now accepts Into<Router> (#819)
    • breaking: RouterExt::with method has been removed. Use Router::merge instead. It works identically (#819)
    Open source →
  49. 0.1.5 01 Mar 2022
    Release notes
    • added: Add TypedPath::to_uri for converting the path into a Uri (#790)
    Open source →
  50. 0.1.4 22 Feb 2022
    Release notes
    • fix: Depend on the right versions of axum and axum-macros (#782)
    Open source →
  51. 0.1.3 22 Feb 2022 withdrawn
    Release notes
    • added: Add type safe routing. See axum_extra::routing::typed for more details (#756)
    • fix: Depend on tower with default_features = false (#666)
    • change: middleware::from_fn has been deprecated and moved into the main axum crate (#719)
    Open source →
  52. 0.1.2 13 Jan 2022
    Release notes
    • fix: Depend on tower with default_features = false ([#666])
    Open source →
  53. 0.1.1 27 Dec 2021
    Release notes
    • Add middleware::from_fn for creating middleware from async functions (#656)
    • Add support for returning pretty JSON response in response::ErasedJson (#662)
    Open source →
  54. 0.1.0 02 Dec 2021
    Release notes
    • Initial release.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive