WebRTC Lab — step-by-step connection debugger

Runs entirely in this browser. Each card tests one layer of the pipeline in isolation, with live feedback, so you can see exactly what works, what doesn't, and why.

0 Environment

Can this browser do WebRTC, data channels, stats, WebSocket, OPFS? Runs on load.

1 ICE candidates

The key diagnostic. Shows the addresses this browser will offer a peer, and flags .local (mDNS) host candidates and a missing srflx (STUN failed).

2 Loopback

Two peers in this one tab, wired directly (no signaling). If this fails, WebRTC itself is broken; if it passes, the stack works and any real-peer failure is signaling or reachability.

3 Signaling

Tests the WebSocket relay in isolation. Connect, announce into the room, watch raw messages in the log.

Watch the console below for every message in/out.

4 Real peers

Full offer/answer over signaling (symmetric handshake, non-trickle). Open this page with the same room in another tab, browser, or device. The table shows each peer's ICE state and the selected candidate pair — i.e. how it connected (host/srflx/relay) or where it's stuck.

peers: 0

5 TURN relay

Fetches short-lived credentials from a TURN REST endpoint (e.g. the JSS turn plugin), then forces a loopback through the relay only — no host/srflx shortcuts. Passing means peers behind hostile NATs will connect. Fetched credentials are used by every layer for the rest of this session (they expire on their own).

Console