Name | Modified | Size | Downloads / Week |
---|---|---|---|
Parent folder | |||
README.md | 2025-06-24 | 10.0 kB | |
v0.53.0 source code.tar.gz | 2025-06-24 | 617.9 kB | |
v0.53.0 source code.zip | 2025-06-24 | 850.7 kB | |
Totals: 3 Items | 1.5 MB | 2 |
This release introduces a massive overhaul of the quic-go API. See this blog post for more details about the motivation. Most users will need to make some changes when upgrading to this version.
- The
Connection
interface was removed in favor of aConn
struct (#5195). - The
ReceiveStream
,SendStream
andStream
interfaces were replaced with structs of the same name (#5149, [#5172], [#5173], [#5214]).
In most cases, migrating downstream code should be fairly straightforward. For example, a method that used to accept a quic.Connection
as a parameter now needs to accept a *quic.Conn
, and a function handling a quic.Stream
now needs to handle a *quic.Stream
. Of course, consumers of quic-go are free to define their own interfaces.
Similarly, on the HTTP/3 layer:
- The
Connection
interface was replaced with aConn
struct (#5204). - The
RequestStream
interface was converted to a struct (#5153, [#5216]). - The
Stream
interface was converted to a struct (#5154).
We expect that most HTTP/3 users won't need to adjust their code, if they use the package to run an HTTP/3 server and dial HTTP/3 connection. More advanced use cases, such as WebTransport and the various MASQUE protocols, will require updates. We have already released new versions of webtransport-go and masque-go to support these changes.
Other Breaking Changes
- http3: the deprecated
SingleDestinationRoundTripper
was removed (#5217)
Notable Fixes and Improvements
- fix Goroutine leak when receiving a Version Negotiation packets race with dial context cancellation (#5203)
- drain the server accept queue when closing the transport (#5237), thanks to @sukunrt
- fix a race condition when closing transport (#5220), thanks to @sukunrt
- quicvarint: speed up parsing of 1, 2 and 4-byte varints (~12.5% for 1 and 2 bytes, ~1% for 4 bytes) (#5229), thanks to @jannis-seemann
- http3: expose
ClientConn.Context
,CloseWithError
andConn
: [#5219] - http3:
RequestStream
could be misused in many different ways, that's why we tightened the error checks (#5231)
Behind The Scenes
We've completed the migration of the entire test suite away from Ginkgo (#3652) and towards standard Go tests (#5084, [#5150], [#5151], [#5193], [#5194], [#5196], [#5198]). This was a major undertaking, spanning roughly 9 months and resulting in a complete rewrite of quic-go's test suite (> 40,000 lines of code!). Users will now benefit from a significantly slimmed-down dependency tree when upgrading.
Changelog
- http3: migrate the stream tests away from Ginkgo by @marten-seemann in https://github.com/quic-go/quic-go/pull/5150
- http3: migrate the state tracking stream tests away from Ginkgo by @marten-seemann in https://github.com/quic-go/quic-go/pull/5151
- implement parsing and writing of RESET_STREAM_AT frames by @marten-seemann in https://github.com/quic-go/quic-go/pull/5155
- wire: add support for the reset_stream_at transport parameter by @marten-seemann in https://github.com/quic-go/quic-go/pull/5158
- qlog: add support for reset_stream_at frame and transport parameter by @marten-seemann in https://github.com/quic-go/quic-go/pull/5160
- http3: convert RequestStream from an interface to a struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5153
- http3: convert Stream from an interface to a struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5154
- http3: simplify HTTP datagram handling by @marten-seemann in https://github.com/quic-go/quic-go/pull/5156
- http3: use actual QUIC connection and stream in server tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5161
- http3: use actual QUIC connection and stream in client tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5162
- http3: use actual QUIC connection and stream in conn tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5163
- http3: use actual QUIC connection in transport tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5164
- http3: use actual QUIC stream in state tracking stream tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5166
- http3: use actual QUIC connection in frames tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5165
- http3: fix flaky TestClientStreamHijacking by @marten-seemann in https://github.com/quic-go/quic-go/pull/5169
- http3: use actual QUIC connection in stream tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5170
- mockquic: remove package by @marten-seemann in https://github.com/quic-go/quic-go/pull/5171
- fix flaky TestDatagramLoss by @marten-seemann in https://github.com/quic-go/quic-go/pull/5174
- fix flaky TestConnectionPathValidation by @marten-seemann in https://github.com/quic-go/quic-go/pull/5175
- fix flaky TestHTTPRequestAfterGracefulShutdown by @marten-seemann in https://github.com/quic-go/quic-go/pull/5178
- fix flaky TestGracefulShutdownPendingStreams by @marten-seemann in https://github.com/quic-go/quic-go/pull/5179
- fix flaky TestTransportReplaceWithClosed by @marten-seemann in https://github.com/quic-go/quic-go/pull/5181
- http3: fix flaky TestClientResponseValidation by @marten-seemann in https://github.com/quic-go/quic-go/pull/5183
- http3: fix flaky TestServerRequestHeaderTooLarge by @marten-seemann in https://github.com/quic-go/quic-go/pull/5186
- http3: fix flaky TestConnControlStreamFailure by @marten-seemann in https://github.com/quic-go/quic-go/pull/5188
- avoid triggering macOS dual-stack flakiness in HTTP/3 integration tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5187
- convert Stream interface to a struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5149
- convert SendStream interface to a struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5172
- convert ReceiveStream interface to a struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5173
- ackhandler: migrate the ECN tests away from Ginkgo by @marten-seemann in https://github.com/quic-go/quic-go/pull/5084
- congestion: migrate tests away from Ginkgo by @marten-seemann in https://github.com/quic-go/quic-go/pull/5193
- ci: stop using Ginkgo test command by @marten-seemann in https://github.com/quic-go/quic-go/pull/5194
- mocks: simplify mockgen command to generate MockCryptoSetup by @marten-seemann in https://github.com/quic-go/quic-go/pull/5197
- ci: remove leftover check for Ginkgo imports by @marten-seemann in https://github.com/quic-go/quic-go/pull/5198
- http3: simplify connection closing in the frame parser by @marten-seemann in https://github.com/quic-go/quic-go/pull/5196
- fix Goroutine leak on version negotiation race with context cancel by @marten-seemann in https://github.com/quic-go/quic-go/pull/5203
- simplify stream ID handling in the incoming streams map by @marten-seemann in https://github.com/quic-go/quic-go/pull/5207
- simplify stream ID handling in the outgoing streams map by @marten-seemann in https://github.com/quic-go/quic-go/pull/5209
- ci: enable Codecov test analysis by @marten-seemann in https://github.com/quic-go/quic-go/pull/5210
- remove connection flow controller mock by @marten-seemann in https://github.com/quic-go/quic-go/pull/5213
- handle stream-related frame in the streams map by @marten-seemann in https://github.com/quic-go/quic-go/pull/5212
- explictly expose all method on the Stream by @marten-seemann in https://github.com/quic-go/quic-go/pull/5214
- convert Connection interface to Conn struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5195
- http3: convert Connection interface to Conn struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/5204
- http3: remove deprecated SingleDestinationRoundTripper type by @marten-seemann in https://github.com/quic-go/quic-go/pull/5217
- rename Conn receiver variable by @marten-seemann in https://github.com/quic-go/quic-go/pull/5215
- ci: enable the nolintlint linter in golangci-lint by @marten-seemann in https://github.com/quic-go/quic-go/pull/5221
- ci: enable the usetesting linter in golangci-lint by @marten-seemann in https://github.com/quic-go/quic-go/pull/5222
- ci: add Go 1.25rc1 to tested Go versions by @marten-seemann in https://github.com/quic-go/quic-go/pull/5224
- http3: add ClientConn.Context, CloseWithError and Conn by @marten-seemann in https://github.com/quic-go/quic-go/pull/5219
- http3: explicitly expose all method on the RequestStream by @marten-seemann in https://github.com/quic-go/quic-go/pull/5216
- http3: remove deprecated RoundTripper by @marten-seemann in https://github.com/quic-go/quic-go/pull/5230
- http3: avoid reinitilising the frame parser on the stream by @marten-seemann in https://github.com/quic-go/quic-go/pull/5232
- http3: tighten checks for incorrect use of RequestStream by @marten-seemann in https://github.com/quic-go/quic-go/pull/5231
- improve documentation for the various error types by @marten-seemann in https://github.com/quic-go/quic-go/pull/5233
- handshake: store key update interval in an atomic by @marten-seemann in https://github.com/quic-go/quic-go/pull/5234
- fix deadlock when closing the Transport by @sukunrt in https://github.com/quic-go/quic-go/pull/5220
- drain server accept queue when the transport is closed by @marten-seemann in https://github.com/quic-go/quic-go/pull/5237
- quicvarint: speed up parsing of 1, 2 and 4 byte varints by @jannis-seemann in https://github.com/quic-go/quic-go/pull/5229
New Contributors
- @jannis-seemann made their first contribution in https://github.com/quic-go/quic-go/pull/5229
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.52.0...v0.53.0