OSS TanbouSign in with GitHub

compose reusable Rust networking middleware with Service and Layer

About these scores

OSS scale score is an unbounded metric that log-compresses and weights Stars, Watchers, Forks, and Contributors. Discovery score is the current OSS scale score minus the score at discovery. Update pace is commits in the last 30 days, growth momentum is the OSS scale score difference within the recent observation window, and OSS health is a 0–100 rating based on available recency, Community Health, and release data.

Stars
4,315
Primary language
Rust
License
MIT
Repository last updated
Jun 22, 2026
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.

Sources: [2][3]

Official sources

  1. [1]tower-rs/tower — GitHub repository(2026-10-06)
  2. [2]Tower 0.5.3 — README(2026-10-06)
  3. [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. 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. 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. 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
Check the official README

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
Stars
4,315
Forks
346
Watchers
48
Open issues
101
Contributors
106
Owner type
Organization
Primary language
Rust
License
MIT
Repository last updated
Jun 22, 2026
Write a related article

Share a guide or use case for this OSS in Markdown. Articles are published after administrator approval.

Report incorrect information

Tell us if any listing information is incorrect or outdated.

After reading this page, do you know what to do next?