finds.dev← search

// the find

peers/peerjs

★ 13,355 · TypeScript · MIT · updated Feb 2026

Simple peer-to-peer with WebRTC.

PeerJS wraps WebRTC's notoriously awkward API into something you can actually use in an afternoon — `peer.connect(id)` and you're exchanging data. It handles signaling via its own PeerServer, supports both data channels and media streams, and has been around long enough to accumulate real-world hardening. Aimed at developers who need browser-to-browser communication without building the WebRTC plumbing themselves.

The API surface is genuinely minimal — connect, send, receive, done. No ICE candidate juggling exposed to the caller. Multiple serialization formats (JSON, BinaryPack, MsgPack) with the chunking logic handled internally, which matters because raw WebRTC data channels have a 16KB message size limit that will bite you silently. The e2e test suite covers a wide range of typed array and blob transfers across real browsers via BrowserStack, which is more than most WebRTC wrappers bother with. Semantic release and renovate are wired up, so the maintenance hygiene is solid.

You're dependent on a PeerServer for signaling — self-hosting it is straightforward but it's another piece to operate, and the hosted public server has historically had reliability issues. No built-in TURN server support beyond what you configure manually, which means connections will fail in restrictive NAT environments (corporate networks, mobile carriers) unless you bring your own TURN credentials. The Webpack warning about Parcel's dynamic require has been open for years and still appears in the README as a known unfixed issue, which signals stalled maintenance on the build tooling side. Last push was February 2026 but the issue tracker tends to accumulate WebRTC edge-case bugs that don't get addressed.

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 →