v153 · webtransport · send streams
The workbench: groups and stream options, called for real
Everything here is a genuine call against a real transport object connecting to a dead endpoint. createSendGroup() is synchronous and legal while connecting; the group's getStats() returns a real promise; createUnidirectionalStream() converts its options dictionary at call time even though the stream itself can only arrive after establishment. Each step reports exactly what this build did.
Chrome targets this for Chrome 153 behind WebTransportSendGroup (--enable-blink-features=WebTransportSendGroup, or chrome://flags/#enable-experimental-web-platform-features). No HTTP/3 endpoint is reachable from this showcase, so the stream-creation promise can never resolve with a stream — what it does instead (stay pending, then reject when the connection fails) is itself the spec's behaviour, and the page labels it as such.
Four steps
transport
not yet
the group
not yet
group stats
not yet
the stream attempt — and which option members were really converted
not yet
code path
const t = new WebTransport("https://127.0.0.1:44443/never");
const group = t.createSendGroup(); // synchronous, legal while connecting
await group.getStats(); // { bytesWritten: 0, bytesSent: 0,
// bytesAcknowledged: 0 } — no
// streams in the group yet
const pending = t.createUnidirectionalStream({
sendGroup: group, // read NOW (dictionary conversion)
sendOrder: 7, // read NOW
}); // …but resolves only after ready
pending.catch((e) => { /* WebTransportError when the connection dies */ });