Upgrade web-transport crates to v0.10.1 - #143
Merged
englishm merged 5 commits intoFeb 18, 2026
Merged
Conversation
Upgrade from web-transport v0.3.0 / web-transport-quinn v0.3.4 / web-transport-proto v0.2.8 to web-transport v0.10.1 / web-transport-quinn v0.11.4 / web-transport-proto v0.5.2. The v0.11.x quinn backend has proper support for: - H3 SETTINGS: ENABLE_DATAGRAM, WEBTRANSPORT_MAX_SESSIONS, ENABLE_CONNECT_PROTOCOL, and Chrome-compat deprecated settings - Capsule protocol for graceful session close - Sub-protocol negotiation via wt-available-protocols headers - GREASE filtering in H3 settings - Session::raw() for clean raw-QUIC (moqt:// scheme) fallback - Session stores ConnectRequest with URL (enables future path extraction) - web_transport_trait::Session trait for backend abstraction API changes adapted: - ALPN constant changed from &[u8] to &str (.as_bytes() added) - accept(conn) -> Request::accept(conn) then .ok().await - connect_with(conn, url) -> Session::connect(conn, url) - conn.into() -> Session::raw(conn, url, ConnectResponse::default()) - Three error variants collapsed into one web_transport::Error - is_graceful_close() updated for new error type hierarchy - Session methods now take &self instead of &mut self - read_buf() returns Option<usize> instead of bool - read_chunk() renamed to read()
englishm-cloudflare
force-pushed
the
me/web-transport-upgrade
branch
from
February 18, 2026 21:28
9004c87 to
22e98b3
Compare
nnazo
approved these changes
Feb 18, 2026
web-transport-quinn v0.11+ decodes HTTP/3-encoded close codes at the SessionError level. A WebTransport graceful close (code 0) now arrives as WebTransportError::Closed(0, "") rather than ConnectionError::ApplicationClosed(h3_encoded_code). Without this fix, is_session_error_graceful() returned false for all WebTransportError variants, misclassifying graceful WebTransport closes as errors in metrics.
WebTransport graceful close is driven by CLOSE_WEBTRANSPORT_SESSION capsule (code 0), not APPLICATION_CLOSE directly. Updated doc comments to distinguish the two transport mechanisms accurately.
web-transport-quinn, web-transport-proto, and quinn are all accessible via re-exports from the web-transport crate (web_transport::quinn::*, web_transport::quinn::proto::*, web_transport::quinn::quinn::*). Removes the direct dependencies, fixing the cargo-machete lint.
The SessionError conversion from ConnectionError via error_from_http3 is the typical path but not guaranteed for all cases. Wording now reflects that decoding depends on the conversion path being used and succeeding.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Upgrade the web-transport dependency family from v0.3.x to v0.10.1 / v0.11.4 from crates.io.
web-transportv0.3.0 → v0.10.1web-transport-quinnv0.3.4 → v0.11.4web-transport-protov0.2.8 → v0.5.2What's new in web-transport-quinn v0.11.x
ENABLE_DATAGRAM,WEBTRANSPORT_MAX_SESSIONS,ENABLE_CONNECT_PROTOCOL, and Chrome-compat deprecated settingswt-available-protocolsheadersSession::raw()for clean raw-QUIC (moqt://scheme) fallbackSessionstoresConnectRequestwith URL (enables future path extraction)web_transport_trait::Sessiontrait for backend abstractionAPI changes adapted
&[u8]→&str(.as_bytes()added at call sites)accept(conn)→Request::accept(conn)then.ok().awaitconnect_with(conn, url)→Session::connect(conn, url)conn.into()→Session::raw(conn, url, ConnectResponse::default())Session,Read,Write) collapsed into oneweb_transport::Erroris_graceful_close()updated for the new error type hierarchy&mut self→&selfread_buf()returnsOption<usize>instead ofbool;read_chunk()renamed toread()Testing
cargo test --verbose— all 88 tests passcargo clippy --no-deps— cleancargo fmt --check— clean