Roadmap
Goal
Align current hyper to the hyper vision.
The vision outlines a decision-making framework, use-cases, and general shape of hyper. This roadmap describes the focus areas to continue to improve hyper to look more like what is in the vision.
Focus Areas
While open source is not a company, open source can be guiding. We can focus attention to specific areas of improvement, which are based on conversations with users, and prioritized by frequency and impact.
To that end, the following 4 areas are current focus of the project:
- Documentation
hyper-util
- HTTP/3
- Observability
Each area benefits from having a top level description and goal, a place to track progress, and a champion (or two) that helps push the effort.
Documentation
hyper has stabilized, so investing in documentation is wise! The way it is used won’t change much, so documentation won’t become outdated quickly. A tool that people don’t know how to use isn’t helpful at all. This helps hyper be Understandable.
The documentation focus area includes several different forms:
- The API docs as a reference.
- Examples as form of how-to.
- Website guides as tutorials.
Each of these could benefit from dedicated planning of their overall structure, editing the content that already exists, and creating the rest that is sorely missing.
hyper-util
hyper-util
serves two main purposes:
- Provide useful patterns that build on top of hyper.
- Explore, stabilize, and graduate some of those patterns into hyper itself.
To that end, there are several new features that can be worked on and iterated
on in hyper-util
right now:
- New design for a higher-level
Client
. - Breaking apart some patterns from
reqwest
, such as proxy helpers. - Server automatic version detection.
- Improved builder patterns that make it easier to configure complicated options.
HTTP/3
hyper has an HTTP/3 crate, h3
, that is generic over any QUIC implementation,
similar to how hyper’s HTTP/1 and HTTP/2 can be provided any IO transport. It
supports much of HTTP/3 already, and interoperates with most other
implementations. While some brave users have been trying it out the hard way
(such as reqwest), it’s time to bring HTTP/3 to more users.
The aim is to eventually support hyper::client::conn::http3
and
hyper::server::conn::http3
.
To do so, work is needed:
- Harden the
h3
crate itself, such as fixing any straggling interop issues, and filling out the spec conformance tags we use for accountability. - Proposal for (initially unstable)
hyper::rt::quic
integration, allowing people to bring their own QUIC. - Write the
hyper::proto::http3
glue that translates hyper’s connection patterns with theh3
crate.
Observability
It’s extremely common once operating a service using hyper to want more visibility in what exactly is happening. It’s important to realize that there are 3 concepts involved that frequently get conflated: events, tracing, and metrics.
Some existing ways to get some of these:
- Unstable
tracing
integraton inside hyper. tower_http::trace
which instruments outside of hyper, usingService
andBody
.
However, there are some events and metrics that are only known inside hyper, and having official, stable support would be very helpful.
Some potential options would be:
- Stabilizing specific
tracing
events (blocked on thetracing
crate stabilizing…) - Provide a rudimentary, programmatic way to query metrics without another crate.
- Provide some sort of
hyper-metrics
helper.
Beyond
The above are focus areas that are the most frequently asked for, and so have the most attention. That doesn’t mean that nothing else can be worked on.
Motivated individuals that want to help make other improvements are certainly welcome!