NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1376 most downloaded on crates.io
serve the web at warp speeds
Last release 5 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
9 years old
43 releases · first in 2018
Re-implement addr::remote() filter from v0.3.x.
addr::remote() filter from v0.3.x.From<&'static [u8]> for Body.reply::stream() helper.Add support for passing UnixListener to incoming(listener).
UnixListener to incoming(listener).server is not enabled.One column per quarter.
Fix Server::graceful() bounds incorrect requiring the filter to be a future.
Server::graceful() bounds incorrect requiring the filter to be a future.tokio/net when the server feature is enabled.cfgs in the docs.Full Changelog: v0.4.0...v0.4.1
Server::graceful() bounds incorrect requiring the filter to be a future.tokio/net when the server feature is enabled.cfgs in the docs.hyper, http, and http-body to v1.multipart and websocket features from being enabled by default.warp::serve() behind a server feature, not enabled by default.warp::test behind a test feature, not enabled by default.tls feature and types.warp::addr filters.Upgrade to hyper , http , and http-body to v1.
hyper, http, and http-body to v1.multipart and websocket features from being enabled by default.warp::serve() behind a server feature, not enabled by default.warp::test behind a test feature, not enabled by default.tls feature and types.warp::addr filters.Full Changelog: v0.3.7...v0.4.0
Add ecc private key support to tls() config.
tls() config.tls feature by @joseluisq in #1048cargo minimal-versions check by @Finomnis in #1078Full Changelog: v0.3.6...v0.3.7
Updated tungstenite and rustls dependencies for security fixes.
None to multipart::form().max_length().Reply for Result<impl Reply, impl Reply>.multipart::Part::content_type() return the full mime string.TlsServer::try_bind_with_graceful_shutdown().multipart filters now use multer dependency, fixing some streaming bugs.
multipart filters now use multer dependency, fixing some streaming bugs.Rejection::into_response() is significantly faster.multipart::Part data is now streamed instead of buffered.
Fix fs filters path sanitization to reject colons on Windows.
fs filters path sanitization to reject colons on Windows.Add Filter::then() , which is like Filter::map() in that it's infallible, but is async like Filter::and_then() .
Filter::then(), which is like Filter::map() in that it's infallible, but is async like Filter::and_then().redirect::found() reply helper that returns 302 Found.compression-brotli and compression-gzip cargo features to enable only the compression you need.HEAD requests to be served to fs::dir() filters.path!() with no arguments.futures with futures-util, which is a smaller dependency.Add pong constructor to websocket messages.
pong constructor to websocket messages.redirect::see_other and redirect::permanent helpers.fs filters sometimes having an off-by-one error with range requests.Access-Control-Request-Headers.From<Reject> for Rejection.close_frame accessor to ws::Message.sse filter to be more like ws, with a single Event type and builder.cookie filter to extract a generic FromStr value.Nothing published for this version
Add wrap_fn, which can be used to create a Wrap from a closure. These in turn are used with Filter::with().
wrap_fn, which can be used to create a Wrap from a closure. These in turn are used with Filter::with().warp::host filters to deal with Host/:authority headers.Server.CONNECT foo.bar).Add tracing internals in place of log (log is still emitted for backwards compatibility).
tracing internals in place of log (log is still emitted for backwards compatibility).warp::trace module set of filters to customize tracing dianostics.path method to warp::fs::File reply.source implementation for BodyDeserializeError.warp::ws::MissingConnectionUpgrade rejection public.Add warp::compression filters, which will compress response bodies.
warp::compression filters, which will compress response bodies.warp::header::value() filter to get a request HeaderValue.request_headers method to warp::log::Info.max_frame_size to warp::ws::Ws builder.remote_addr to warp::test::RequestBuilder.try_bind_with_graceful_shutdown to warp::Server builder.serve_incoming_with_graceful_shutdown to warp::Server builder.warp::addr::remote when used with Server::tls.warp::path::{peek, tail, full} filters when the request URI is in authority-form or asterisk-form.Implement Reply for all Box where T: Reply.
Reply for all Box<T> where T: Reply.name methods to MissingHeader, InvalidHeader, and MissingCookie rejections.warp::ext::optional() filter that optionally retrieves an extension from the request.ws::Message::ping().Remove deprecated warp::optional_value().
close and close_with constructors to warp::ws::Message.warp::fs filters using a very small read buffer.std::future, adding async/await support!warp::service() to convert a Filter into a tower::Service.Reply for Box<dyn Reply>.path! macro to assume a path::end() by default, with explicit / .. to allow building a prefix (#359).warp::path(str) to accept any AsRef<str> argument.get2 to get, ws2 to ws, etc).Filter::{or, or_else, recover} now require Self::Error=Rejection. This helps catch filters that didn't make sense (like warp::any().or(warp::get())).warp::body filters (#345).warp::cors() to return a warp::cors::Builder which still implements Wrap, but can also build a cheaper-to-clone wrapper.warp::multipart stream API to allow for errors when streaming.warp::sse to no longer return a Filter, adds warp::sse::reply to do what Sse::reply did.Server::tls() to return a TLS server builder (#340).warp::never::Never usage with std::convert::Infallible.warp::ext::set() function (#222).warp::cookie::optional_value().Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Implement Clone for the warp::cors filter.
Clone for the warp::cors filter.into_bytes method for warp::ws::Message.Make warp::multipart and wrap::ws support optional, though enabled by default.
warp::multipart and wrap::ws support optional, though enabled by default.warp::fs::dir filter to reject paths containing backslashes.- Features: - Add warp::multipart support.
warp::multipart support.Export all built-in Rejection causes in the warp::reject module.
warp::reject module.Server::try_bind as fallible bind methods.Unseal the Reply trait: custom types can now implement Reply.
Reply trait: custom types can now implement Reply.warp::sse::keep_alive() replacement for warp::sse::keep() which allows customizing keep-alive behavior.warp::log::Info::host() accessor.warp::fs filters from sending some headers for 304 responses.Add more accessors to warp::Info type for building custom log formats.
warp::log::Info type for building custom log formats.Reply for Cow<'static, str>.- Features: - Add warp::optional filter.
warp::header::optional filter.Implement Reply for Vec and &'static [u8].
Reply for Vec<u8> and &'static [u8].content-type header automatically for string and bytes replies.expose_headers to warp::cors filter.Implement PartialEq, Eq, and Clone for warp::Message.
PartialEq, Eq, and Clone for warp::ws::Message.CONNECT requests).Add warp::sse filters for handling Server-Sent-Events.
warp::sse filters for handling Server-Sent-Events.allow_headers to warp::cors filter.Add optional TLS support. Enable the tls feature, and then use Server::tls.
tls feature, and then use Server::tls.warp::cors filter for CORS support.warp::addr::remote to access the remote address of a request.warp::log::custom to support customizing of access logging.warp::test::ws to improve testing Websocket filters.Add warp::get and warp::set to set request extensions.
warp::ext::get and warp::ext::set to set request extensions.Filter::untuple_one to unroll nested tuple layers from extractions.Ws2::max_send_queue configuration method.ws::Message::is_ping method, and yield pings to user code.Deprecates Rejection::with. Use custom rejections instead.
Improved flexibility of Rejection system.
The Rejection type 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 via
Rejection::find_cause.
warp::reject::custom() to create a Rejection with
any Into<Box<std::error::Error>>. These rejections should be
handled with an eventual Filter::recover. Any unhandled
custom rejections are considered a server error.Rejection::with. Use custom rejections instead.Rejection::into_cause, as it can no longer work. Always
returns Err(Rejection).Rejection::json, since the format needed is too generic.
The errors.rs example shows how to send custom JSON when recovering
from rejections.warp::reject(), since it current signals a 400 Bad Request, but in newer versions, it will signal 404 Not Found.
It's deprecated simply to warn that the semantics are changing,
but the function won't actually go away.reject::bad_request(), reject::forbidden(), and
reject::server_error(). Uses custom rejections instead.Renamed warp::path::index to warp::path::end.
Deprecated Rejection::into_cause, since an upcoming Rejection refactor will make it impossible to support.
Features:
warp::body::stream() filter, BodyStream and StreamBuf.Rejection::into_cause, since an upcoming Rejection refactor will make it impossible to support.Fixes:
Connection header.Add Conditional and Range request support for warp::fs filters.
warp::fs filters.Rejection::with to no longer need to be Sized.warp::path::peek() which gets the unmatched tail without adjusting the currently matched path.Serve index.html automatically with warp::dir filter.
Features:
index.html automatically with warp::fs::dir filter.last-modified header with warp::fs filters.warp::redirect to easily reply with redirections.warp::reply::{with_status, with_header} to wrap impl Replys directly with a new status code or header.Server with a custom source of incoming connections.
Server::run_incoming to have the runtime started automatically.Server::serve_incoming to get a future to run on existing runtime.Rejection::into_cause() to retrieve the original error of a rejection back.Rejection::json() to convert a rejection into a JSON response.Fixes
500 Internal Server Error are now also logged at the error level.Add warp::with::headers(HeaderMap) filter wrapper.
warp::reply::with::headers(HeaderMap) filter wrapper.warp::cookie::optional() to get an optional cookie value.warp::path::full() to be able to extract the full request path without affecting route matching.Server.warp::query().Add warp::forbidden() to represent 403 Forbidden responses.
warp::reject::forbidden() to represent 403 Forbidden responses.Rejection::with(cause) to customize rejection messages.warp::body::form to allow charsets in the content-type header.Deprecates warp::ws(), and ws2() will become ws() in 0.2.
Reply for Response<impl Into<hyper::Body>, allowing streaming response bodies.warp::body::stream() filter to access the request body as an impl Stream.warp::ws2() as a more flexible websocket filter.
warp::ws(), and ws2() will become ws() in 0.2.warp::get2(), warp::post2(), warp::put2(), and warp::delete2() as more standard method filters that are used via chaining instead of nesting.
get(), post(), put(), and delete() are deprecated, and the new versions will become them in 0.2.Filter::unify() for when a filter returns Either<T, T>, converting the Either into the inner T, regardless of which variant it was.
This requires that both sides of the Either be 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();
content-type header automatically to replies from file and dir filters based on file extension.warp::head(), warp::options(), and warp::patch() as new Method filters.warp::fs filters.500 Internal Server Error rejection.Add warp::raw() filter to get query as a String.
warp::query::raw() filter to get query as a String.Filter::recover() to ease customizing of rejected responses.warp::header::headers_clone() filter to get a clone of request's HeaderMap.warp::path::tail() filter to get remaining "tail" of the request path.warp::fs filters.Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →