Skip to content

Releases: quinn-rs/quinn

0.10.0

11 May 07:21
@djc djc
Compare
Choose a tag to compare

We are happy to announce the release of 0.10.0 of Quinn, our pure-Rust implementation of QUIC. This release introduces MTU discovery, updates to the latest version of rustls, improves platform support, and introduces a variety of new features, performance improvements, and bugfixes.

Improvements

  • Initial support for PLPMTUD (#1510 with followup in #1529, thanks to @aochagavia)
  • Bump rustls to 0.21.0 (#1515, thanks to @cpu)
  • Fix: build and tests on FreeBSD 13.2 (#1555, thanks to @Tirka)
  • Fail FreeBSD CI if any step fails (#1557, thanks to @Tirka)
  • Fragmentation handling improvements (#1547)
  • Add missing exports of stats types (#1546)
  • Rename config option to min_mtu for clarity (#1552)
  • Duplicate Transmit and EcnCodepoint across -proto and -udp (#1541)
  • quinn: take Arc<dyn Runtime> directly (#1534)
  • Support external crypto implementations (#1496, thanks to @nmittler)
  • Do not require &mut self in AsyncUdpSocket::poll_send (#1519, thanks to @dignifiedquire)
  • Getters for stream concurrency metrics and related documentation (#1518, thanks to @FlorianUekermann)
  • Fallback to not using ECN if IP_TOS is not supported (#1516, thanks to @link2xt)
  • Implement fallback for sendmmsg and recvmmsg (#1504, thanks to @link2xt)
  • Borrow self in read_to_end, rather than consuming (#1502)
  • Improve error when connecting with an unsupported version (#1482)
  • Fix racy Endpoint::wait_idle (#1477)
  • Re-export udp::{RecvMeta, UdpState} for AsyncUdpSocket (#1476, thanks to @XOR-op)
  • Route logs via log crate by default when tracing isn't used (#1473)
  • Fail gracefully on attempts to connect to an unspecified IP address (#1474)
  • add FreeBSD IP_RECVDSTADDR support (#1447, thanks to @lucifer9)

Documentation

  • Allow initial MTU to be specified in bulk benchmark (#1456)
  • Document how to close a stream correctly (#1493, thanks to @flub)
  • Update wording about QUIC being a draft (#1468, thanks to @zicklag)
  • Clarify async runtime support (#1497, thanks to @mxinden)
  • Fix usage message (#1484, thanks to @dzvon)

Internal improvements

On behalf of the Quinn team, @djc and @Ralith, thanks to all contributors!

0.9.3

05 Dec 21:47
Compare
Choose a tag to compare
Bump versions

0.9.2

29 Nov 07:00
Compare
Choose a tag to compare
Bump version

0.9.1

29 Nov 07:00
Compare
Choose a tag to compare
Bump versions for 0.9.1 release

0.9.0

31 Oct 10:49
@djc djc
Compare
Choose a tag to compare

We are happy to announce the release of 0.9.0 of Quinn, our pure-Rust implementation of QUIC. This release introduces extensible support for multiple async runtimes, improves Connection API ergonomics, and introduces a variety of new features, performance improvements, and bugfixes.

Important changes

  • Abstract runtime support (#1364, thanks to @yu-re-ka)
  • Replace NewConnection struct with Connection methods (#1357)
  • Replace Incoming stream with Endpoint::accept async method (#1426)

Functional improvements

  • Add additional metrics for lost packets and bytes (#1248, thanks to @Matthias247)
  • Implement draft-ietf-quic-bit-grease-02 (#1286)
  • Allow adjustment of per-connection concurrent stream limits (#1315)
  • Allow initial maximum UDP payload size to be configured (#1379)
  • Configure receive window per connection (#1386, thanks to @lijunwangs)
  • Define Connection::closed() helper to await connection termination (#1396)
  • Expose a getter for the close reason (#1424)
  • Accessor for free datagram send buffer space (#1423)

Performance improvements

Bug fixes

  • Tolerate wide IP_TOS cmsgs (#1274)
  • Identify zero-length connections by four-tuple (#1306)
  • Retry token fixes (#1332)
  • Fix Linux DF bit setting for IPv6-mapped IPv4 addresses (#1381)
  • Fix build errors so quinn-proto can be used under wasm32-unknown-unknown (#1387, thanks to @thombles)
  • Disable IP fragmentation on Windows (#1383)
  • Check QUIC bit in short headers (#1404, thanks to @thekuwayama)
  • Fix stopped streams not issuing ID credit when reset (#1422)

Other improvements

  • Replace futures-util with optional futures-io dep (#1263)
  • Strip down futures-* dependencies (#1273)
  • Reexport UnknownStream (#1268)
  • Replace Broadcast helper with tokio::sync::Notify (#1264)
  • Rely on rustls to check for ALPN failure (#1258)
  • Use config to reject connections rather than extra state (#1247)
  • Adjust link to quinn crate entry point in docs (#1241, thanks to @themaxdavitt)
  • Expose RttEstimator interface publicly (#1243, thanks to @BiagioFesta)
  • Replace fxhash with rustc_hash (#1246)
  • Don't update remote client CIDs gratuitously (#1294)
  • Change overly verbose info span to debug (#1351, thanks @alessandrod)
  • Bump MSRV to 1.59 (#1403)

On behalf of the Quinn team, @djc and @Ralith, thanks to all contributors!

0.8.0

14 Nov 21:42
@djc djc
Compare
Choose a tag to compare

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.

0.7.0

02 Mar 20:23
@djc djc
Compare
Choose a tag to compare

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 for TlsSession and SessionKind (#843, thanks to @imp)
  • Don't try to run code coverage on PRs (#824, thanks to @DemiMarie)

Documentation improvements:

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.

0.6.1

04 Apr 20:45
@djc djc
Compare
Choose a tag to compare

quinn 0.6.1 is a maintenance release with a number of significant bug fixes:

  • Fix initial data limit for remotely initiated bidirectional streams (fixes #694)
  • Fix bug that retired active CID on duplicate NEW_CONNECTION_ID (fixes #689)
  • Fix issuing of excess CIDs
  • Fix busy-hang when tokio and proto disagree on timer expiry

Anyone using the 0.6.0 release is advised to upgrade to this release. Thanks to @demimarie-parity and @SriRamanujam for providing detailed bug reports and working with us on reproduction and testing!

0.6.0

12 Mar 20:40
@djc djc
Compare
Choose a tag to compare

We are happy to announce the release of 0.6.0 of Quinn, our pure-Rust implementation of the QUIC protocol, the next generation TCP replacement protocol currently being standardized at the IETF.

After 4 months of development since the release of 0.5.0 (and several bugfix releases), we have a new release which upgrades the protocol to draft-27. It has additionally received many robustness improvements, smaller bug fixes, improved documentation and API refinements. Much of this work was triggered by the work at Parity to extend libp2p with QUIC support based on quinn-proto -- thanks to @demimarie-parity.

While our quinn-h3 implementation of HTTP 3 has not yet been released to crates.io, it has also undergone significant improvements in this release cycle, focusing in particular on improving interoperability with other implementations.

High level overview:

  • Improved API for inspecting crypto session (TLS) negotiated data (thanks to @kim)
  • Make rustls dependency optional at the quinn level
  • Refined APIs for datagrams (draft extension)
  • Cleaned up clippy warnings throughout all crates
  • Many bug fixes and improved robustness
  • Much improved documentation, particularly for the quinn-proto crate

Thanks to @demimarie-parity, @alecmocatta and @lionel1704 for their contributions.

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 in the next 6 months.

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.

quinn 0.5.3

01 Feb 21:40
@djc djc
Compare
Choose a tag to compare

quinn 0.5.3 is a quick maintenance release to solve a single bug:

  • Re-export tls::ParseError (#620, backported in #623)