0.7.0
We are happy to announce the release of 0.7.0 of Quinn, our pure-Rust implementation of the QUIC protocol, the next generation TCP replacement protocol currently being standardized at the IETF.
After 10 months of development since the release of 0.6.0, we finally have a new release which upgrades the protocol to drafts 29 through 32. It has additionally received many performance improvements (especially on Linux), is much more robust, provides a number of new APIs to inspect connection state, and traits that can be used to customize behavior. Our quinn crate has been updated to depend on tokio 1.
The focus of our HTTP/3 implementation work has shifted to the h3 crate.
Important changes:
- Update to Tokio 1, rustls 0.19 and bytes 1 (#873, with fixes in #995 thanks to @geieredgar)
- Update to draft 29 with support for draft 32 (#812, #879)
- Adopted 1.45 as the minimum supported Rust version for now (#985, #988)
- Substantial performance improvements (many contributed by @Matthias247)
- Work towards support for Generic Send Offload on Linux (#960 and #1024, thanks to @Matthias247)
Functional improvements:
- Zero-copy read and write APIs (#1013, thanks to @Matthias247, and #952)
- Pluggable congestion control and congestion controller bugfixes (#759)
- Add support for exporting keying material (#850, thanks to @kwantam)
- Support customized connection ID generation (#851 and #925, thanks to @liwenjieQu)
- Implement packet pacing support (#852, thanks to @DemiMarie)
- Proactive connection ID rotation (#860, thanks to @liwenjieQu)
- Add connection-level statistics (#884, #957, #973, #974; thanks to @Matthias247)
- Expose access to round-trip time estimate (#889, thanks to @jamadazi)
- Improve fairness on stream transmissions (#949, thanks to @Matthias247)
- Accept certificates in PEM format (#829, thanks to @SSebo)
- Encrypt Retry tokens (#833, thanks to @kansi)
- Use the incoming IP address for sending outgoing packets (#967, thanks to @Matthias247)
- Update datagram extension to support one-way semantics (#757)
- Reduce connection task wake-ups while reading (#992, thanks to @geieredgar)
- Improve defragmentation algorithm to reduce overhead (#1000, thanks to @geieredgar)
Bug fixes:
- Remove unsound assumptions about IP address layout (#987, thanks to @est31)
- Separate ECN counters per packet space (#798)
- Reject connections on ALPN failure (#779)
- Deduplicate buffers when switching to unordered mode (#1014, thanks to @geieredgar)
- Return UnknownStream from Connection::reset for closed/reset streams (#778)
- Proactively discard data on stopped streams (#777)
- Fix socket options on iOS (#849, thanks to @SSebo)
- Stop issuing redundant flow control credit (#758)
- Don't block application writes on congestion (#710)
Other improvements:
- Initial implementation of fuzz testing (#831 and #855, thanks to @jafow)
- Expose some quinn-proto APIs in quinn (#809, thanks to @SoftwareSheriff)
- Reexport
ReadUnordered
(#837, thanks to @Imberflur) - Implement
Debug
forTlsSession
andSessionKind
(#843, thanks to @imp) - Don't try to run code coverage on PRs (#824, thanks to @DemiMarie)
Documentation improvements:
- Initial version of a Quinn book (#866 and many follow-ups, thanks to @TimonPost)
- README improvements including a new logo (#866, thanks to @TimonPost)
- Add more high-level docs for quinn-proto
Connection
s (#926, thanks to @infinity0) - Add usage documentation for server example (#732, thanks to @jesselucas)
- Fix up documentation links (#816, thanks to @alexander-jackson)
- Add documentation links to improve navigation (#826, thanks to @alexander-jackson)
- Fix typo in the documentation (#847 thanks to @DelusionalOptimist and #932 thanks to @lu-zero)
Quinn has been proven to function well in real-world scenarios, so if you're interested in QUIC, now would be a good time to start testing. The QUIC v1 spec is stabilizing; we expect it will be published as an RFC within the next month.
While we don't always have large amounts of pre-defined good first issues setup due to the fast moving development, we're also always happy to mentor new contributors, independent of their prior level of Rust experience! We tend to respond to issues and PRs pretty quickly, and we have an active Gitter channel. Additionally @djc can now offer commercial support for Quinn, contact him for more details.