πŸŽ™οΈ NURL PTT Chat Β· push-to-talk voice over a NURL relay

Real voice between everyone on a channel, relayed by a NURL WebSocket server. ← back to the playground
Channel public offline
Open this link in another tab or device to talk β€” everyone on the channel hears each other.
Click β€œConnect & talk” to join the channel.

What this proves

Two or more browsers on the same channel exchange live microphone audio through a NURL server. The page captures the mic, ships 20 ms PCM frames over a WebSocket to /pptws/<channel>, and the NURL relay fans each frame out to every other member of that channel (the same group-multicast shape as the native overlay's relay). Inbound frames play back through Web Audio. The meter shows your mic; the badge shows how many are connected.

How the voice path works

β€’ The relay is a NURL program β€” the playground's own HTTP server gained a WebSocket upgrade hook, and the channel registry + fan-out + presence are ~150 lines of NURL (nurlapi/pptws.nu).
β€’ A channel is a group; a frame from one member is forwarded to all others, never echoed back to the sender.
β€’ The browser can't reach the native pubkey overlay (raw UDP/TCP), so this is the relayed leg. The native app (pttvoice/) adds the direct peer-to-peer path and Opus.

Channels. No id β†’ the shared public channel. + Create channel mints a random id and drops you on it; anyone who opens /pptchat/<id> joins the same one β€” the URL is the invite. In the mobile app that id becomes a generated secret shared by QR code or link, so only invited devices can join and decrypt.
Microphone access needs a secure context β€” open via https:// or http://localhost. PCM is uncompressed here (Opus is in the native build); fine for a LAN/demo.