PeerJS provides a complete, configurable, and easy-to-use peer-to-peer API built on top of WebRTC, supporting both data channels and media streams.
Here's an example application that uses both media and data connections: https://glitch.com/~peerjs-video. The example also uses its own PeerServer.
Include the library
with npm:
npm install peerjs
with yarn:
yarn add peerjs
// The usage -
import { Peer } from "peerjs";
Create a Peer
const peer = new Peer("pick-an-id");
// You can pick your own id or omit the id if you want to get a random one from the server.
Connect
const conn = peer.connect("another-peers-id");
conn.on("open", () => {
conn.send("hi!");
});
Receive
peer.on("connection", (conn) => {
conn.on("data", (data) => {
// Will print 'hi!'
console.log(data);
});
conn.on("open", () => {
conn.send("hello!");
});
});
Call
navigator.mediaDevices.getUserMedia(
{ video: true, audio: true },
(stream) => {
const call = peer.call("another-peers-id", stream);
call.on("stream", (remoteStream) => {
// Show stream in some <video> element.
});
},
(err) => {
console.error("Failed to get local stream", err);
},
);
Answer
peer.on("call", (call) => {
navigator.mediaDevices.getUserMedia(
{ video: true, audio: true },
(stream) => {
call.answer(stream); // Answer the call with an A/V stream.
call.on("stream", (remoteStream) => {
// Show stream in some <video> element.
});
},
(err) => {
console.error("Failed to get local stream", err);
},
);
});
npm test
This project is tested with BrowserStack.
Firefox |
Chrome |
Safari |
---|---|---|
last 4 versions | last 4 versions | 12.1+ |
- Safari supports only string data when sending via DataConnection. Use JSON serialization type if you want to communicate with Safari. By default, DataConnection uses Binary serialization type.
Q. I have a message Critical dependency: the request of a dependency is an expression
in browser's console
A. The message occurs when you use PeerJS with Webpack. It is not critical! It relates to Parcel parcel-bundler/parcel#2883 We'll resolve it when updated to Parcel V2.
This project exists thanks to all the people who contribute.
Thank you to all our backers! [Become a backer]
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
PeerJS is licensed under the MIT License.