PRODSovereign European BaaS platformOpen Dashboard →

Engineering · 9 min read

Axum vs Actix-web: which Rust framework in production?

Affane Daylami · Fondateur · August 9, 2026

Back to blog

Axum and Actix-web are the two asynchronous HTTP frameworks most used for building a Rust backend in production. Aurabase decided early: ten of the eleven backend services run on Axum, none on Actix-web.

This English text was generated automatically from the French original and has not been reviewed yet.

This choice is not an absolute judgment on the two frameworks. It's an architectural compromise, documented here with what we've verified in the code and in public records — not with an unmeasured performance figure.

The essentials

Axum does not build anything proprietary: it relies on tower::Service for its middleware, on Hyper for transport, and prohibits any unsafecode. Actix-web embeds its own middleware system (Logger, Session, CORS), native HTTP/2, and itself cites the TechEmpower Framework Benchmark as proof of speed. On crates.io, Axum today has more than 436 million downloads compared to around 78 million for Actix-web - despite almost four years of age gap to its disadvantage. Aurabase chose Axum for Tower composition, verified in eleven real Cargo.toml repositories, not for an unmeasured performance figure.

#
Context

Two frameworks, the same Tokio base

Axum and Actix-web both run on Tokio, the reference asynchronous runtime in Rust. The Actix-web README states this bluntly — “Full Tokio compatibility” — and its official code example does not use any actor from the historical actix framework: a classic async fn handler, annotated #[get(...)], is sufficient. The confusion “Actix-web necessarily requires actors” no longer corresponds to the current API.

Axum was born in Tokyo's direct orbit: the repository belongs to the GitHub organization tokio-rs, and its official documentation is unambiguous — “axum is designed to work with tokio and hyper. Runtime and transport layer independence is not a goal, at least for the time being. »

So it's not a choice between two competing runtimes, but between two ways of building an HTTP API on top of the same async engine. This comparison covers four verifiable areas – middleware model, declared memory security, native HTTP surface, adoption measured on crates.io and GitHub – then explains, with supporting code, why the Rust core of Aurabase chose Axum.

#
Architecture

Composable Middleware Tower vs. Integrated System

Axum does not build any proprietary middleware systems. It relies entirely on tower::Service: timeouts, tracing, compression, authorization — everything comes “for free” via the Tower ecosystem, according to its own README. Middleware written for a Hyper or Tonic application can be reused as is in an Axum application, without adaptation.

Actix-web takes the opposite path: it embeds its own middleware system (Logger, Session, CORS, etc.), documented in its user guide, with its own associated HTTP client (awc). It's a more integrated platform — fewer parts to assemble, but also less direct reuse with the rest of the generic Rust async ecosystem.

