v153 · webtransport · send streams

Three interfaces, one contract

The feature is spread across three surfaces: a method on WebTransport (createSendGroup), a WritableStream subclass for every outgoing stream (WebTransportSendStream), and a small grouping interface (WebTransportSendGroup). Each has an exact IDL shape — this page reads all of it off the real objects.

Chrome targets this for Chrome 153 behind the WebTransportSendGroup runtime flag — launch with --enable-blink-features=WebTransportSendGroup, or flip chrome://flags/#enable-experimental-web-platform-features and relaunch. Rows about objects this build does not have report that absence; nothing is inferred.

The IDL, checked member by member

Observed vs the spec's IDL
checkthis buildIDL says
Press the button.

One stats dictionary, two scopes

Both WebTransportSendStream.getStats() and WebTransportSendGroup.getStats() resolve the same WebTransportSendStreamStats shape — per-stream in one case, aggregated across the group's streams in the other:

{
  bytesWritten:      /* what the app has written into the stream  */
  bytesSent:         /* what has actually left for the network    */
  bytesAcknowledged: /* what the peer's QUIC stack has confirmed  */
}
// bytesAcknowledged ≤ bytesSent ≤ bytesWritten — three positions of
// the same high-water mark, which is how you see WHERE bytes are stuck.

Calling either needs an instance, and instances need an established session — the workbench makes the group-level call for real on builds that can.

code path

'createSendGroup' in WebTransport.prototype;              // the method
typeof WebTransportSendGroup;                             // the group type
typeof WebTransportSendStream;                            // the stream type

const p = WebTransportSendStream.prototype;
Object.getPrototypeOf(p) === WritableStream.prototype;    // direct subclass
['sendGroup', 'sendOrder', 'getStats', 'getWriter']
  .every((m) => Object.prototype.hasOwnProperty.call(p, m)); // its additions

new WebTransportSendStream();     // TypeError — session-only instances
new WebTransportSendGroup();      // TypeError — createSendGroup() only

see also