WebTransport support
Published Updated
WebTransport transmits data between a client and a server over HTTP/3, offering reliable transport via streams and unreliable, UDP-like transport via datagrams over a single connection.
Browser & ecosystem support
Section titled “Browser & ecosystem support”- Legend
- Yes
- Partial
- Flag
- No
- Unknown
| Browser / Platform | Support | Versions | Confidence | Source | Notes |
|---|---|---|---|---|---|
| Chrome (Desktop) | Yes | 97 | high | source | — |
| Chrome (Android) | Yes | 97 | high | source | 1 |
| Edge (Desktop) | Yes | 97 | high | source | 2 |
| Firefox (Desktop) | Yes | 114 | high | source | — |
| Firefox (Android) | Yes | 114 | high | source | 3 |
| Safari (macOS) | Yes | 26.4 | high | source | — |
| Safari (iOS) | Yes | 26.4 | high | source | 4 |
| Samsung Internet | Yes | 18.0 | high | source | 5 |
| WebView (Android) | Yes | 97 | high | source | 6 |
- Derived by browser-compat-data mirroring from Chrome.
- Derived by browser-compat-data mirroring from Chrome.
- Derived by browser-compat-data mirroring from Firefox.
- Derived by browser-compat-data mirroring from Safari.
- Derived by browser-compat-data mirroring from Chrome Android.
- Derived by browser-compat-data mirroring from Chrome Android.
How to use it
Section titled “How to use it”Pass an https server URL to the WebTransport() constructor, then await the ready
promise before using the connection:
async function connect(url) { const transport = new WebTransport(url); await transport.ready; return transport;}How to detect it at runtime
Section titled “How to detect it at runtime”Check for WebTransport on window before constructing one. When it is absent, fall
back to a WebSocket connection instead:
function openConnection(httpsUrl, wssUrl) { if ('WebTransport' in window) { return new WebTransport(httpsUrl); } return new WebSocket(wssUrl);}Practical checklist
Section titled “Practical checklist”- The URL passed to the constructor must use the
httpsscheme. - Datagrams (via the
datagramsproperty) are unreliable and unordered; use them only for data where losing or reordering a message is acceptable, such as regular game-state updates. - Use
createBidirectionalStream()orcreateUnidirectionalStream()when delivery and order must be guaranteed. - Safari did not ship WebTransport until Safari 26.4, closing a years-long gap where the API was effectively Chromium- and Firefox-only — do not assume it is universally available without checking the table above.
Where to go next
Section titled “Where to go next”← Back to the Compatibility explorer.