axum breaking changes

cargo

30 curated breaking changes across major versions of axum. Use this as a migration checklist before bumping dependencies.

30
changes
Breaking changes by transition
  • axum-extra-v0.10.0-rc.1 \u2192 axum-v0.8.0-rc.1breaking

    **breaking:** Make `serve` generic over the listener and IO types ([#2941])

  • axum-extra-v0.10.0-rc.1 \u2192 axum-v0.8.0-rc.1breaking

    **breaking:** Remove `Serve::tcp_nodelay` and `WithGracefulShutdown::tcp_nodelay`. See `serve::ListenerExt` for an API that let you set arbitrary TCP stream properties. ([#2941])

  • axum-extra-v0.10.0-rc.1 \u2192 axum-v0.8.0-rc.1breaking

    **breaking:** `Option<Path<T>>` and `Option<Query<T>>` no longer swallow all error conditions, instead rejecting the request in many cases; see their documentation for details ([#2475])

  • axum-extra-v0.10.0-rc.1 \u2192 axum-v0.8.0-rc.1breaking

    **fixed:** Skip SSE incompatible chars of `serde_json::RawValue` in `Event::json_data` ([#2992])

  • axum-extra-v0.10.0-rc.1 \u2192 axum-v0.8.0-rc.1breaking

    **breaking:** Remove `WebSocket::close`. Users should explicitly send close messages themselves. ([#2974])

  • axum-macros-v0.5.0 \u2192 axum-v0.8.0breaking

    **changed:** Upgraded `tokio-tungstenite` to 0.26 ([#3078])

  • axum-macros-v0.5.0 \u2192 axum-v0.8.0breaking

    **breaking:** Remove `OptionalFromRequestParts` impl for `Query` ([#3088])

  • axum-macros-v0.5.0 \u2192 axum-v0.8.0breaking

    **changed:** Query/Form: Use `serde_path_to_error` to report fields that failed to parse ([#3081]) </details>

  • axum-extra-v0.10.0 \u2192 axum-macros-v0.5.0breaking

    **change:** Update minimum rust version to 1.75 ([#2943]) [#2943]: https://github.com/tokio-rs/axum/pull/2943

  • axum-v0.8.5 \u2192 axum-extra-v0.12.0breaking

    `Cached` extractor requires `cached` feature.

  • axum-v0.8.5 \u2192 axum-extra-v0.12.0breaking

    The handler utilities require `handler` feature.

  • axum-v0.8.5 \u2192 axum-extra-v0.12.0breaking

    The middleware utilities require `middleware` feature.

  • axum-v0.8.5 \u2192 axum-extra-v0.12.0breaking

    **breaking:** `option_layer` now maps the `Response` body type to `axum::body::Body` ([#3469])

  • axum-v0.8.5 \u2192 axum-extra-v0.12.0breaking

    **breaking:** Some new features are added which need to be opted in ([#3485]).

  • axum-core-v0.5.1 \u2192 axum-extra-v0.11.0breaking

    **changed:** Make the `status` function of rejections a `const` function, such as `FormRejection`, `QueryRejection` and `MultipartRejection` ([#3168]) [#3145]: https://github.com/tokio-rs/axum/pull/3145 [#3168]: https://github.com/tokio-rs/axum/pull/3168 [#3186]: https://github.com/tokio-rs/axum/pull/3186

  • axum-core-v0.5.1 \u2192 axum-extra-v0.11.0breaking

    **fixed:** Fix a broken link in the documentation of `ErasedJson` ([#3186])

  • axum-core-v0.5.0-rc.1 \u2192 axum-extra-v0.10.0-rc.1breaking

    **changed:** Deprecated `OptionalPath<T>` and `OptionalQuery<T>` ([#2475])

  • axum-core-v0.5.0-rc.1 \u2192 axum-extra-v0.10.0-rc.1breaking

    **fixed:** `Host` extractor includes port number when parsing authority ([#2242])

  • axum-core-v0.5.0-rc.1 \u2192 axum-extra-v0.10.0-rc.1breaking

    **changed:** The `multipart` feature is no longer on by default ([#3058])

  • axum-core-v0.5.0-rc.1 \u2192 axum-extra-v0.10.0-rc.1breaking

    **added:** Add `RouterExt::typed_connect` ([#2961])

  • axum-core-v0.5.0-rc.1 \u2192 axum-extra-v0.10.0-rc.1breaking

    **added:** Add `json!` for easy construction of JSON responses ([#2962])

  • axum-core-v0.5.0 \u2192 axum-extra-v0.10.0breaking

    **changed:** Query/Form: Use `serde_path_to_error` to report fields that failed to parse ([#3081])

  • axum-core-v0.5.0 \u2192 axum-extra-v0.10.0breaking

    **changed:** Query/Form: Use `serde_path_to_error` to report fields that failed to parse ([#3081]) [#3088]: https://github.com/tokio-rs/axum/pull/3088 </details>

  • axum-core-v0.5.0 \u2192 axum-extra-v0.10.0breaking

    **changed:** Update minimum rust version to 1.75 ([#2943])

  • axum-core-v0.5.0 \u2192 axum-extra-v0.10.0breaking

    **changed:** Deprecated `OptionalPath<T>` ([#2475])

  • axum-core-v0.5.0 \u2192 axum-extra-v0.10.0breaking

    **changed:** The `multipart` feature is no longer on by default ([#3058])

  • axum-v0.8.0-rc.1 \u2192 axum-core-v0.5.0breaking

    **change:** The `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]) [#3118]: https://github.com/tokio-rs/axum/pull/3118 [#2475]: https://github.com/tokio-rs/axum/pull/2475 [RPITIT]: https://blog.rust-lang.org/2023/12/21/async-fn-rpit-in-traits.html [#2308]: https://github.com/tokio-rs/axum/pull/2308 [#2943]: https://github.com/tokio-rs/axum/pull/2943

  • axum-v0.8.0-rc.1 \u2192 axum-core-v0.5.0breaking

    **change:** Update minimum rust version to 1.75 ([#2943])

  • axum-v0.8.0-rc.1 \u2192 axum-core-v0.5.0breaking

    **breaking:**: `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])

  • 0.6 \u2192 0.7api

    `axum::extract::Body` moved to `axum::body::Body`. `axum::extract::RawBody` removed. http/hyper dependencies bumped.

    Migration

    Global search-and-replace `axum::extract::Body` -> `axum::body::Body`. Match on updated middleware signatures.

API access

Get this data programmatically \u2014 free, no authentication.

curl https://depscope.dev/api/breaking/cargo/axum
axum breaking changes — Cargo migration guide | DepScope