warp v0.1.10

warp is a breakthrough server web framework for the Rust language.

Today sees the 11th release of warp, v0.1.10! I wanted to show off the new features, and highlight some of the amazing work that has appeared since the initial announcement.

v0.1.10

TLS Support : there is now optional support TLS, enabled via the tls feature.

: there is now optional support TLS, enabled via the feature. CORS : There is a “wrapping” filter (warp’s idea of middleware) that can provide CORS to any existing Filter .

: There is a “wrapping” filter (warp’s idea of middleware) that can provide CORS to any existing . Retrieving the remote address.

Websocket test helpers: testing filters has always been easy thanks to warp::test , and now, warp::test::ws allows for easy testing of Websocket routes specifically.

Previously

In case you missed it, some highlights of work that has landed before v0.1.10:

Rejection system clarity: warp initially had a rejection system that would try to automatically translate rejections into HTTP responses. It wasn’t that scalable. The rejection system now is simply errors for why a request failed, and Filter::recover can be used to translate those into specific HTTP responses.

can be used to translate those into specific HTTP responses. warp::fs filters automatically support Conditional and Range requests, and try to use the OS blocksize for improved performance all around.

filters automatically support Conditional and Range requests, and try to use the OS blocksize for improved performance all around. Streaming request and response bodies.

Support for custom transports besides the default TCP.

And many smaller improvements and new filters.

Next Focus: Service

When I announced warp initially, I had mentioned the Service trait, and the tower-web framework. There are still plans to see warp and tower-web merge, and current efforts have been around solidifying the Service trait itself.

As a recap, the Service trait is essentially some extra pieces on top of an async fn(Request) -> Response . Our aim is that Service and the http crate are the most basic interface that the ecosystem can gather behind. Server implementations and frameworks could be compatible with each other, as long they both just knew about Service and http .

Being the common interface, it then becomes easier for frameworks and users to add in “tower middleware”, since a wrapped Service is still a Service . There are already several tower middlewares that have been developed in support of Linkerd2.

We recently published a new release of tower-service . A prototype now exists for warp to be able to convert a Filter directly into an HTTP Service . From there, we could simply run it directly via hyper::Server . Other HTTP server implementations that supported Service could theoretically also just run it, and the user would still just deal with warp types.

The future of webdev in Rust looks bright!