Create a swarm of p2p connections using webrtc and a signalhub
Clone or download
perguth Merge pull request #30 from perguth/fix-test
use local signalhub; rename variables to match usage in libs
Latest commit b1dc75f Nov 1, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore first commit Apr 26, 2015
LICENSE first commit Apr 26, 2015 small rephrasing Oct 6, 2017 add collabs Nov 2, 2015
index.js restore `unwrap()` usage, fixes #27 Sep 22, 2017
package.json 2.9.0 Oct 14, 2017
test.js make simpler Nov 1, 2017


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