v158 · webtransport · reliability

Readonly, static, and the unknown-value edge

Two attributes, two different homes. reliability is a readonly accessor on WebTransport.prototype — a getter with no setter, so a strict-mode write must throw. supportsReliableOnly is static: it lives on the constructor object and never appears on instances. This page dumps the real property descriptors and runs the writes that prove each claim.

Chrome targets this for Chrome 158 behind WebTransportReliability (--enable-blink-features=WebTransportReliability, or chrome://flags/#enable-experimental-web-platform-features). On a build without the attributes, every panel below reports the missing surface explicitly instead of inventing descriptors.

Property descriptors, read from the live objects

What Object.getOwnPropertyDescriptor actually returns
propertyfound onshapematches the IDL?
Press the button.

The writes that must fail

Three real assignments, run in strict mode against a real transport object. On a supporting build the first two throw TypeError (readonly accessor, no setter); the third proves statics never reach instances.

Assignment outcomes (strict mode)
assignmentresult on this build
Press the button.

Three engines, three correct answers

Recorded from the standards-position research on the ChromeStatus entry (October 2025–2026) — this table is documentation, not a live cross-browser probe. The "this browser, live" column underneath it is the only live data on this panel.

Recorded engine behaviour vs. this browser's live read
enginereliabilitysupportsReliableOnly
Chromium (158, recorded)yes — established sessions report "supports-unreliable" (HTTP/3 only)yes — returns false (no HTTP/2 fallback)
Firefox (recorded)yesno — static not exposed
WebKit (recorded)yesyes — returns true (its WebTransport is reliable-only today)
this browser, live……

code path

// Readonly accessor: getter, no setter, on the prototype.
const d = Object.getOwnPropertyDescriptor(WebTransport.prototype, "reliability");
// d → { get: f, set: undefined, enumerable: true, configurable: true }

"use strict";
transport.reliability = "supports-unreliable"; // TypeError — no setter

// Static: on the constructor, never on instances.
Object.getOwnPropertyDescriptor(WebTransport, "supportsReliableOnly"); // accessor
transport.supportsReliableOnly;                 // undefined — statics don't inherit

see also