Highlights
- Upstream v26.11.9 (#79). Chrome 155 is the new default
chromefingerprint andhellochrome_155is new. Mux.Cool defaults rise to a concurrency of 128 and a lifetime of 1024 reuses, and the release adds XDRIVE Google Drive optimizations, new TUNautoSystemWfpBlockLeakvalues, and freedomfinalRuleslogLevel/delay. - XHTTP
h2Flowgovernor fixes (#74, #75). A governed server no longer loses its per-connection send-window cap after a download ends at its window, and a download that returns to pi no longer steps from an error measured before it left.
Fork fixes
- Connection send-window cap kept after an ended download (#74). When a download ended on the frame that used up its window while the client's side stayed open, as in stream-one,
endDownleft the stream marked as waiting. The guard then fired for a finished stream: it sent a PING and a WINDOW_UPDATE, and on a client that credits in large steps it setsendWindow = 0, removing theh2Flow.maxConnectionSendWindowbound (4 MiB by default) for the rest of the connection.endDownnow clears the waiting mark, so sibling downloads keep the designed capped credit. - pi restart after leaving pi (#75). pi steps in velocity form (
Ki·e + Kp·(e − piPrev)). Outside pi the governor clearedpiRTTbut keptpiPrev, so the firstKpstep on return used an error taken under another path.piPrevis now cleared too, and a returning stream starts from an error of zero. - Mux.Cool
MutexWriterkeeps interrupts (#79). Upstream wraps every worker's link writer in aMutexWriterthat embeds onlybuf.Writer, socommon.Interrupt(link.Writer)did nothing when a worker ended and the client carrier and inbound waited for their own timeouts. The fork'sMutexWriterforwardsInterruptandClosewithout taking the lock; the XUDP response sink writes through it as well. - uTLS P-256 key share (#79). Upstream now pins refraction-networking/utls
a13c59ffe98b, where a Firefox hello still fails with "tls: invalid server key share" when the server picks P-256 (utls#402 / XTLS#416). The fork's fix is rebased onto the new key-exchange code as Jolymmiles/utls6906384, andgo.modreplaces uTLS with it. - Sniffing timeout (#79).
TimeoutWrapperReaderreports a timeout asbuf.ErrReadTimeout, as upstream XTLS#7327 does. With sniffing on, VMess, Trojan and Shadowsocks no longer end a request whose client stays silent for 100 ms. Vision still pads the header on timeout. - XDRIVE config copy (#79).
paramsForStorageclones itsConfiginstead of copying a protobuf message by value, whichgo vet(copylocks) rejects in upstream code. XDRIVE keeps the fork's reservation under the pool lock and adds upstream'sIsClosedcheck.
Upstream changes
- v26.11.9
- uTLS: Chrome 155 is the default fingerprint, and
hellochrome_155is registered (XTLS#7135). - REALITY: the in-tree copy takes
4bb46b2afd8b; probe deadlines inrecord_detect.go, and an empty SNI no longer fails. - Mux.Cool: a
concurrencyof 0-128 becomes 128, and the per-connection reuse budget is 1024, both formaxReuseTimes0 and for the XUDP pool (was 128). - Inbound: a handler that fails to start is closed and removed (XTLS#7223).
- TUN:
autoSystemWfpBlockLeakaccepts "all", "allexceptlan", ports, port ranges, "tcp"/"udp", "icmp" and a leading CIDR, and always allows loopback, DHCP and IPv6 neighbor discovery (XTLS#7315). Windows IPv6 setup errors forgateway,dnsandautoSystemRoutingTableare logged instead of exiting when IPv6 is disabled (XTLS#7325, XTLS#7332, XTLS#7341). - Freedom
finalRules:logLevelis added,blockDelaybecomesdelay(the old name is deprecated), and the default safe policy also applies to MASQUE (XTLS#7329). - WireGuard: the endpoint lookup gives up at the connection's deadline (XTLS#7323).
- UdpHop finalmask: no spurious error logs on closed hop sockets (XTLS#7319).
- Geodata:
.dat.gzis downloaded for XTLS/Xray-rules-dat URLs (XTLS#7334). - XDRIVE: Google Drive backend optimizations (XTLS#7340, XTLS#7352) and a retry of "local" Get on Windows sharing violations (XTLS#7316).
- Dependencies: golang.org/x/net 0.62.0, google.golang.org/grpc 1.85.0, klauspost/cpuid 2.4.2.
- uTLS: Chrome 155 is the default fingerprint, and
Compatibility notes
- Fingerprint.
chromeandhellochrome_autonow send a Chrome 155 ClientHello.hellogolangmatches Go 1.27, addingsignature_algorithms_certand the P-256/P-384 ML-KEM hybrid groups. Every other fingerprint keeps its extensions, groups and key shares. - Mux.Cool. Clients that leave
concurrencyormaxReuseTimesunset now carry more streams per connection and reuse a connection longer. The fork'smaxReuseTimesvalidation and config field 30 are unchanged. - Freedom.
finalRules[].blockDelaystill works but logs a deprecation warning; rename it todelay. - Wire formats. VLESS, Trojan, REALITY server, Vision and SMUX wire bytes 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
testing/release/structural_presence.sh standardpassed on the upstream-sync candidate36215d63: vformat, vet, unit, race and checkptr over./..., the VLESS 36/36, SMUX 72/72, H2MUX 72/72 and header-record 12/12 process cells, version skew and presence. The first run hit the knownTestDokodemoTCPPickPortEADDRINUSEflake; the rerun was clean. - Pre-release Validation and Tests and Checkings passed on release commit
297fef3a.