Skip to content

0.8.0

Compare
Choose a tag to compare
@djc djc released this 14 Nov 21:42
· 757 commits to main since this release

We are happy to announce the release of 0.8.0 of Quinn, our pure-Rust implementation of the QUIC transport protocol, a next-generation TCP successor specified by the IETF.

After 8 months of development since the release of 0.7.0, we finally have a new release. This release is the first to support QUIC v1 as specified in RFC 9000, in addition to supporting draft versions 29 to 32 (inclusive). The configuration API has been substantially simplified in part to work with the new rustls 0.20 configuration builders, two modern congestion controller implementations are now available, Quinn types are no longer parametrized with the crypto session type, and performance has been significantly improved.

Important changes:

  • Update to rustls 0.20, which necessitated numerous changes to configuration APIs (#1150)
  • Use dyn Session for crypto session types, simplifying the API and reducing compile times (#1201)
  • Add support for multiple QUIC versions (#1232)

Functional improvements

  • Add an implementation of the CUBIC congestion controller (#1122, thanks to @FrankSpitulski)
  • Make the Cubic congestion controller the default (#1165)
  • Add an implementation of the BBR congestion controller (#1151, thanks to @FrankSpitulski)
  • Add must_use warnings for all types that implement Future (#1139, thanks to @lberrymage)
  • Drop outgoing packets on permission errors during transmission (#1157, thanks to @Matthias247)
  • Log (with rate limiting), then ignore transmission errors (#1172, thanks to @Matthias247)
  • Make TransportConfig setters infallible (#1177, thanks to @connec)
  • Allow dynamically changing an Endpoint's ServerConfig (#1191, thanks to @BiagioFesta)
  • Send ping on rebind to ensure peers notice migration (#1217)
  • Improve persistent congestion handling to allow faster recovery (#1223)
  • Relax anti-amplification checks to be less strict (#1148, thanks to @Matthias247)

Performance improvements

Bug fixes

  • Reduce default size of datagrams in order to comply with the spec (#1156, thanks to @BiagioFesta)
  • Apply (QUIC) datagram frame size to entire frame (#1229)
  • Fix cases of spurious transmit readiness (#1227)
  • Remove incorrect spurious migration handling (#1144)
  • Prevent incorrect end-of-stream result when reading into empty slice (#1159)
  • Account received data for the most recent path (#1143, thanks to @Matthias247)
  • Disable generic segmentation offload (GSO) after encountering EIO on send (#1210)

Other improvements

  • Reduce dependencies on futures-rs crates (#1175, thanks to @xMAC94x)
  • Disable unused default features for various crates (#1184, thanks to @some-dood)
  • Extract quinn-udp crate for reuse in different projects (#1180, thanks to @kpp)
  • Remove unused ConfigError variant (#1181, thanks to @connec)
  • Improved bulk data benchmarks (#1193, thanks to @Matthias247)

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 a responsive Gitter/Matrix channel.