Routing follows the same explicit composition logic. Axum claims a “macro-free API” for declaring routes — Router::new().route(...) remains an ordinary Rust value — where Actix-web relies on dedicated macros by HTTP method (#[get(...)]) placed directly above the handler. Two statement styles, not a difference in ability.

Nuance

Axum's composability has a cost: you must add tower-http to obtain CORS, compression or query size limitation, where Actix-web delivers them internally. Out-of-the-box integration versus explicit composition — a real trade-off, not a flaw on one side.

#
Memory security

Zero declared unsafe, two different MSRVs

Axum claims #![forbid(unsafe_code)] in its source code: 100% of the framework is written in secure Rust, with no loopholes. Actix-web does not make an equivalent statement in its README — this does not mean that the framework is dangerous, only that no such guarantee is publicly displayed by the project.

The two frameworks set a different minimum version of Rust: Axum is compatible from Rust 1.80, Actix-web requires Rust 1.88. A narrower window for Actix-web, which may matter if your toolchain is stuck on an older version.

#
Features

What each one ships natively

Actix-web lists a large HTTP surface directly in its crate: HTTP/1.x and HTTP/2, WebSockets, transparent compression (br, gzip, deflate, zstd), TLS via OpenSSL or Rustls. Everything comes together, with no additional dependencies to choose from.

Axum remains deliberately minimal: routing, extractors, error handling — the rest (compression, CORS, request limitation, tracing) comes from tower-http, a companion crate from the same ecosystem. Aurabase, for example, only enables the cors, trace, compression-gzip, request-id, timeout , and limit features of tower-http — a deliberate selection, not the entire package.

#
Performance

What we can check, and what we don't republish

Actix-web claims its speed by citing a precise external source: “One of the fastest web frameworks available according to the TechEmpower Framework Benchmark” (round r21, composite), with a direct link to techempower.com in its own README. This is the type of quote you can verify yourself.

Axum makes no comparable claim. Its README is limited to a more modest statement — “axum is a relatively thin layer on top of hyper and adds very little overhead” — with two links to third-party community benchmarks, not an official project figure.

What we don't do here

Aurabase does not currently publish any quantified comparison of Axum versus Actix-web on its own production load. A number that we have not measured ourselves will never be republished here as a product argument — see our reproducible benchmark methodology, built precisely to publish a verifiable method rather than a bare number.

#
Adoption

What crates.io and GitHub say, as of this writing

On crates.io, Axum has 436,464,896 downloads in total, including 109,000,226 over the last 90 days. Actix-web accumulates 78,074,020 downloads in total, including 9,730,975 on the same recent window (crates.io, accessed August 23, 2026). On this point, the gap is clear: Axum today receives around 11 times more recent downloads than Actix-web.

The paradox: Actix-web is the older of the two, published on crates.io since October 2017, compared to July 2021 for Axum. On GitHub, the popularity gap is narrower — 26,931 stars for tokio-rs/axum against 24,793 for actix/actix-web (GitHub, accessed August 23, 2026) — and Actix-web keeps more forks (1,880 compared to 1,462), a sign of a historical contributor base still active.

Actix-web remains far from being abandoned: its version 4.15.0 was published on August 21, 2026, three days before the writing of this article. On the GitHub issue queue, Axum displays 75 open tickets compared to 192 for Actix-web — a maintenance signal to be read with caution: a history almost four years longer mechanizes a longer queue, this is not proof of a less careful project.

Astuce

Axum's README itself warns that its main branch is preparing a version 0.9 with breaking changes — the stable branch published on crates.io remains 0.8.x. If you're starting today, pin the exact version rather than following the repository's default branch.

#
The Aurabase choice

Why Axum, verified in code

The Aurabase root Cargo workspace has eleven services. Ten rely directly on Axum — from the API gateway (aura-gateway) to thenative AI engine (aura-ai), including authentication and storage. The eleventh, aura-migrator, is a migration CLI tool without an HTTP server: it simply has nothing to choose from. No Cargo.toml in the repository — nor any entry in the root Cargo.lock — declares actix-web, even in transitive dependency; and no .rs file contains use actix_web::instruction.

Cargo.toml (workspace root)toml
axum       = { version = "0.8", features = ["ws", "multipart", "macros"] }
tower      = { version = "0.5", features = ["full"] }
tower-http = { version = "0.6", features = ["cors", "trace", "compression-gzip", "request-id", "timeout", "limit"] }
hyper      = { version = "1", features = ["full"] }

This choice is not cosmetic: the Aurabase gateway (aura-gateway) stacks its middleware with tower::ServiceBuilder and Layer Tower — TraceLayer, TimeoutLayer, RequestBodyLimitLayer — supplemented by in-house layers via axum::middleware::from_fn for request identifier, authentication and security headers. This is exactly the composition model that Axum's README highlights: a Tower middleware is stacked, tested and reused independently of the rest of the router.

Verified vs. product objective

What is verified here is the architecture of choice — the real dependency, the real composition of the middlewares. No quantified performance gain is claimed: see the previous section on what we do not republish.

#
Overview

Axum and Actix-web, side by side

MiddlewareComposition tower::Service, nothing proprietaryIntegrated system (Logger, Session, CORS)
Memory securityforbid(unsafe_code) declaredNo equivalent declaration
MSRVRust 1.80Rust 1.88
LicenseMITApache-2.0 OR MIT
Native HTTPRouting + extractors; the rest via tower-httpHTTP/1.x, HTTP/2, compression, integrated TLS
crates.io downloads (total)436 464 89678 074 020
Downloads crates.io (90 days)109 000 2269 730 975
GitHub Stars26 93124 793
On crates.io sinceJuly 2021October 2017
Used by AurabaseYes — 10 of 11 Rust servicesNo — no dependencies, direct or transitive

Sources: crates.io API (/api/v1/crates/axum, /api/v1/crates/actix-web) and GitHub API, accessed August 23, 2026. Official READMEs tokio-rs/axum and actix/actix-web for the rest.

#
Decision

Who should choose what

You start a modular, multi-service Rust backend. Axum is a natural fit — its Tower composition makes it easier to share middleware between services, as Aurabase does between its ten HTTP services.

You have an existing and working Actix-web code base. There is no rush to migrate. Actix-web remains actively maintained and covers HTTP/2, WebSockets and compression natively, without additional dependencies.

You want as much HTTP functionality as possible delivered in a single crate, without assembling tower-http yourself. Actix-web directly responds to this need.

You already share Tower middleware with other Hyper or Tonic (gRPC) services. Axum reuses these layers as they are – this is the argument that weighed at Aurabase.

#
Frequently Asked Questions

FAQs

Is Axum ready for production in 2026?+
Yes: the framework is maintained by the tokio-rs organization, is at version 0.8.9 (April 2026), and has more than 436 million downloads on crates.io. Aurabase uses it in production on ten of its eleven Rust services — verified directly in the Cargo.toml repository root.
Can we migrate an Actix-web project to Axum without rewriting everything?+
Both frameworks run on Tokio, so the asynchronous business logic carries directly. What changes is the routing and middleware layer: the Actix-web extractors must be rewritten with the Axum extractors, and the integrated middleware replaced by equivalent tower-http layers. To our knowledge, no automated migration tool between the two frameworks exists.
Which is faster, Axum or Actix-web?+
Neither team publishes a direct quantitative comparison between the two frameworks on an identical workload. Actix-web cites the TechEmpower Framework Benchmark (round r21, composite) as proof of speed; Axum describes itself as a thin layer on top of Hyper, with performance deemed comparable according to its own README. In practice, the bottleneck of a production backend almost always comes from the database or network, not the HTTP framework itself.
Should you choose based on the Tower ecosystem?+
If your organization already has gRPC services in Tonic or Hyper raw applications, yes: Axum allows you to reuse the same Tower layers without adaptation. This is precisely what weighed in the choice of Aurabase — the gateway middlewares (tracing, request limitation, CORS) are standard Layer Tower, not code specific to a framework.

READY TO DEPLOY?

Your backend in five minutes.

No credit card required · 500 MB free · 50,000 MAU