PackageTrack
Sign in Get early access

tower

Tower is a library of modular and reusable components for building robust clients and servers.

0.5.3 610M downloads/mo #153 most downloaded on crates.io tower-rs/tower

What this package is like to depend on

Last release 7 months ago

12 Jan 2026

Ships unpredictably

gaps range from 2 weeks to 2.2 years

Nearly every release is documented

notes for 21 of 22 stable releases

1 version withdrawn

withdrawn after publishing

10 years old

26 releases · first in 2016

1 release in the last 12 months

see the full history below

Release timeline

26 releases · Dec 2016 to Jan 2026
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 26
  1. 0.5.3 12 Jan 2026
    Release notes

    Added

    • builder: Add ServiceBuilder::boxed_clone_sync() helper (#804)

    Fixed

    • retry: Check that supplied jitter is not NaN (#843)
    Open source →
    Release notes

    Added

    • builder: Add ServiceBuilder::boxed_clone_sync() helper (#804)

    Fixed

    • retry: Check that supplied jitter is not NaN (#843)
    Open source →
  2. 0.5.2 11 Dec 2024
    Release notes

    Added

    • util: Add BoxCloneSyncService which is a Clone + Send + Sync boxed Service (#777)
    • util: Add BoxCloneSyncServiceLayer which is a Clone + Send + Sync boxed Layer (#802)
    Open source →
    Release notes

    Added

    • util: Add BoxCloneSyncService which is a Clone + Send + Sync boxed Service (#777)
    • util: Add BoxCloneSyncServiceLayer which is a Clone + Send + Sync boxed Layer ([802])
    Open source →
  3. 0.5.1 09 Sep 2024
    Release notes
    • Fix minimum version of tower-layer dependency (#787)
    Open source →
    Release notes

    Fixed

    • Fix minimum version of tower-layer dependency (#787)
    Open source →
  4. 0.5.0 13 Aug 2024
    Release notes

    Fixed

    • util: BoxService is now Sync (#702)

    Changed

    • util: Removed deprecated ServiceExt::ready_and method and ReadyAnd
      future (#652)
    • retry: Breaking Change retry::Policy::retry now accepts &mut Req and &mut Res instead of the previous mutable versions. This
      increases the flexibility of the retry policy. To update, update your method signature to include mut for both parameters. (#584)
    • retry: Breaking Change Change Policy to accept &mut self (#681)
    • retry: Add generic backoff utilities (#685)
    • retry: Add Budget trait. This allows end-users to implement their own budget and bucket implementations. (#703)
    • reconnect: Breaking Change Remove unused generic parameter from Reconnect::new (#755)
    • ready-cache: Allow iteration over ready services (#700)
    • discover: Implement Clone for Change (#701)
    • util: Add a BoxCloneServiceLayer (#708)
    • rng: use a simpler random 2-sampler (#716)
    • filter: Derive Clone for AsyncFilterLayer (#731)
    • general: Update IndexMap (#741)
    • MSRV: Increase MSRV to 1.63.0 (#741)
    Open source →
    Release notes

    Fixed

    • util: BoxService is now Sync (#702)

    Changed

    • util: Removed deprecated ServiceExt::ready_and method and ReadyAnd future (#652)
    • retry: Breaking Change retry::Policy::retry now accepts &mut Req and &mut Res instead of the previous mutable versions. This increases the flexibility of the retry policy. To update, update your method signature to include mut for both parameters. (#584)
    • retry: Breaking Change Change Policy to accept &mut self (#681)
    • retry: Add generic backoff utilities (#685)
    • retry: Breaking Change Budget is now a trait. This allows end-users to implement their own budget and bucket implementations. (#703)
    • reconnect: Breaking Change Remove unused generic parameter from Reconnect::new (#755)
    • ready-cache: Allow iteration over ready services (#700)
    • discover: Implement Clone for Change (#701)
    • util: Add a BoxCloneServiceLayer (#708)
    • rng: use a simpler random 2-sampler (#716)
    • filter: Derive Clone for AsyncFilterLayer (#731)
    • general: Update IndexMap (#741)
    • MSRV: Increase MSRV to 1.63.0 (#741)
    • util: Breaking Change Either::A and Either::B have been renamed Either::Left and Either::Right, respectively. (#637)
    • util: Breaking Change Either now requires its two services to have the same error type. (#637)
    • util: Breaking Change Either no longer implemenmts Future. (#637)
    • buffer: Breaking Change Buffer<S, Request> is now generic over Buffer<Request, S::Future>. (#654)
    • buffer: Breaking Change Buffer's capacity now correctly matches the specified size. Previously, the capacity was subtly off-by-one, because a slot was held even while the worker task was processing a message. (#635)
    Open source →
  5. 0.4.13 17 Jun 2022
    Release notes

    Added

    • load_shed: Public constructor for Overloaded error (#661)

    Fixed

    • util: Fix hang with call_all when the Stream of requests is pending
      (#656)
    • ready_cache: Ensure cancelation is observed by pending services (#668,
      fixes #415)
    • docs: Fix a missing section header due to a typo (#646)
    • docs: Fix broken links to Service trait (#659)
    Open source →
  6. 0.4.12 16 Feb 2022
    Release notes

    Fixed

    • hedge, load, retry: Fix use of Instant operations that can panic
      on platforms where Instant is not monotonic (#633)
    • Disable attributes feature on tracing dependency (#623)
    • Remove unused dependencies and dependency features with some feature
      combinations (#603, #602)
    • docs: Fix a typo in the RustDoc for Buffer (#622)

    Changed

    • Updated minimum supported Rust version (MSRV) to 1.49.0.
    • hedge: Updated hdrhistogram dependency to v7.0 (#602)
    • Updated tokio-util dependency to v0.7 (#638)
    Open source →
    Release notes

    Fixed

    • hedge, load, retry: Fix use of Instant operations that can panic on platforms where Instant is not monotonic (#633)
    • Disable attributes feature on tracing dependency (#623)
    • Remove unused dependencies and dependency features with some feature combinations (#603, #602)
    • docs: Fix a typo in the RustDoc for Buffer (#622)

    Changed

    • Updated minimum supported Rust version (MSRV) to 1.49.0.
    • hedge: Updated hdrhistogram dependency to v7.0 (#602)
    • Updated tokio-util dependency to v0.7 (#638)
    Open source →
  7. 0.4.11 18 Nov 2021
    Release notes

    Added

    • util: Add BoxCloneService which is a Clone + Send boxed Service (#615)
    • util: Add ServiceExt::boxed and ServiceExt::boxed_clone for applying the BoxService and BoxCloneService middleware (#616)
    • builder: Add ServiceBuilder::boxed and ServiceBuilder::boxed_clone for applying BoxService and BoxCloneService layers (#616)

    Fixed

    • util: Remove redundant F: Clone bound from ServiceExt::map_request (#607)
    • util: Remove unnecessary Debug bounds from impl Debug for BoxService (#617)
    • util: Remove unnecessary Debug bounds from impl Debug for UnsyncBoxService (#617)
    • balance: Remove redundant Req: Clone bound from Clone impls for MakeBalance, and MakeBalanceLayer (#607)
    • balance: Remove redundant Req: Debug bound from Debug impls for MakeBalance, MakeFuture, Balance, and Pool (#607)
    • ready-cache: Remove redundant Req: Debug bound from Debug impl for ReadyCache (#607)
    • steer: Remove redundant Req: Debug bound from Debug impl for Steer (#607)
    • docs: Fix doc(cfg(...)) attributes of PeakEwmaDiscover, and PendingRequestsDiscover (#610)
    Open source →
  8. 0.4.10 19 Oct 2021
    Release notes
    • Fix accidental breaking change when using the rustdoc::broken_intra_doc_links lint (#605)
    • Clarify that tower's minimum supported rust version is 1.46 (#605)
    Open source →
  9. 0.4.9 14 Oct 2021 withdrawn
    Release notes
    • Migrate to pin-project-lite (#595)
    • builder: Implement Layer for ServiceBuilder (#600)
    • builder: Add ServiceBuilder::and_then analogous to ServiceExt::and_then (#601)
    Open source →
  10. 0.4.8 28 May 2021
    Release notes
    • builder: Add ServiceBuilder::map_result analogous to ServiceExt::map_result (#583)
    • limit: Add GlobalConcurrencyLimitLayer to allow reusing a concurrency limit across multiple services (#574)
    Open source →
  11. 0.4.7 27 Apr 2021
    Release notes

    Added

    • builder: Add ServiceBuilder::check_service to check the request, response, and error types of the output service. (#576)
    • builder: Add ServiceBuilder::check_service_clone to check the output service can be cloned. (#576)

    Fixed

    • spawn_ready: Abort spawned background tasks when the SpawnReady service is dropped, fixing a potential task/resource leak (#[581])
    • Fixed broken documentation links (#578)
    Open source →
  12. 0.4.6 27 Feb 2021
    Release notes

    Deprecated

    • util: Deprecated ServiceExt::ready_and (renamed to ServiceExt::ready). (#567)
    • util: Deprecated ReadyAnd future (renamed to Ready). (#567)

    Added

    • builder: Add ServiceBuilder::layer_fn to add a layer built from a function. (#560)
    • builder: Add ServiceBuilder::map_future for transforming the futures produced by a service. (#559)
    • builder: Add ServiceBuilder::service_fn for applying Layers to an async function using util::service_fn. (#564)
    • util: Add example for service_fn. (#563)
    • util: Add BoxLayer for creating boxed Layer trait objects. (#569)
    Open source →
  13. 0.4.5 10 Feb 2021
    Release notes

    Added

    • util: Add ServiceExt::map_future. (#542)
    • builder: Add ServiceBuilder::option_layer to optionally add a layer. (#555)
    • make: Add Shared which lets you implement MakeService by cloning a service. (#533)

    Fixed

    • util: Make combinators that contain closures implement Debug. They previously wouldn't since closures never implement Debug. (#552)
    • steer: Implement Clone for Steer. (#554)
    • spawn-ready: SpawnReady now propagates the current tracing span to spawned tasks (#557)
    • Only pull in tracing for the features that need it. (#551)
    Open source →
  14. 0.4.4 20 Jan 2021
    Release notes

    Added

    • util: Implement Layer for Either<A, B>. (#531)
    • util: Implement Clone for FilterLayer. (#535)
    • timeout: Implement Clone for TimeoutLayer. (#535)
    • limit: Implement Clone for RateLimitLayer. (#535)

    Fixed

    • Added "full" feature which turns on all other features. (#532)
    • spawn-ready: Avoid oneshot allocations. (#538)
    Open source →
  15. 0.4.3 13 Jan 2021
    Release notes

    Added

    • filter: Filter::check and AsyncFilter::check methods which check a request against the filter's Predicate (#521)
    • filter: Added get_ref, get_mut, and into_inner methods to Filter and AsyncFilter, allowing access to the wrapped service (#522)
    • util: Added layer associated function to AndThen, Then, MapRequest, MapResponse, and MapResult types. These return a Layer that produces middleware of that type, as a convenience to avoid having to import the Layer type separately. (#524)
    • util: Added missing Clone impls to AndThenLayer, MapRequestLayer, and MapErrLayer, when the mapped function implements Clone (#525)
    • util: Added FutureService::new constructor, with less restrictive bounds than the future_service free function (#523)
    Open source →
  16. 0.4.2 11 Jan 2021
    Release notes

    Added

    • Export layer_fn and LayerFn from the tower::layer module. (#516)

    Fixed

    • Fix missing Sync implementation for Buffer and ConcurrencyLimit (#518)
    Open source →
  17. 0.4.1 07 Jan 2021
    Release notes

    Fixed

    • Updated tower-layer to 0.3.1 to fix broken re-exports.
    Open source →
  18. 0.4.0 07 Jan 2021
    Release notes

    This is a major breaking release including a large number of changes. In particular, this release updates tower to depend on Tokio 1.0, and moves all middleware into the tower crate. In addition, Tower 0.4 reworks several middleware APIs, as well as introducing new ones.

    This release does not change the core Service or Layer traits, so tower 0.4 still depends on tower-service 0.3 and tower-layer 0.3. This means that tower 0.4 is still compatible with libraries that depend on those crates.

    Added

    • make: Added MakeService::into_service and MakeService::as_service for converting MakeServices into Services (#492)
    • steer: Added steer middleware for routing requests to one of a set of services (#426)
    • util: Added MapRequest middleware and ServiceExt::map_request, for applying a function to a request before passing it to the inner service (#435)
    • util: Added MapResponse middleware and ServiceExt::map_response, for applying a function to the Response type of an inner service after its future completes (#435)
    • util: Added MapErr middleware and ServiceExt::map_err, for applying a function to the Error returned by an inner service if it fails (#396)
    • util: Added MapResult middleware and ServiceExt::map_result, for applying a function to the Result returned by an inner service's future regardless of whether it succeeds or fails (#499)
    • util: Added Then middleware and ServiceExt::then, for chaining another future after an inner service's future completes (with a Response or an Error) (#500)
    • util: Added AndThen middleware and ServiceExt::and_then, for chaining another future after an inner service's future completes successfully (#485)
    • util: Added layer_fn, for constructing a Layer from a function taking a Service and returning a different Service (#491)
    • util: Added FutureService, which implements Service for a Future whose Output type is a Service ([#496])
    • util: Added BoxService::layer and UnsyncBoxService::layer, to make constructing layers more ergonomic (#503)
    • layer: Added Layer impl for &Layer (#446)
    • retry: Added Retry::get_ref, Retry::get_mut, and Retry::into_inner to access the inner service (#463)
    • timeout: Added Timeout::get_ref, Timeout::get_mut, and Timeout::into_inner to access the inner service (#463)
    • buffer: Added Clone and Copy impls for BufferLayer (#[493])
    • Several documentation improvements (#442, #444, #445, #449, #487, #490, #506])

    Changed

    • All middleware tower-* crates were merged into tower and placed behind feature flags (#432)
    • Updated Tokio dependency to 1.0 (#489)
    • builder: Make ServiceBuilder::service take self by reference rather than by value (#504)
    • reconnect: Return errors from MakeService in the response future, rather than in poll_ready, allowing the reconnect service to be reused when a reconnect fails (#386, #437)
    • discover: Changed Discover to be a sealed trait alias for a TryStream<Item = Change>. Discover implementations are now written by implementing Stream. (#443)
    • load: Renamed the Instrument trait to TrackCompletion (#445)
    • load: Renamed NoInstrument to CompleteOnResponse (#445)
    • balance: Renamed BalanceLayer to MakeBalanceLayer (#449)
    • balance: Renamed BalanceMake to MakeBalance (#449)
    • ready-cache: Changed ready_cache::error::Failed's fmt::Debug impl to require the key type to also implement fmt::Debug (#467)
    • filter: Changed Filter and Predicate to use a synchronous function as a predicate (#508)
    • filter: Renamed the previous Filter and Predicate (where Predicates returned a Future) to AsyncFilter and AsyncPredicate (#508)
    • filter: Predicates now take a Request type by value and may return a new request, potentially of a different type (#508)
    • filter: Predicates may now return an error of any type (#508)

    Fixed

    • limit: Fixed an issue where RateLimit services do not reset the remaining count when rate limiting (#438, [#439])
    • util: Fixed a bug where oneshot futures panic if the service does not immediately become ready (#447)
    • ready-cache: Fixed ready_cache::error::Failed not returning inner error types via Error::source (#467)
    • hedge: Fixed an interaction with buffer where buffer slots were eagerly reserved for hedge requests even if they were not sent (#472)
    • hedge: Fixed the use of a fixed 10 second bound on the hedge latency histogram resulting on errors with longer-lived requests. The latency histogram now automatically resizes (#484)
    • buffer: Fixed an issue where tasks waiting for buffer capacity were not woken when a buffer is dropped, potentially resulting in a task leak (#480)

    Removed

    • Remove ServiceExt::ready.
    • discover: Removed discover::stream module, since Discover is now an alias for Stream (#443)
    • buffer: Removed MakeBalance::from_rng, which caused all balancers to use the same RNG (#497)
    Open source →
  19. 0.3.1 18 Jan 2020
    Release notes
    • Allow opting out of tracing/log (#410).
    Open source →
  20. 0.3.0 19 Dec 2019
    Release notes
    • Update all tower based crates to 0.3.
    • Update to tokio 0.2
    • Update to futures 0.3
    Open source →
  21. 0.3.0-alpha.1a 14 Sep 2019 pre-release
    Release notes
    • Update tower-buffer to 0.3.0-alpha.1b
    Open source →
  22. 0.3.0-alpha.2 01 Oct 2019 pre-release
    Release notes
    • Move to futures-*-preview 0.3.0-alpha.19
    • Move to pin-project 0.4
    Open source →
  23. 0.3.0-alpha.1 11 Sep 2019 pre-release
    Release notes
    • Move to std::future
    Open source →
  24. 0.1.1 19 Jul 2019
    Release notes
    • Add ServiceBuilder::into_inner
    Open source →
  25. 0.1.0 27 Apr 2019
    Release notes
    • Initial release
    Open source →
  26. 0.0.1 23 Dec 2016

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive