# tower-rs/tower

async fn(Request) -> Result<Response, Error>

Repository: https://github.com/tower-rs/tower
Canonical: https://ross.abutalabs.com/products/tower
Homepage: https://docs.rs/tower
Language: Rust
License: MIT
License Family: permissive
Topics: tower, rust, middleware
Last push: 2026-06-22T13:58:59+00:00

## Health v2 (maintenance only)
Score: 71/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 88, release rhythm 33, longevity 100
- inputs: {"age_days": 3327, "days_push": 72, "days_rel": 233, "gap_med": 247.0, "n_releases_24m": 3}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 4284, forks 343 (observed 2026-08-28T04:08:41.229255+00:00)

## What it is
Tower is a Rust library of modular, reusable components for building robust networking clients and servers around a request/response Service abstraction. It provides protocol-agnostic middleware such as timeouts, rate limiting, retries, load balancing, and load shedding via composable Service and Layer traits.

## Use cases
- add timeouts and retries to async request handling in Rust
- implement rate limiting or load shedding for a network service
- build composable middleware for Rust HTTP servers and clients
- load balance requests across multiple backend services
- model clients and servers with a unified async request/response trait

## When to choose
- you are building Rust networking clients or servers with a request/response pattern
- you want reusable, protocol-agnostic middleware like timeout, retry, or rate limiting
- you use tokio or another async runtime and want composable service layers

## When to avoid
- your protocol is entirely stream-based rather than request/response
- you need a no_std-compatible core (use tower-layer and tower-service instead)
- you want a full web framework rather than a service abstraction library

## Facets
- artifact type: library
- maturity: stable
- function: middleware, http-server, http-client, rate-limiting, caching, rpc
- domain: backend, networking, developer-tools, microservices
- platform: rust, cross-platform
- tags: async, service-abstraction, middleware, load-balancing, retry, timeout, tokio

## Member repositories
- tower-rs/tower (main) score 71

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:08:41.229255+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T18:21:57.406125+00:00, confidence not recorded.
  - readme: https://github.com/tower-rs/tower (fetched 2026-08-28T04:08:41.229255+00:00, sha c63bed1e9bf5)
  - homepage: https://docs.rs/tower (fetched 2026-08-29T09:11:22.985556+00:00, sha 019b2fb34ee6)
  - site_page: https://docs.rs/ (fetched 2026-08-29T09:11:22.995641+00:00, sha 95ad592be94d)
  - site_page: https://docs.rs/crate/tower/latest (fetched 2026-08-29T09:11:22.997696+00:00, sha 9a138409f7c1)
  - site_page: https://docs.rs/crate/tower/latest/features (fetched 2026-08-29T09:11:22.999877+00:00, sha 5c213e9cea27)
  - site_page: https://docs.rs/about (fetched 2026-08-29T09:11:23.001936+00:00, sha 29ab7986fbf5)
  - site_page: https://docs.rs/about/badges (fetched 2026-08-29T09:11:23.003644+00:00, sha 6588cac258af)
  - site_page: https://docs.rs/about/builds (fetched 2026-08-29T09:11:23.005380+00:00, sha 811231ca4680)
  - site_page: https://docs.rs/about/metadata (fetched 2026-08-29T09:11:23.007110+00:00, sha 0dcdccb2b2b2)
  - site_page: https://docs.rs/about/redirections (fetched 2026-08-29T09:11:23.008611+00:00, sha 1b1efd93105f)
- Data as of 2026-08-30T08:39:29.467469+00:00.
