Highlights
- Upstream v26.10.29 and v26.10.31 (#71). New in this release:
- XHTTP server
h2Params. OPTIONSas an XHTTP uplink method.- MPTCP is off by default on listeners.
- A stricter QUIC and TLS sniffer.
- Limits on geodata downloads.
- The XDRIVE slot ring and an S3 backend.
- XHTTP server
h2Paramsworks with the fork'sh2Flowgovernor. A receive window set inh2Flowoverrides the one fromh2Params. With the governor on, its defaults fill only the windows that neither config sets.
Fork fixes
- Splithttp protobuf field numbers (#71). Upstream gave field 30 of the splithttp
Configmessage toh2Params. The fork used field 30 formuxKeepAliveSecs. The fork-ownedmuxKeepAliveSecs,muxKeepAliveBytesandh2Flowmove from 30, 31 and 32 to 100, 101 and 102, so upstream's next fields stay free. - XHTTP listener leak on a bad
h2Params(#71). Upstream parsesh2Paramsafter the TCP listener binds, and its error path does not close the listener. The address then stays bound until the process exits. The fork parsesh2Paramsbefore binding. - Governed stream limit (#71). A server with the
h2Flowgovernor on now refuses anh2Params.MaxConcurrentStreamsabove 4096, the number of streams the governor tracks. Before, the server could advertise more streams than that, and the next stream past 4096 would tear the connection down. - TLS sniffer (#71). The fork's two-value sniffer API now carries upstream's rejection of an empty SNI HostName (XTLS#7292).
Upstream changes
- v26.10.29
- Config: inbound modules now initialize last (XTLS#7284).
- XDRIVE: the Google Drive slot ring (XTLS#7217) and an
s3storage backend (XTLS#7231). - WebSocket: a normal close frame now reads as
io.EOF(XTLS#7236). - Darwin: the swapped TCP keepalive idle and interval are fixed (XTLS#7219).
- DNS outbound: hijacked A/AAAA replies stay within the buffer (XTLS#7225).
- Geodata: download size, file extension and update frequency are limited (XTLS#7267). The client is HTTPS-only, and a cron interval under one minute is refused.
- Geodata: the built-in "private" IP ranges now cover more ranges, for example NAT64
64:ff9b::/96and 6to42002::/16(XTLS#7249). - Freedom: a warning to migrate
fragmentandnoisesto Finalmask (XTLS#7242). - Linux IPv6
processrouting (XTLS#7232), the file loader's extension check (XTLS#7255), andxray api adrules(XTLS#7276).
- v26.10.31
- The default listener disables MPTCP unless
sockopt.tcpMptcpis set (XTLS#7291). - XHTTP server:
h2Params(XTLS#7295), andOPTIONSasuplinkHTTPMethod(XTLS#7290). - The QUIC sniffer rejects a ClientHello with gaps in its CRYPTO data (XTLS#7292).
- The HTTP inbound forwards short
100 Continueresponses at once (XTLS#7298). - Geodata decompresses gzip while streaming (XTLS#7294).
- TUN
autoSystemWfpBlockLeakacceptstcp/portandudp/port(XTLS#7288). xray api bitakes several balancers (XTLS#7299).- Regenerated
*.pb.gofiles (XTLS#7287).
- The default listener disables MPTCP unless
Compatibility notes
- Protobuf configs and API clients. A protobuf config or API client built against the old splithttp field numbers 30, 31 and 32 must be regenerated. Otherwise its keep-alive and
h2Flowsettings are lost. A nonempty old field 30 now lands inh2Paramsand fails the listener. JSON configs are unaffected. - NAT64 hosts. Freedom blocks private destinations by default for VLESS, VMess, Trojan, Hysteria, WireGuard and Shadowsocks inbounds. Since upstream's XTLS#7249, NAT64
64:ff9b::/96counts as private. On an IPv6-only server behind DNS64/NAT64, IPv4-only destinations are therefore blocked unlessfinalRulesallows them. The fork keeps upstream's behavior here. - Geodata cron. Geodata refuses
cronintervals under one minute and non-HTTPS asset URLs. - MPTCP. Listeners no longer accept MPTCP unless
sockopt.tcpMptcpis set. - Wire formats. VLESS, Trojan, REALITY, Vision and SMUX wire formats are unchanged.
- Fork deviations. Fork deviations from upstream, and the tests that guard them, are listed in
docs/FORK.md. Builds use Go 1.27.3 with-tags http2legacy.
Validation
- Local
structural_presence.sh standardpassed on candidate1ae21119, including race, checkptr, process interoperability matrices and version-skew scenarios. - Pre-release Validation and Tests and Checkings passed on release commit
3b2591c6. - Earlier validation attempts exposed test port collisions; fixes landed in #72 and #73 before this release.