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

Your Peer ID not started

What your peer identity is, and where its key lives

2 Connect to someone

Invite someone, or scan the code they are showing you. Either one gets you to the same place.

Someone sent me a link and tapping it did not work

4 What worked here

Every attempt is recorded and closed when it connects or fails. Both are kept - a log of successes says nothing about what is broken.

Off by default. Nothing is written until this is ticked, and turning it off again keeps what is already recorded - use Clear for that. What is recorded stays on this device, and the export leaves addresses behind. One thing does leave: while this is on, a peer you connect to is told exactly what the export carries - browser, system, provider, country and region - and tells you the same. Your address, your city and the notes you typed never travel.

Running a test?

A labelled run is evidence. An unlabelled one is just an attempt somebody made, and nothing can tell the two apart afterwards.

The other person's row stays on their device.

Two requests, two disclosures. api.ipquery.io learns this device's IP address - that is what makes its answer possible. If a position is granted, nominatim.openstreetmap.org is asked what place it is in, and learns the coordinates rounded to about a kilometre - the town, not the building. Leave this off and type the fields yourself; they are the same either way.

Review what you recorded

A verdict per row, and nothing but a person can give it. Hand-collected results are full of fumbled camera aims, codes that expired on the way to the other room and runs abandoned halfway, and no detail in a record tells those apart from a network that cannot do it. Only rows you mark sound could ever be published; the rest stay here as your own record. Your notes stay here either way - the verdict is what would travel.

Nothing has left this device and nothing has connected to anything. Until this button is pressed, the only connection this page has ever opened is the one to the device you were testing with.

Show exactly what would leave

Stays here:

    Goes, exactly as written:

    
                  

    The log is append-only and every row is signed. It cannot be edited or taken back afterwards, which is why the review stage comes first.

    See what has been published

    No attempts recorded yet.

    3 Talk and send files

    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.

    Not connected
    Drop a file here or click to choose one — it is added to Helia and its CID is sent over the chat stream

    Nothing sent or received yet.

    Two browsers connect to each other directly. There is no server in the middle holding your messages, and nothing you send passes through us.

    Show the code on this screen to the person next to you, or send them the link. They scan or tap it, show you a code back, and you are connected.

    Whoever holds that code can connect to you until it expires, ten minutes later. Show it to the person you mean to.

    Their phone camera opens the same link - or send it to them.