// the find
salvo-rs/salvo
A powerful web framework built with a simplified design.
Salvo is a Rust async web framework built on Hyper and Tokio that tries to make handler and middleware authoring feel uniform — both are just functions annotated with `#[handler]`. It targets developers who want something with more batteries included than Axum but less ceremony than Actix-web, with HTTP/1, HTTP/2, HTTP/3, ACME, WebSocket, and OpenAPI all available as feature flags.
The handler model is genuinely clean: `#[handler]` lets you declare only the parameters you actually need (request, response, depot, or none), and the macro figures out the rest via proc-macro inspection — no trait gymnastics required. OpenAPI integration is unusually good: swapping `#[handler]` for `#[endpoint]` auto-generates schema from types and doc comments, with Swagger UI, Redoc, RapiDoc, and Scalar all bundled. The crate is well-decomposed — ACME, CORS, CSRF, rate limiting, JWT auth, and proxy are separate optional crates, so you only pull what you use. The `unsafe-forbidden` badge is backed by a real `#![forbid(unsafe_code)]` in the core crate, which is meaningful for a low-level networking library.
The community is small — 4400 stars and 271 forks is thin compared to Axum's 20k+, which means fewer third-party middleware crates, fewer Stack Overflow answers, and higher risk that a niche bug sits unresolved. The `Depot` type-map for passing data between handlers is ergonomic on the surface but type-unsafe at runtime: you insert by type key and get `None` if it's missing, which is a class of bugs that Axum's `Extension` and especially its `State` extractor eliminated. HTTP/3 support via Quinn is there, but it's not widely battle-tested in production Rust services yet, so advertising it as a first-class feature oversells the maturity. Documentation quality drops off sharply past the quick-start examples — the API docs exist, but complex use cases (streaming responses, multipart uploads at scale, connection lifecycle hooks) require reading source code.