axum_static

Crates.ioaxum_static
lib.rsaxum_static
version1.8.0
created_at2023-01-22 04:47:36.194269+00
updated_at2025-12-03 17:19:10.598379+00
descriptionstatic file serving router for axum server
homepage
repositoryhttps://github.com/azzybana/axum_static
max_upload_size
id764756
size32,361
myyrakle (myyrakle)

documentation

https://docs.rs/axum_static

README

axum_static

GitHub license

static file serving for axum

Version

You must use axum_static that matches your axum version.

  • axum 0.6 => axum_static ~1.6.*
  • axum 0.7 => axum_static ~1.7.*
  • axum 0.8 => axum_static ~1.8.*

Usage

First install crate.

cargo add axum_static

Then, create a static route and nest it in the existing route like so

let app = Router::new()
        .nest("/", axum_static::static_router("public"))

Features

  • handle_error: Adds graceful IO error responses via tower_http's handle_error hook.
  • mime_guess: Swaps the manual extension map for mime_guess so content-types stay current automatically.
  • status_code: Builds on handle_error to include human-readable status text in error responses.
  • tracing: Emits structured warn! logs for unknown MIME types and error! logs for IO failures.

State

If your app has state, you'll need to add with_state, because static_router does not use state (()):

let app = Router::new()
        .route("/", get(index))
        ......
        .nest("/static", axum_static::static_router("static").with_state())
        ......
        .with_state(YourAppState { ... })

The argument of the static_router function is the path to read static files based on the project root path.

Then you can read the file like this. It can also be a sub directory.

This is the end.

Commit count: 0

cargo fmt