Skip to content

deps: bump quic-go to v0.59.0 (unbounded fork rebased) + pion/webrtc v4.2.11#354

Merged
myleshorton merged 4 commits into
mainfrom
fisk/quic-go-v0.59
Apr 21, 2026
Merged

deps: bump quic-go to v0.59.0 (unbounded fork rebased) + pion/webrtc v4.2.11#354
myleshorton merged 4 commits into
mainfrom
fisk/quic-go-v0.59

Conversation

@myleshorton

Copy link
Copy Markdown
Contributor

Summary

Brings the fisk/quic-go-v0.59 branch to main. Primary purpose: align broflake's source with the binary artifact currently pinned as v0.0.0-20260417230047-38c1be9d5596 — lantern-box and lantern-cloud already consume that pseudo-version (which lives on this branch), so their builds work, but `broflake@main` has drifted to the point of being unbuildable in the downstream workspace.

Commits

  1. `cdc666f deps: bump pion/webrtc to v4.2.11, migrate transport v3 -> v4` — the same work as PR deps: bump pion/webrtc to v4.2.11, migrate transport v3 → v4 #351. This migration is a prerequisite of the quic-go v0.59 API change (webrtc_api.go ties pion's Net to quic-go's transport abstractions), so they ship together here. Subsumes deps: bump pion/webrtc to v4.2.11, migrate transport v3 → v4 #351.
  2. `a3703b2`, `1cb79cf` — version bumps along the way.
  3. `f816a6d deps: bump quic-go to v0.59.0 (unbounded fork rebased)` — the core of this PR. Replaces `v0.51.3-unbounded` with `v0.59.0-unbounded` (our fork with the ConnectionID bump rebased onto upstream v0.59.0). Adapts to two breaking API changes between v0.51 and v0.59 in quic.go, egress/quic.go, common/network.go.
  4. `38c1be9 common: bump Version to v2.3.0` — marks the feature bundle.

Why this matters

Without this on main, anyone fetching broflake@main gets v0.51-API code that's incompatible with the published broflake pseudo-version our downstream repos already use. It also creates a confusing state where `go.work`-based workspace builds break (the local checkout is effectively older than the published pin). A branch that's the actual source of the binary shipped to production needs to be on main.

Conflicts with current main

Since PR #350 (covert-dtls + observability from #353) landed while this branch sat, there are expected conflicts:

All resolvable by hand in a merge commit; the resolution is the same one already living in `fisk/pion-v4.2-covert-dtls` (pion v4 imports + keep covertdtls imports).

What this replaces

Test plan

  • Staging: already served by the binary this branch produces, under the pseudo-version pin. No runtime change.
  • After merge: bump `broflake@…` pin in lantern-box + radiance + lantern-cloud + lantern to the new main SHA so they build from the correct source.

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings April 21, 2026 16:53
myleshorton and others added 3 commits April 21, 2026 10:57
pion/webrtc v4.2.x switched its internal plumbing from pion/transport/v3
to v4. Migrate the three clientcore files that reference transport
directly so the upgrade lands cleanly.

Doing this now, before Unbounded has production clients, is cheap:
four files across broflake, one in lantern-box. Deferring would mean
more files to migrate and — because widgets don't auto-update — users
on old widgets permanently stranded on pion v4.1.x. DTLS has explicit
version negotiation so this change is not wire-breaking between old
and new peers.

This bump also picks up:
- SCTP RACK (claimed 71% throughput improvement)
- ICE renomination support
- pion/dtls v3.1.2 with DTLS 1.3 handshake components in progress
  (not yet usable — pion/dtls still says "Only DTLS 1.2 is currently
  supported" — but a step toward future DTLS-1.3-based mitigation of
  the Russian filter described in net4people/bbs#603)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Our fork of quic-go has one custom patch: +50 to MaxActiveConnectionIDs
and MaxIssuedConnectionIDs to support more connection migrations per
QUIC session. Those values remain unexported consts in upstream's
internal/protocol/params.go as of v0.59.0, so the fork is still needed.

Rebased the single custom commit onto upstream v0.59.0 and tagged the
result v0.59.0-unbounded in getlantern/quic-go-unbounded-fork. This
commit just updates the replace directive and adapts to two breaking
API changes in quic-go between v0.51 and v0.59:

- quic.Connection (interface) became *quic.Conn (struct pointer)
- quic.Stream (interface) became *quic.Stream (struct pointer)

Also bumps common/Version to v2.3.0 since the API surface exposed to
consumers (QUICStreamNetConn.Stream field type) changed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
QUICStreamNetConn.Stream field type changed (quic.Stream -> *quic.Stream);
that's a public API change, so minor bump.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Aligns broflake@main with the QUIC/WebRTC dependency set and source code that downstream workspaces already pin to, by rebasing the unbounded quic-go fork on upstream v0.59.0 and migrating pion transport v3 → v4.

Changes:

  • Bump github.com/getlantern/quic-go-unbounded-fork (via replace) to v0.59.0-unbounded and update call sites for the new *quic.Conn API.
  • Bump pion/webrtc to v4.2.11 and migrate pion/transport imports to v4.
  • Update module/tooling metadata (go 1.24.0, protocol common.Versionv2.3.0) and refresh sums.

Reviewed changes

Copilot reviewed 8 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
go.mod Updates Go version, bumps quic-go/webrtc deps, migrates pion transport to v4.
go.sum Dependency checksum refresh for the new quic-go fork + pion/webrtc cascade.
egress/quic.go Updates connection types/signatures to quic-go v0.59 (*quic.Conn).
common/version.go Bumps protocol/version string to v2.3.0.
common/network.go Updates QUIC stream wrapper to match new quic-go stream type usage.
clientcore/webrtc_api.go Switches non-wasm transport imports to pion/transport/v4.
clientcore/webrtc_api_js.go Switches wasm transport import to pion/transport/v4.
clientcore/settings.go Switches WebRTCOptions.Net type import to pion/transport/v4.
clientcore/quic.go Updates eventual-connection plumbing to store/return *quic.Conn.
Comments suppressed due to low confidence (1)

go.mod:3

  • The go directive was bumped to 1.24.0, which raises the minimum Go toolchain required to build this module. If the intent is to pin/standardize the toolchain version (and reduce breakage for developers/CI still on older Go), consider adding a toolchain go1.24.0 directive and/or explicitly confirming CI/build images have been updated to Go 1.24.
go 1.24.0

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread egress/quic.go
Copilot pointed out that with connection/conn now typed as *quic.Conn,
the (*record.connection).X / (*conn).X patterns are redundant — Go
auto-dereferences for method calls. Cleaned up four sites:
  egress/quic.go:52   (*record.connection).CloseWithError
  egress/quic.go:95   (*record.connection).AddPath
  egress/quic.go:117  (*record.lastPath).Close
  egress/egresslib.go:172  (*conn).AcceptStream

No behaviour change — purely stylistic.
@myleshorton

Copy link
Copy Markdown
Contributor Author

Tested this end-to-end. Pulling in!

@myleshorton myleshorton merged commit caea079 into main Apr 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants