Skip to content

Xray-core v26.8.20

Latest

Choose a tag to compare

@Jolymmiles Jolymmiles released this 14 Aug 16:31

Highlights

  • Completes the hardened Hysteria 2.12.1 transport integration proposed in XTLS#6565.
  • Fixes a rare SMUX stale-carrier recovery race found by the native Linux reconnect gate.
  • Restores predictable releases: publishing now starts only the binary matrix, while native validation remains a separate explicit pre-release workflow.
  • v26.8.19 did not produce release assets; operators should use v26.8.20.

Fork fixes

  • Preserves existing QuicParams protobuf field numbers and adds compatibility coverage for the new QUIC options.
  • Adds optional Realm UPnP/NAT-PMP mapping with bounded discovery, lease renewal, rollback, zero-lifetime deletion, and deterministic cleanup.
  • Ensures Realm, Hysteria, and XHTTP/3 listener shutdown releases owned sockets, timers, goroutines, and mapping leases.
  • Clones shared TLS configuration before applying QUIC client behavior and propagates Brutal loss-compensation settings through every affected path.
  • Corrects SMUX response recovery when a stale write returns success after the peer carrier has failed. Readers now distinguish an early replacement from a completed writer and replay the bounded pre-response payload exactly once.
  • Moves validation into .github/workflows/pre-release-validation.yml; .github/workflows/release.yml is build-only and no longer runs on ordinary pushes or pull requests.

Upstream changes

  • No additional upstream stable release was merged for this version; upstream main at 7d214f8b remains an ancestor of this fork release.
  • The pending changes from XTLS#6565 were integrated against the fork's current QUIC paths and completed with lifecycle, compatibility, and error-path hardening.

Compatibility notes

  • Existing QuicParams protobuf fields 1–13 retain their wire numbers; new options use fields 14–16.
  • Chrome-style QUIC behavior is enabled by default. Set disableChromeParrot for custom certificate callbacks or incompatible TLS behavior.
  • disableGSO is 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 prior behavior.
  • Realm ipMode accepts dual, v4, or v6 and defaults to dual.
  • No SMUX wire bytes changed; the reconnect fix changes only local recovery coordination.

Validation

  • Affected unit, race, checkptr, vet, formatting, module-integrity, YAML, release-contract, and external-mux dependency gates passed on Go 1.26.5.
  • Xray, sing-box, and Mihomo Hysteria interoperability passed all 9/9 process executions.
  • The SMUX hardening harness passed 400/400 reconnect cycles across eight Xray/sing-box/Mihomo direction and carrier topologies on Darwin/arm64; this is harness evidence, not Linux capacity evidence.
  • The initial native Linux matrix passed six of eight 50-cycle SMUX topologies; its two Mihomo/VLESS failures exposed a restart-readiness flaw in the harness.
  • Native Linux follow-up run 31818742469 passed both corrected Mihomo/VLESS directions for 50/50 cycles each on the exact release commit; checked loopback error/drop deltas remained zero.