libp2p WebRTC over QR
Two browsers connect directly as libp2p peers — no relay, no signaling server. The WebRTC offer and answer travel out-of-band as signed QR codes: one device scans the code off the other screen.
1 Start browser peer
Creates a libp2p node with a fresh key pair. Its Peer ID signs every payload you show.
What this sends, and to whom
Checking the network means asking a STUN server what address your packets arrive from. Two operators answer that question here, Cloudflare and Google, and each sees the public address the request came from: over IPv4 that is your router's address, shared with everyone behind it — over IPv6 it is this device's own address, which is not shared with anyone.
A STUN request carries nothing else. No page address, no cookies, no browser name — less than any website you open is told about you. It happens again whenever you create or accept an invite, because a direct connection cannot be made without those addresses.
The answer comes back to this page and stays here. Nothing is sent to us: this page has no backend to send it to.
Your peer identity
This is not what you send to anyone - it is the key your invite links are signed with.
not started2 Connect to someone
Two ways in, and they end up in the same place: send an invite link, or scan a code. You only ever do one of the two boxes below - whichever matches what you have.
I want to invite someone
They can also point a phone camera at this code - it opens the same link.
Someone sent me a link
Opening their link does everything by itself. Only paste here if tapping the link did not work.
3 Send data over libp2p
Once the handshake completes, messages travel over a libp2p protocol stream on the WebRTC data channel. Files go through Helia: the sender adds the bytes and announces the CID, the receiver pulls them with bitswap over the same connection.