finds.dev← search

// the find

kern/filepizza

★ 10,223 · TypeScript · NOASSERTION · updated Oct 2026

:pizza: Peer-to-peer file transfers in your browser

FilePizza sends files directly from one browser to another over WebRTC, so nothing is uploaded to a server first. It suits someone who needs to hand a file to a specific person right now and would rather not sign up for a file host or wait for an upload to finish.

- The transfer path skips the intermediary entirely. The server handles only signalling and channel metadata, so the data never touches it, and the privacy claim holds up in the code.

- Downloads stream through a Service Worker (public/sw.js), so the receiving side does not have to buffer a large file in memory before saving it.

- Encryption comes from WebRTC's DTLS, not a custom layer. The optional password is an extra gate on top of that, not the only protection.

- docs/file-transfer-protocol.md documents the wire protocol. That is rare at this size and makes the client and server halves easier to review. TURN support is an opt-in COTURN_ENABLED flag, so a relay can be added for peers behind strict NAT without forking anything.

- The uploader has to keep the tab open for the whole transfer, and the FAQ says so. A laptop that sleeps or a phone browser that suspends the page will kill the transfer, and there is no resume to fall back on.

- Signalling defaults to PeerJS's public host (0.peerjs.com) and STUN to Google's server. Some connections behind symmetric NAT will not establish without a TURN relay, so self-hosting means running coturn and a PeerJS server yourself.

- Channel state falls back to in-memory storage when REDIS_URL is unset. That is fine for one instance, but with several instances behind a load balancer and no Redis, peers cannot find each other's channels, and every restart drops active ones.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →