hyper v0.14
hyper v0.14 I’m so thrilled to announce the release of hyper v0.14 today. hyper is a safe, reliable, fast HTTP library written in Rust. It provides asynchronous client and server APIs, supporting both HTTP/1 and HTTP/2.
What’s this release all about?
Tokio 1.0
Today also sees the release of Tokio v1.0. We wanted to ensure that with that momentous release, hyper was ready immediately so the ecosystem can start using it right away. This change doesn’t have much of an outward effect on hyper’s API, but is a big step towards stabilizing the Rust networking experience.
Optional Main Features
hyper has had optional features for a while, such as optional support for the Tokio. This allows convenient usage with the excellent Tokio runtime, while allowing others who have an existing runtime to just use hyper for its HTTP bits.
In this release, however, we’ve made the main pieces of hyper optional features.
http1
http2
client
server
These features cover the largest parts of hyper, its protocol implementations. With these now able to be enabled or disabled, you can significantly reduce the amount of code you compile and include in hyper. For example, if you’re application always talks to an HTTP/1 server, you can enable just the http1
and client
features. Or Tonic, a Rust gRPC library, since it is based on HTTP/2, it can disable the HTTP/1 code in hyper, enabling only http2
, client
, and server
.
What’s next?
This release is timed to go out with Tokio v1.0, and notably isn’t hyper 1.0 yet. That means we’re not done. Here’s what we have planned coming soon:
Stability
We have our eyes set on making hyper stable, with a 1.0 release. We know many people rely on hyper to make fast, reliable HTTP applications and libraries, and it’s a top priority to make hyper stable and no longer need breaking changes.
Stability is also meant in terms of reliability: we’ll continue to fix bugs, improve performance, and undertake internal refactors that shouldn’t affect the API, but will result in more and more reliable HTTP for users.
Simplification
As part of the drive to stabilization and 1.0, we will be making strides towards simplifying the public API exposed in hyper. Simplifying things can mean different things, so for hyper, it refers to removing the more opinionated pieces. That means aiming to embrace the “low level” aspect of hyper, and moving more “high level” pieces into other libraries.
C API
Stabilizing and simplifying doesn’t mean nothing new is coming. New things are being worked on right now, but with great care to not disrupt the stabilization efforts.
hyper is a safe, correct, fast HTTP implementation written in Rust, and as it matures, the desire to use that safety in places that aren’t Rust grows. We’ve been working on a C API for hyper, with the first main user being the curl project. We’re so excited to be part of this effort for a memory safe ‘curl’, and you can already experimentally try it out!
To re-emphasize the stability and simplification goals, the first parts of this C API are based on the “lower level” client connection API in hyper. As hyper is used throughout curl’s extensive test suite, hyper’s Rust internals handle more edge cases and protocol features, which is a win for all hyper users , even if you don’t use the thin C API part.
HTTP/3
In the greater Internet, work has been progressing on stabilizing QUIC and the next version of HTTP, HTTP/3. We’ve started an effort on the h3
library, which provides HTTP/3 while being generic over a QUIC implementation. There’s been great progress, with a working client example already in the repository.
Come join us!
This release is an important step for hyper. But as you can see, there’s still plenty to be done. If you find any issues, please report them. If you’d to help, you can look at the issue board and pick something to work on or discuss, and you can join the chat.
hyper is made through the efforts of many contributors, and their efforts are greatly appreciated. Together, today, we release hyper v0.14, and look forward to what comes next!