WebTransport

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).

A stream and a datagram over one WebTransport sessionJavaScript
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]));
Persistent client-server channels compared
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.