Highlights
- Integrates the Hysteria 2.12.1 transport updates proposed in XTLS#6565 and completes the server-side lifecycle and error-handling work needed by this fork.
- Adds optional UPnP and NAT-PMP port mapping for Realm, together with
ipModeselection for dual-stack, IPv4-only, and IPv6-only deployments. - Adds QUIC controls for Chrome-style transport behavior, GSO, and Brutal loss compensation.
Fork fixes
- Preserves existing
QuicParamsprotobuf field numbers and adds compatibility tests to prevent wire/config regressions. - Makes Realm mapping leases deterministic: bounded discovery and requests, early renewal, rollback after ambiguous failures, real zero-lifetime NAT-PMP deletion, and cleanup error propagation.
- Closes Realm constructor and shutdown leaks and serializes renew/close ownership to avoid timer and goroutine races.
- Ensures Hysteria and XHTTP/3 listeners release UDP sockets and wait for owned accept/client goroutines during shutdown.
- Clones TLS configuration before applying QUIC client behavior instead of mutating shared state.
- Propagates Brutal loss-compensation configuration through every affected runtime path.
Upstream changes
- No additional upstream stable release was merged for this version; upstream
mainat7d214f8bis already an ancestor of this fork release. - The pending changes from XTLS#6565 were integrated, reviewed against this fork's current QUIC paths, and completed with regression coverage and lifecycle hardening.
Compatibility notes
- Existing
QuicParamsprotobuf fields 1–13 retain their original numbers; the new options use fields 14–16. - Chrome-style QUIC behavior is enabled by default. Set
disableChromeParrotwhen custom certificate callbacks or non-compatible TLS behavior require it. disableGSOis available for platforms or network stacks where UDP GSO must not be used.- Realm port mapping is opt-in through
portMapping.enabled; omitted configuration preserves the previous behavior. - Realm
ipModeacceptsdual,v4, orv6, and defaults todual.
Validation
- Affected unit tests passed on Go 1.26.5.
- Affected race,
checkptr,go vet, formatting, module-integrity, and dependency-ban gates passed. - Xray, sing-box, and Mihomo Hysteria process interoperability passed 9/9 executions.
- The XHTTP/3 HandlerService removal probe confirmed that the UDP listener is released.
- A static Linux/amd64 release-style cross-build passed (
a3b07b4422695ebbdc1288a0f7830ef909516a92181323da68a116ebddad4d77). Native Linux validation and the full platform asset matrix are enforced by the release workflow.