Skip to content

Instantly share code, notes, and snippets.

@djc
Last active February 25, 2021 14:20
Show Gist options
  • Save djc/0d49f8564246f6a16edbcb4b50e111b9 to your computer and use it in GitHub Desktop.
Save djc/0d49f8564246f6a16edbcb4b50e111b9 to your computer and use it in GitHub Desktop.

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 draft-29 (with support for draft 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)
  • Add support for Generic Send Offload on Linux (#960 and #1024, thanks to @Matthias247)

Functional improvements:

  • Pluggable congestion control (#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)
  • Only wake up the connection if flow control needs to be issued (#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 for TlsSession and SessionKind (#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 Connections (#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.

@djc
Copy link
Author

djc commented Feb 23, 2021

Done!

@DemiMarie
Copy link

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment