Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
January 20, 2016 07:47
January 2, 2016 17:01
December 16, 2015 20:32
January 2, 2016 17:01
December 2, 2015 21:12
December 2, 2015 21:12
December 15, 2015 10:24
December 2, 2015 21:12
December 3, 2015 19:28
December 13, 2015 12:48
October 31, 2016 10:32

rtc-everywhere NPM version Downloads Build Status

What is this?

Sick of the incompatible mess of vendor prefixes, adapters, plugins, extensions, and native modules? rtc-everywhere aims to provide a spec-compliant WebRTC implementation in as many environments as possible.

Supported Environments

๐Ÿ’ป Desktop

  • Chrome
  • Firefox
  • MS Edge [Partial]
    • No data channels
  • Safari 7+
    • Requires Temasys Plugin
  • Internet Explorer 9+ [In Progress]
    • Requires Temasys Plugin

๐Ÿ“ฑ Mobile

  • Android 5+
  • Cordova iOS
    • Requires install of cordova-iosrtc
  • Cordova Android
    • Requires install of cordova-crosswalk
  • react-native iOS/Android [In Progress]
    • Requires install of react-native-webrtc


  • Node.js 0.10+
    • Requires install of wrtc
    • Only works on x64 Linux, Mac, and Windows
    • MediaStream APIs are not supported at this time
    • See wrtc for more info.

Getting Started

npm install rtc-everywhere --save
var rtc = require('rtc-everywhere')();

// Available:
// rtc.RTCPeerConnection
// rtc.RTCIceCandidate
// rtc.RTCSessionDescription
// rtc.getUserMedia
// rtc.attachStream(stream, videoElement)

๐Ÿ”ฎ Want a more detailed example that uses these functions? Check out the loopback stream example!



Exactly the same as the specification. See the Specification Documentation!


Exactly the same as the specification. See the Specification Documentation!


Exactly the same as the specification. See the Specification Documentation!

getUserMedia(constraints, cb)

Similar to the specification, but slightly adjusted to have an easier API.

  • constraints is optional (makes things easier)

    • Defaults to {video: true, audio: true}
  • cb is a node-style error first callback

// these are the same thing
rtc.getUserMedia(function(err, stream){});
rtc.getUserMedia({video: true, audio: true}, function(err, stream){});

attachStream(stream, element)

  • Attaches a stream to a given video element
  • Returns the element the video was attached to
  • In IE and Safari, the video element will be replaced by an object element
    • Elements will not be replaced or modified unless they exist on the DOM
    • Regardless of replacement, the new object element will be returned

Related Libraries


Cross-everything WebRTC mega-project







No packages published