Releases: quic-go/webtransport-go
v0.10.0
This release updates webtransport-go to use the new API introduced in quic-go v0.59.0 (#221): Instead of "hijacking" streams from the HTTP/3 layer, the underlying QUIC connection is now owned by WebTransport, and webtransport-go dispatches incoming streams to either the HTTP/3 layer or an existing or new WebTransport session.
New Features
- Implemented Application Protocol Negotiation: #190
- The QUIC Stream Resets with Partial Delivery is now used to enforce reliable delivery of the WebTransport stream header: #239
Breaking Changes
Session.ConnectionStatewas renamed toSessionState: #189- The
StreamIDmethod was removed fromStream,SendStreamandReceiveStream: #226 - The
Servernow embeds thehttp3.Serveras a pointer (instead of by value): #215
Other Changes
- The
Streamand theSendStreamnow expose aContextmethod: #176 (thanks to @Sicilica) - Delayed streams for already closed sessions are immediately reset: #235
- The
Sessioncontext now uses the request or dial context, allowing the application to attach values to the context: #199 - When a WebTransport session is closed, streams are reset using the
WT_SESSION_GONEerror. StreamReadandWritenow wait for theWT_CLOSE_SESSIONcapsule on the CONNECT stream to return a meaningful error: #213
Notable Fixes
- Closed sessions are now properly cleaned up: #198 (thanks to @rolaechea), #230
- Session errors are now properly propagated to the stream
ReadandWritecalls: #207 - The length limit for
WT_CLOSE_SESSIONcapsules is now enforced: #202 - The dial timeout is now respected while waiting for the server's HTTP/3 settings: #216
- A 10ms deadline is applied before attempting the
WT_CLOSE_SESSIONcapsule, preventingSession.Closefrom blocking any longer than 10ms: #224 errors.Iserror comparisons were fixed forStreamErrorandSessionError: #204, #205- The underlying QUIC connection is now closed when establishing a WebTransport session fails: #236
Changelog
- ci: remove 386 (32 bit x86) by @marten-seemann in #180
- Bump actions/setup-python from 5 to 6 by @dependabot[bot] in #178
- Bump actions/checkout from 4 to 5 by @dependabot[bot] in #177
- Bump actions/setup-go from 5 to 6 by @dependabot[bot] in #179
- ci: use
go mod tidy -diffto check for tidiedgo.modby @marten-seemann in #181 - ci: fix setting of OS and Go envs for Codecov by @marten-seemann in #183
- ci: enable Codecov test analysis by @marten-seemann in #182
- update minimum Go version to 1.24, use 1.24 and 1.25 on CI by @marten-seemann in #184
- update quic-go to v0.56.0 by @marten-seemann in #185
- ci: remove unused code generation step from lint job by @marten-seemann in #186
- Bump golangci/golangci-lint-action from 8 to 9 by @dependabot[bot] in #187
- README: remove unfunded status section by @marten-seemann in #188
- expose SendStream.Context and Stream.Context by @Sicilica in #176
- replace Session.ConnectionState with Session.SessionState by @marten-seemann in #189
- implement application protocol negotiation by @marten-seemann in #190
- ci: update Chrome to 142.0.7444.162 in interop test by @marten-seemann in #192
- remove header-based draft version negotiation by @marten-seemann in #191
- ci: define permissions for all workflows by @marten-seemann in #193
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in #196
- update quic-go to v0.57.1 by @marten-seemann in #197
- remove closed session from session manager by @rolaechea in #198
- use the request / dial context on the session by @marten-seemann in #199
- implement length limit for error message in WT_CLOSE_SESSION capsule by @marten-seemann in #202
- update name of WT_BUFFERED_STREAM_REJECTED error by @marten-seemann in #203
- fix errors.Is for the StreamError by @marten-seemann in #204
- implement error comparison for the SessionError by @marten-seemann in #205
- use the WT_SESSION_GONE to reset the CONNECT stream by @marten-seemann in #206
- propagate the session close error to the stream read and write methods by @marten-seemann in #207
- fix error handling when sending the stream header by @marten-seemann in #210
- respect stream deadline when waititing for session close by @marten-seemann in #213
- embed the http3.Server in the Server as a pointer by @marten-seemann in #215
- respect the dial timeout when waiting for the server’s HTTP/3 settings by @marten-seemann in #216
- ci: use codecov-action instead of codecov/test-results-action by @Copilot in #219
- use new quic-go API by @marten-seemann in #221
- set a 10ms write deadline before sending the WT_CLOSE_SESSION capsule by @marten-seemann in #224
- remove StreamID method from Stream, SendStream and ReceiveStream by @marten-seemann in #226
- add documentation for the stream types and their methods by @marten-seemann in #227
- README: add list of notable projects and a release policy by @marten-seemann in #225
- simplify stream buffering logic in the session manager by @marten-seemann in #230
- remove stray TODO from Session by @marten-seemann in #232
- add a security policy by @marten-seemann in #233
- ci: update golangci-lint to v2.7.2 by @marten-seemann in #234
- move connection management to client and server by @marten-seemann in #231
- close client’s QUIC connection on WebTransport session close or failure by @marten-seemann in #236
- immediately reject streams for closed sessions by @marten-seemann in #235
- update quic-go to v0.59.0 by @marten-seemann in #240
- enable and use the QUIC Stream Resets with Partial Delivery extension by @marten-seemann in #239
New Contributors
- @Sicilica made their first contribution in #176
- @rolaechea made their first contribution in #198
- @Copilot made their first contribution in #219
Full Changelog: v0.9.0...v0.10.0
v0.9.0
This release updates quic-go to v0.53.0.
What's Changed
- webtransport-go is unfunded by @marten-seemann in #156
- update quic-go to v0.48.0 by @marten-seemann in #163
- ci: uci/copy-templates by @web3-bot in #165
- bump Go version in go.mod to Go 1.23 by @marten-seemann in #167
- ci: define workflows in this repository by @marten-seemann in #168
- use standard library rand instead of golang.org/x/exp/rand in tests by @marten-seemann in #170
- ci: reenable Codecov comments on pull requests by @marten-seemann in #173
- simplify stream opening error handling when session is closed by @marten-seemann in #171
- avoid using mocks in tests by @marten-seemann in #172
- ci: switch to golangci-lint for linting by @marten-seemann in #175
- update quic-go to v0.52.0 by @marten-seemann in #174
- update quic-go v0.53.0, use the new API by @marten-seemann in #169
Full Changelog: v0.8.0...v0.9.0
v0.8.0
Features
This release adds support for WebTransport Datagrams (#142). Datagrams are a required feature of WebTransport, therefore there’s no need to negotiate support for it. webtransport-go handles negotiation of QUIC and HTTP/3 datagram support.
Datagrams can be sent by calling SendDatagram on the Session, and received using ReceiveDatagram.
Breaking Changes
Other Notable Changes
- block calls to
Server.Upgradeuntil the client’s SETTINGS were received, check for HTTP Datagram support (#146) - check the server's SETTINGS before sending the Extended CONNECT request (#151)
quic-go.net: Launching a new Documentation Site
With this release, we're launching a new documentation site for the quic-go projects (quic-go itself, HTTP/3, webtransport-go, and soon, masque-go): quic-go.net.
The documentation site aims to explain the concepts and how they are made accessible using webtransport-go's API.
A lot of work has gone into the documentation already, but we're by no means done yet. The entire source is public in https://github.com/quic-go/docs/, and we're happy about community contributions.
webtransport-go needs your support!
Is your project / company relying on webtransport-go?
Please consider funding the project. Any support is highly appreciated!
Changelog
- rename the ConnectionError to SessionError by @marten-seemann in #134
- update quic-go, use the new HTTP/3 API by @marten-seemann in #138
- add a Remote field to the StreamError by @marten-seemann in #139
- remove custom qlogger implementation in tests by @marten-seemann in #143
- enable datagram support on the SingleDestinationRoundTripper by @marten-seemann in #144
- gitignore: ignore all qlog files by @marten-seemann in #145
- block Upgrade on HTTP SETTINGS, check for client datagram support by @marten-seemann in #146
- README: link to the new documentation site by @marten-seemann in #148
- update quic-go to v0.43.0 by @marten-seemann in #150
- ci: update ChromeDriver to 124.0.6367.62 in interop test by @marten-seemann in #152
- check the server's SETTINGS before sending the Extended CONNECT request by @marten-seemann in #151
- add support for datagrams by @marten-seemann in #142
Full Changelog: v0.7.0...v0.8.0
v0.7.0
Breaking Changes
Before v0.7.0, the server (incorrectly) didn't advertise support the Extended CONNECT extension. With quic-go/quic-go#4341, it now does. The client now checks for Extended CONNECT support, and aborts the handshake if the server doesn't support it. This means that v0.7.0 clients are now incompatible with pre-v0.7.0 servers.
What's Changed
- close http3.RoundTripper after test by @hareku in #101
- update quic-go to v0.41.0 by @marten-seemann in #114
- set the H3 WebTransport setting on the client side by @marten-seemann in #105
- ci: update ChromeDriver to v114.0.5735.90 in interop test by @marten-seemann in #123
- enable Dependabot for GitHub Actions by @marten-seemann in #124
- Bump actions/checkout from 3 to 4 by @dependabot in #125
- Bump actions/setup-go from 3 to 5 by @dependabot in #127
- Bump nanasess/setup-chromedriver from 1 to 2 by @dependabot in #126
- Bump actions/setup-python from 4 to 5 by @dependabot in #128
- ci: uci/copy-templates by @web3-bot in #129
- update quic-go to v0.42.0 by @marten-seemann in #119
- check the server's HTTP/3 SETTINGS before initiating a session by @marten-seemann in #120
New Contributors
- @hareku made their first contribution in #101
- @dependabot made their first contribution in #125
Full Changelog: v0.6.0...v0.7.0
v0.6.0
This release still supports WebTransport draft-02, but it already incorporates the extension of the error code space to 32 bits.
This release also updates quic-go to v0.39.0.
Changelog
- replace the WebTransport offer header if already set by @lleyton in #81
- ci: update interop to accomodate breaking changes in Selenium API by @marten-seemann in #83
- ci: remove automerge workflow by @galargh in #90
- ci: update workflows by @galargh in #91
- bump go.mod to Go 1.20, run go fix, update quic-go to v0.38.1 by @galargh in #92
- switch from unmaintained golang/mock to go.uber.org/mock by @marten-seemann in #95
- extend the error code space to 32 bits by @marten-seemann in #74
- update quic-go to v0.39.0 by @marten-seemann in #96
New Contributors
Full Changelog: v0.5.3...v0.6.0
v0.5.3
What's Changed
- tests: stop using deprecated math/rand.Read by @marten-seemann in #73
- synchronise sending streamHeader by @sukunrt in #78
- release v0.5.3 by @marten-seemann in #79
New Contributors
Full Changelog: v0.5.2...v0.5.3
v0.5.2
What's Changed
- rename connection to session in tests by @marten-seemann in #63
- correctly handle OpenStreamSync returning after the session was closed by @marten-seemann in #67
Full Changelog: v0.5.1...v0.5.2
v0.5.1
This release makes sure that we only set the error code once when a session is closed. This also fixes a race condition that would happen when accessing that error.
Changelog
- only close a session once by @marten-seemann in #62
Full Changelog: v0.5.0...v0.5.1
v0.5.0
Breaking Changes
webtransport-go has moved from the private GitHub account of marten-seemann to a dedicated org, quic-go. Now all the QUIC-related repositories (the various qtls forks of crypto/tls, our QPACK implementation, quic-go etc.) are now all located under this org. Note that this will require users to update the import path in go.mod as well as in Go files. The new import path is github.com/quic-go/webtransport-go.
Changelog
- use quicvarint.Append instead of quicvarint.Write by @marten-seemann in #56
- update quic-go to v0.32.0 by @marten-seemann in #58
- change module name to github.com/quic-go/webtransport-go by @marten-seemann in #59
Full Changelog: v0.4.3...v0.5.0
v0.4.2
What's Changed
- use a buffered channel in the acceptQueue by @marten-seemann in #53
Full Changelog: v0.4.1...v0.4.2