Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Create a swarm of p2p connections using webrtc and a signalhub

Subscribe to updates I use webrtc-swarm

Statistics on webrtc-swarm

Number of watchers on Github 216
Number of open issues 8
Average time to close an issue 24 days
Main language JavaScript
Average time to merge a PR 4 days
Open pull requests 5+
Closed pull requests 1+
Last commit almost 2 years ago
Repo Created over 4 years ago
Repo Last Updated over 1 year ago
Size 34 KB
Organization / Authormafintosh
Page Updated
Do you use webrtc-swarm? Leave a review!
View open issues (8)
View webrtc-swarm activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating webrtc-swarm for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


Create a swarm of p2p connections using webrtc and a signalhub.

npm install webrtc-swarm


var swarm = require('webrtc-swarm')
var signalhub = require('signalhub')

var hub = signalhub('swarm-example', [''])

var sw = swarm(hub, {
  wrtc: require('wrtc') // don't need this if used in the browser

sw.on('peer', function (peer, id) {
  console.log('connected to a new peer:', id)
  console.log('total peers:', sw.peers.length)

sw.on('disconnect', function (peer, id) {
  console.log('disconnected from a peer:', id)
  console.log('total peers:', sw.peers.length)


var swarm = require('webrtc-swarm')

var sw = swarm(hub, opts)

Creates a new webrtc swarm using signalhub hub for discovery and connection brokering.

Valid keys for opts include:

  • wrtc - (optional) a reference to the wrtc library, if using Node.
  • uuid - (optional) a unique identifier for this peer. One is generated for you if not supplied.
  • maxPeers - (optional) the maximum number of peers you wish to connect to. Defaults to unlimited.
  • wrap - (optional) a function that can modify the WebRTC signaling data before it gets send out. It's called with wrap(outgoingSignalingData, destinationSignalhubChannel) and must return the wrapped signaling data.
  • unwrap - (optional) a function that can modify the WebRTC signaling data before it gets processed. It's called with unwrap(incomingData, sourceSignalhubChannel) and must return the raw signaling data.

Additional optional keys can be passed through to the underlying simple-peer instances:

  • channelConfig - custom webrtc data channel configuration (used by createDataChannel)
  • config - custom webrtc configuration (used by RTCPeerConnection constructor)
  • stream - if video/voice is desired, pass stream returned from getUserMedia


Disconnect from swarm

sw.on('peer|connect', peer, id)

peer and connect are interchangeable. Fires when a connection has been established to a new peer peer, with unique id id.

sw.on('disconnect', peer, id)

Fires when an existing peer connection is lost.

peer is a simple-peer instance.


Fires when all peer and signalhub connections are closed


A list of peers that sw is currently connected to.


Detect native WebRTC support in the javascript environment.

var swarm = require('webrtc-swarm')

if (swarm.WEBRTC_SUPPORT) {
  // webrtc support!
} else {
  // fallback



webrtc-swarm open issues Ask a question     (View All Issues)
  • about 3 years two signalhubs not working?
  • about 3 years tests hang and don't complete
webrtc-swarm open pull requests (View All Pulls)
  • 2.4.1
  • updated README with workaround for not being able to open more than 2…
  • Fixed test
  • Deferred emission of stream events received before emitting connect event
  • update cuid
webrtc-swarm list of languages used
Other projects in JavaScript