WebTransport runs a client-server session over HTTP/3 (QUIC over UDP). Its many streams are independent, so a lost packet stalls only its own stream, and unreliable datagrams suit data that is useless once late, such as game positions. It became Baseline Newly available in March 2026 with Safari 26.4 10 . It needs an HTTP/3 server such as Go's webtransport-go or Python's aioquic (not run here).
const wt = new WebTransport('https://game.example:4433/play');
await wt.ready;
const stream = await wt.createBidirectionalStream(); // reliable and ordered
await stream.writable.getWriter().write(new TextEncoder().encode('join room 7'));
const positions = wt.datagrams.writable.getWriter(); // unreliable, unordered
await positions.write(new Float32Array([12.5, 3.25]));| WebSocket | SSE | WebTransport | |
|---|---|---|---|
| Direction | Two-way | Server to client | Two-way |
| Runs over | TCP | HTTP response | HTTP/3 (QUIC) |
| Unreliable mode | No | No | Datagrams |
| Baseline | Widely (2018) | Widely (2022) | Newly (2026) |
Choose SSE for one-way feeds, WebSocket for messaging, WebTransport for lowest latency, and WebRTC between browsers.