warp
serve the web at warp speeds
0.4.3
47M downloads/mo
#1275 most downloaded on crates.io
seanmonstar/warp
What this package is like to depend on
Last release 3 months ago
04 May 2026
Ships fairly regularly
a new release about every 6 months
Most releases are documented
notes for 36 of 43 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
43 releases · first in 2018
1 release in the last 12 months
see the full history below
Release timeline
43 releases · Mar 2018 to May 2026Releases
latest 43-
0.4.304 May 2026Release notes
Open source →- Features:
- Re-implement
addr::remote()filter from v0.3.x. - Implement
From<&'static [u8]>forBody. - Add
reply::stream()helper.
- Re-implement
- Fixes:
- Fix returning error from CORS if no request-method header.
- Features:
-
0.4.219 Aug 2025Release notes
Open source →- Features:
- Add support for passing
UnixListenertoincoming(listener).
- Add support for passing
- Fixes:
- Reduce some dependencies when
serveris not enabled.
- Reduce some dependencies when
- Features:
-
0.4.106 Aug 2025Release notes
Open source →Fixes:
- Fix
Server::graceful()bounds incorrect requiring the filter to be a future. - Enable
tokio/netwhen theserverfeature is enabled. - Render
cfgs in the docs.
Full Changelog: v0.4.0...v0.4.1
Release notes
Open source →- Fixes:
- Fix
Server::graceful()bounds incorrect requiring the filter to be a future. - Enable
tokio/netwhen theserverfeature is enabled. - Render
cfgs in the docs.
- Fix
v0.4.0 (August 5, 2025)
- Changes:
- Upgrade to
hyper,http, andhttp-bodyto v1. - Remove
multipartandwebsocketfeatures from being enabled by default. - Put
warp::serve()behind aserverfeature, not enabled by default. - Put
warp::testbehind atestfeature, not enabled by default. - Remove
tlsfeature and types. - Remove
warp::addrfilters.
- Upgrade to
- Fix
-
0.4.005 Aug 2025Release notes
Open source →Changes:
- Upgrade to
hyper,http, andhttp-bodyto v1. - Remove
multipartandwebsocketfeatures from being enabled by default. - Put
warp::serve()behind aserverfeature, not enabled by default. - Put
warp::testbehind atestfeature, not enabled by default. - Remove
tlsfeature and types. - Remove
warp::addrfilters.
Full Changelog: v0.3.7...v0.4.0
- Upgrade to
-
0.3.705 Apr 2024Release notes
Open source →tl;dr
- Features:
- Add ecc private key support to
tls()config.
- Add ecc private key support to
- Fixes:
- Several dependency upgrades.
What's Changed
- deps: move rustls-pemfile crate to tls feature by @tottoto in #1069
- ECC private keys support for
tlsfeature by @joseluisq in #1048 - Fix
cargo minimal-versions checkby @Finomnis in #1078 - deps: remove unused tokio-stream dependency by @tottoto in #1079
- deps: update to rustls 0.22 by @tottoto in #1081
- multipart: fallback to filename as part name by @wca in #1045
- deps: update tokio-tungstenite, tracing-log and async-compression dependency by @tottoto in #1085
- update to use handlebars v5 by @campeis in #1087
- style: clean up new rustc warnings by @seanmonstar in #1097
- ci: single required job by @seanmonstar in #1098
New Contributors
Full Changelog: v0.3.6...v0.3.7
Release notes
Open source →- Features:
- Add ecc private key support to
tls()config.
- Add ecc private key support to
- Fixes:
- Several dependency upgrades.
- Features:
-
0.3.627 Sep 2023Release notes
Open source →Features
- Add ability to pass
Nonetomultipart::form().max_length(). - Implement
ReplyforResult<impl Reply, impl Reply>. - Make
multipart::Part::content_type()return the full mime string. - Add
TlsServer::try_bind_with_graceful_shutdown().
Fixes
- Updated tungstenite and rustls dependencies for security fixes.
New Contributors
- @jnicholls made their first contribution in #717
- @kouta-kun made their first contribution in #1044
- @tottoto made their first contribution in #1043
- @aedmondson made their first contribution in #1046
- @outamaa made their first contribution in #919
- @louiseyousre200 made their first contribution in #1056
- @nickbp made their first contribution in #1061
- @vitorenesduarte made their first contribution in #1064
- @AldaronLau made their first contribution in #1063
- @belgoking made their first contribution in #1062
Release notes
Open source →- Features:
- Add ability to pass
Nonetomultipart::form().max_length(). - Implement
ReplyforResult<impl Reply, impl Reply>. - Make
multipart::Part::content_type()return the full mime string. - Add
TlsServer::try_bind_with_graceful_shutdown().
- Add ability to pass
- Fixes:
- Updated tungstenite and rustls dependencies for security fixes.
- Add ability to pass
-
0.3.528 Apr 2023Release notes
Open source →Fixes
multipartfilters now usemulterdependency, fixing some streaming bugs.Rejection::into_response()is significantly faster.
New Contributors
- @jaysonsantos made their first contribution in #1033
- @alexeiakimov made their first contribution in #1005
Release notes
Open source →- Fixes:
multipartfilters now usemulterdependency, fixing some streaming bugs.Rejection::into_response()is significantly faster.
-
0.3.431 Mar 2023Release notes
Open source →Fixes
multipart::Partdata is now streamed instead of buffered.- Update dependency used for
multipartfilters.
New Contributors
Release notes
Open source →- Fixes:
multipart::Partdata is now streamed instead of buffered.- Update dependency used for
multipartfilters.
-
0.3.327 Sep 2022 -
0.3.209 Nov 2021Release notes
Open source →Features:
- Add
Filter::then(), which is likeFilter::map()in that it's infallible, but is async likeFilter::and_then(). - Add
redirect::found()reply helper that returns302 Found. - Add
compression-brotliandcompression-gzipcargo features to enable only the compression you need. - Allow
HEADrequests to be served tofs::dir()filters. - Allow
path!()with no arguments.
Fixes:
- Update private dependencies Tungstenite and Multipart.
- Replaces uses of
futureswithfutures-util, which is a smaller dependency.
New Contributors
- @viraptor made their first contribution in #825
- @zenria made their first contribution in #835
- @Aankhen made their first contribution in #849
- @FlorianDr made their first contribution in #843
- @adamchalmers made their first contribution in #858
- @ekzhang made their first contribution in #860
- @utkarshkukreti made their first contribution in #696
- @johannescpk made their first contribution in #861
- @sindreij made their first contribution in #864
- @haileys made their first contribution in #701
- @In-line made their first contribution in #836
- @0xdeafbeef made their first contribution in #839
- @emesterhazy made their first contribution in #866
- @joseluisq made their first contribution in #869
- @JasterV made their first contribution in #873
- @aujxn made their first contribution in #876
- @simonborje made their first contribution in #883
- @yaymukund made their first contribution in #885
- @SeanChao made their first contribution in #890
- @e-user made their first contribution in #877
- @gtsiam made their first contribution in #878
- @bkgood made their first contribution in #896
- @nylonicious made their first contribution in #906
- @some-dood made their first contribution in #912
Release notes
Open source →- Features:
- Add
Filter::then(), which is likeFilter::map()in that it's infallible, but is async likeFilter::and_then(). - Add
redirect::found()reply helper that returns302 Found. - Add
compression-brotliandcompression-gzipcargo features to enable only the compression you need. - Allow
HEADrequests to be served tofs::dir()filters. - Allow
path!()with no arguments.
- Add
- Fixes:
- Update private dependencies Tungstenite and Multipart.
- Replaces uses of
futureswithfutures-util, which is a smaller dependency.
- Add
-
0.3.125 Mar 2021Release notes
Open source →- Features:
- Add
pongconstructor to websocket messages. - Add
redirect::see_otherandredirect::permanenthelpers.
- Add
- Fixes:
- Fix
fsfilters sometimes having an off-by-one error with range requests. - Fix CORS to allow spaces when checking
Access-Control-Request-Headers.
- Fix
v0.3.0 (January 19, 2021)
- Features:
- Add TLS client authentication support.
- Add TLS OCSP stapling support.
- Add
From<Reject>forRejection. - Add
close_frameaccessor tows::Message.
- Changes:
- Update to Tokio v1.
- Update to Bytes v1.
- Update to hyper v0.14.
- Rework
ssefilter to be more likews, with a singleEventtype and builder. - Change
cookiefilter to extract a genericFromStrvalue.
- Features:
-
0.3.019 Jan 2021Nothing published for this version
-
0.2.531 Aug 2020Release notes
Open source →- Features:
- Add
wrap_fn, which can be used to create aWrapfrom a closure. These in turn are used withFilter::with(). - Add
warp::hostfilters to deal withHost/:authorityheaders. - Relax some lifetime bounds on
Server.
- Add
- Fixes:
- Fix panic when URI doesn't have a slash (for example,
CONNECT foo.bar).
- Fix panic when URI doesn't have a slash (for example,
- Features:
-
0.2.420 Jul 2020Release notes
Open source →- Features:
- Add
tracinginternals in place oflog(log is still emitted for backwards compatibility). - Add
warp::tracemodule set of filters to customizetracingdianostics. - Add
pathmethod towarp::fs::Filereply. - Add
sourceimplementation forBodyDeserializeError. - Make
warp::ws::MissingConnectionUpgraderejection public.
- Add
- Features:
-
0.2.319 May 2020Release notes
Open source →- Features:
- Add
warp::compressionfilters, which will compress response bodies. - Add
warp::header::value()filter to get a requestHeaderValue. - Add
request_headersmethod towarp::log::Info. - Add
max_frame_sizetowarp::ws::Wsbuilder. - Add
remote_addrtowarp::test::RequestBuilder. - Add
try_bind_with_graceful_shutdowntowarp::Serverbuilder. - Add
serve_incoming_with_graceful_shutdowntowarp::Serverbuilder.
- Add
- Fixes:
- Fix
warp::addr::remotewhen used withServer::tls. - Fix panic in
warp::path::{peek, tail, full}filters when the request URI is in authority-form or asterisk-form.
- Fix
- Features:
-
0.2.203 Mar 2020Release notes
Open source →- Features:
- Implement
Replyfor allBox<T>whereT: Reply. - Add
namemethods toMissingHeader,InvalidHeader, andMissingCookierejections. - Add
warp::ext::optional()filter that optionally retrieves an extension from the request.
- Implement
- Fixes:
- Fix the sending of pings when a user sends a
ws::Message::ping().
- Fix the sending of pings when a user sends a
- Features:
-
0.2.123 Jan 2020Release notes
Open source →- Features:
- Add
closeandclose_withconstructors towarp::ws::Message.
- Add
- Fixes:
- Fix
warp::fsfilters using a very small read buffer.
- Fix
v0.2.0 (January 16, 2020)
- Features:
- Update to
std::future, addingasync/awaitsupport! - Add
warp::service()to convert aFilterinto atower::Service. - Implement
ReplyforBox<dyn Reply>.
- Update to
- Changes:
- Refactored Rejection system (#311).
- Change
path!macro to assume apath::end()by default, with explicit/ ..to allow building a prefix (#359). - Change
warp::path(str)to accept anyAsRef<str>argument. - Rename "2"-suffixed filters and types (
get2toget,ws2tows, etc). Filter::{or, or_else, recover}now requireSelf::Error=Rejection. This helps catch filters that didn't make sense (likewarp::any().or(warp::get())).- Change several
warp::bodyfilters (#345). - Change
warp::cors()to return awarp::cors::Builderwhich still implementsWrap, but can alsobuilda cheaper-to-clone wrapper. - Change
warp::multipartstream API to allow for errors when streaming. - Change
warp::sseto no longer return aFilter, addswarp::sse::replyto do whatSse::replydid. - Change
Server::tls()to return a TLS server builder (#340). - Change internal
warp::never::Neverusage withstd::convert::Infallible. - Remove
warp::ext::set()function (#222). - Remove deprecated
warp::cookie::optional_value().
- Features:
-
0.2.016 Jan 2020Nothing published for this version
-
0.1.2331 Aug 2020Nothing published for this version
-
0.1.2216 Mar 2020Nothing published for this version
-
0.1.2127 Feb 2020Nothing published for this version
-
0.1.2018 Sep 2019Release notes
Open source →- Features:
- Implement
Clonefor thewarp::corsfilter. - Add
into_bytesmethod forwarp::ws::Message.
- Implement
- Features:
-
0.1.1916 Aug 2019Release notes
Open source →- Features:
- Make
warp::multipartandwrap::wssupport optional, though enabled by default.
- Make
- Fixes:
- Fix
warp::fs::dirfilter to reject paths containing backslashes.
- Fix
- Features:
-
0.1.1826 Jul 2019 -
0.1.1708 Jul 2019Release notes
Open source →- Features:
- Export all built-in Rejection causes in the
warp::rejectmodule. - Add
Server::try_bindas fallible bind methods.
- Export all built-in Rejection causes in the
- Features:
-
0.1.1611 Jun 2019Release notes
Open source →- Features:
- Unseal the
Replytrait: custom types can now implementReply. - Add
warp::sse::keep_alive()replacement forwarp::sse::keep()which allows customizing keep-alive behavior. - Add
warp::log::Info::host()accessor.
- Unseal the
- Fixes:
- Fix
warp::fsfilters from sending some headers for304responses.
- Fix
- Features:
-
0.1.1502 Apr 2019Release notes
Open source →- Features:
- Add more accessors to
warp::log::Infotype for building custom log formats. - Implement
ReplyforCow<'static, str>.
- Add more accessors to
- Features:
-
0.1.1420 Mar 2019 -
0.1.1313 Feb 2019Release notes
Open source →- Features:
- Implement
ReplyforVec<u8>and&'static [u8]. - Set
content-typeheader automatically for string and bytes replies. - Add
expose_headerstowarp::corsfilter.
- Implement
- Features:
-
0.1.1229 Jan 2019Release notes
Open source →- Features:
- Implement
PartialEq,Eq, andCloneforwarp::ws::Message.
- Implement
- Fixes:
- Fix panic when incoming request URI may not have a path (such as
CONNECTrequests).
- Fix panic when incoming request URI may not have a path (such as
- Features:
-
0.1.1114 Jan 2019Release notes
Open source →- Features:
- Add
warp::ssefilters for handling Server-Sent-Events. - Add
allow_headerstowarp::corsfilter.
- Add
- Fixes:
- Fix TLS handshake to close the connection if handshake fails.
- Features:
-
0.1.1017 Dec 2018Release notes
Open source →- Features:
- Add optional TLS support. Enable the
tlsfeature, and then useServer::tls. - Add
warp::corsfilter for CORS support. - Add
warp::addr::remoteto access the remote address of a request. - Add
warp::log::customto support customizing of access logging. - Add
warp::test::wsto improve testing Websocket filters.
- Add optional TLS support. Enable the
- Features:
-
0.1.931 Oct 2018Release notes
Open source →- Features:
- Add
warp::ext::getandwarp::ext::setto set request extensions. - Add
Filter::untuple_oneto unroll nested tuple layers from extractions. - Add
Ws2::max_send_queueconfiguration method. - Add
ws::Message::is_pingmethod, and yield pings to user code.
- Add
- Fixes:
- Fix panic in debug mode when receiving a websocket ping.
- Features:
-
0.1.825 Oct 2018Release notes
Open source →- Features:
-
Improved flexibility of
Rejectionsystem.The
Rejectiontype can now nest and combine arbitrary rejections, so it is no longer bound to a small set of meanings. The ranking of status codes is still used to determine which rejection gets priority.A different priority can be implemented by handling rejections with a
Filter::recover, and searching for causes in order viaRejection::find_cause.- Adds
warp::reject::custom()to create aRejectionwith anyInto<Box<std::error::Error>>. These rejections should be handled with an eventualFilter::recover. Any unhandled custom rejections are considered a server error. - Deprecates
Rejection::with. Use custom rejections instead. - Deprecates
Rejection::into_cause, as it can no longer work. Always returnsErr(Rejection). - Deprecates
Rejection::json, since the format needed is too generic. Theerrors.rsexample shows how to send custom JSON when recovering from rejections. - Deprecates
warp::reject(), since it current signals a400 Bad Request, but in newer versions, it will signal404 Not Found. It's deprecated simply to warn that the semantics are changing, but the function won't actually go away. - Deprecates
reject::bad_request(),reject::forbidden(), andreject::server_error(). Uses custom rejections instead.
- Adds
-
Renamed
warp::path::indextowarp::path::end.
-
- Features:
-
0.1.715 Oct 2018Release notes
Open source →-
Features:
- Export the types returned from the
warp::body::stream()filter,BodyStreamandStreamBuf. - Deprecated
Rejection::into_cause, since an upcoming Rejection refactor will make it impossible to support.
- Export the types returned from the
-
Fixes:
- Fix websocket filters to do a case-insensitive match of the
Connectionheader.
- Fix websocket filters to do a case-insensitive match of the
-
-
0.1.605 Oct 2018Release notes
Open source →- Features:
- Add Conditional and Range request support for
warp::fsfilters. - Relaxed bounds on
Rejection::withto no longer need to beSized. - Add
warp::path::peek()which gets the unmatched tail without adjusting the currently matched path.
- Add Conditional and Range request support for
- Features:
-
0.1.503 Oct 2018Release notes
Open source →-
Features:
- Serve
index.htmlautomatically withwarp::fs::dirfilter. - Include
last-modifiedheader withwarp::fsfilters. - Add
warp::redirectto easily reply with redirections. - Add
warp::reply::{with_status, with_header}to wrapimpl Replys directly with a new status code or header. - Add support for running a warp
Serverwith a custom source of incoming connections.Server::run_incomingto have the runtime started automatically.Server::serve_incomingto get a future to run on existing runtime.- These can be used to support Unix Domain Sockets, TLS, and other transports.
- Add
Rejection::into_cause()to retrieve the original error of a rejection back. - Add
Rejection::json()to convert a rejection into a JSON response.
- Serve
-
Fixes
- Internal errors in warp that result in rendering a
500 Internal Server Errorare now also logged at theerrorlevel.
- Internal errors in warp that result in rendering a
-
-
0.1.426 Sep 2018Release notes
Open source →- Features:
- Add
warp::reply::with::headers(HeaderMap)filter wrapper. - Add
warp::cookie::optional()to get an optional cookie value. - Add
warp::path::full()to be able to extract the full request path without affecting route matching. - Add graceful shutdown support to the
Server. - Allow empty query strings to be treated as for
warp::query().
- Add
- Features:
-
0.1.328 Aug 2018Release notes
Open source →- Features:
- Add
warp::reject::forbidden()to represent403 Forbiddenresponses. - Add
Rejection::with(cause)to customize rejection messages.
- Add
- Fixes:
- Fix
warp::body::formto allow charsets in thecontent-typeheader.
- Fix
- Features:
-
0.1.214 Aug 2018Release notes
Open source →- Features:
- Implemented
ReplyforResponse<impl Into<hyper::Body>, allowing streaming response bodies. - Add
warp::body::stream()filter to access the request body as animpl Stream. - Add
warp::ws2()as a more flexible websocket filter.- This allows passing other extracted values to the upgrade callback, such as a value from a header or path.
- Deprecates
warp::ws(), andws2()will becomews()in 0.2.
- Add
warp::get2(),warp::post2(),warp::put2(), andwarp::delete2()as more standard method filters that are used via chaining instead of nesting.get(),post(),put(), anddelete()are deprecated, and the new versions will become them in 0.2.
- Add
Filter::unify()for when a filter returnsEither<T, T>, converting theEitherinto the innerT, regardless of which variant it was.-
This requires that both sides of the
Eitherbe the same type. -
This can be useful when extracting a value that might be present in different places of the request.
// Allow `MyId` to be a path parameter or a header... let id = warp::path::param::<MyId>() .or(warp::header::<MyId>()) .unify(); // A way of providing default values... let dnt = warp::header::<bool>("dnt") .or(warp::any().map(|| true)) .unify();
-
- Add
content-typeheader automatically to replies fromfileanddirfilters based on file extension. - Add
warp::head(),warp::options(), andwarp::patch()as new Method filters. - Try to use OS blocksize in
warp::fsfilters.
- Implemented
- Fixes:
- Chaining filters that try to consume the request body will log that the body is already consumed, and return a
500 Internal Server Errorrejection.
- Chaining filters that try to consume the request body will log that the body is already consumed, and return a
- Features:
-
0.1.108 Aug 2018Release notes
Open source →- Features:
- Add
warp::query::raw()filter to get query as aString. - Add
Filter::recover()to ease customizing of rejected responses. - Add
warp::header::headers_clone()filter to get a clone of request'sHeaderMap. - Add
warp::path::tail()filter to get remaining "tail" of the request path.
- Add
- Fixes:
- URL decode path segments in
warp::fsfilters.
- URL decode path segments in
v0.1.0 (August 1, 2018)
- Initial release.
- Features:
-
0.1.001 Aug 2018Nothing published for this version
-
0.0.029 Mar 2018Nothing published for this version