On this page
Overview
Tower provides modular components for robust Rust networking clients and servers. Its Service trait models asynchronous request/response behavior, while Layer and ServiceBuilder compose middleware such as timeouts, rate limiting, and load balancing.
Features and best fit
Based on official documentation; not hands-on tested · Content checked:
Key features
Use Service as a common request/response abstraction
Tower models asynchronous request handling with the Service trait, providing a shared integration point for clients, servers, application logic, protocol implementations, and middleware.
Sources: [2]
Compose middleware with Layer and ServiceBuilder
Timeouts, rate limiting, load balancing, and other behaviors can wrap an inner Service and be composed in order through Layer and ServiceBuilder. Optional middleware is selected through Cargo features.
Sources: [2]
Best fit
Fits Rust backends sharing behavior across Axum, Hyper, Tonic, and other networking libraries
Because multiple ecosystem libraries integrate through Tower Service, it suits systems that want reusable middleware and application behavior separated from a particular network protocol implementation.
Sources: [2]
Before adoption
Check stream-oriented protocols, MSRV, and no_std requirements
Tower targets request/response patterns and may not fit protocols that are entirely stream based. The 0.5.3 README documents Rust 1.64.0 as the MSRV; tower itself is not no_std compatible, while tower-layer and tower-service are.
Official sources
- [1]tower-rs/tower — GitHub repository(2026-10-06)
- [2]Tower 0.5.3 — README(2026-10-06)
- [3]Tower 0.5.3 release(2026-10-06)
Supplemental curator note
Tower is protocol-agnostic infrastructure for inserting reusable middleware into request/response clients and servers. When using it under Axum, Hyper, or Tonic, decide which layer owns the Service stack so middleware responsibilities stay clear.
Try it in 3 steps
- 1
Clone the reviewed Tower release
Clone the reviewed Tower 0.5.3 tag. A Rust toolchain with Cargo is required.
git clone --depth 1 --branch tower-0.5.3 https://github.com/tower-rs/tower.git && cd tower - 2
Run the full-feature workspace tests
Run the same workspace test command used by the Tower repository CI, covering Service, Layer, and middleware features.
cargo test --workspace --all-features - 3
Generate the API documentation
Generate documentation for all workspace features. Tower is an abstraction and middleware library rather than a standalone network server, so use the docs to select the Service and Layer APIs you need.
cargo doc --workspace --no-deps --all-features
Growth
Growth trends · Last 30 days
4,315 Stars
Trend data is still being collected.
Built with
Categories and tags
GitHub data
GitHub dataView detailed GitHub data
GitHub Topics
- middleware
- rust
- tower
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- Lapin1,237 Stars
2 shared tag(s) · 2 shared category(s) · Same language
connect Rust services to RabbitMQ over AMQP 0-9-1 with runtime-agnostic async APIs
Rust - Tower HTTP920 Stars
2 shared tag(s) · 2 shared category(s) · Same language
add tracing, compression, timeouts, and other HTTP behavior as Tower middleware
Rust - Axum27,382 Stars
2 shared tag(s) · 1 shared category(s) · Same language
build Rust HTTP APIs with routing, extractors, and Tower middleware
Rust - Diesel14,193 Stars
2 shared tag(s) · 1 shared category(s) · Same language
validate SQL queries and schemas with Rust's type system through an ORM and query builder
Rust - SeaORM9,914 Stars
2 shared tag(s) · 1 shared category(s) · Same language
manage asynchronous queries, relations, and migrations with a relational ORM for Rust
Rust - Loco9,397 Stars
2 shared tag(s) · 1 shared category(s) · Same language
bootstrap Rust backends with Rails-style conventions, generators, ORM, jobs, and storage
Rust
Report incorrect information
Tell us if any listing information is incorrect or outdated.