node package manager
It’s your turn. Help us improve JavaScript. Take the 2017 JavaScript Ecosystem Survey »



Build Status npm-version bower-version

Light-weight Ponyfill/Polyfill for navigator.mediaDevices.getUserMedia (the newer newer Promise-based API). Wraps the older callback-based navigator.getUserMedia when necessary.

Behaves as a ponyfill (doesn't touch globals) when used via browserify/webpack/etc. or as a polyfill (sets globals) when included as a standalone library.

Less than 0.5kb after minification and gzipping (about 5% of the size of the other getUserMedia shim).

Note: this will only work in web browsers, and only fairly current ones at that.

Additionally, this library does not attempt to reformat constraints for cross-browser support, so if you need advanced audio/video constraints, the other library may be a better choice.



npm install --save get-user-media-promise


bower install --save get-user-media-promise


Download the latest release from GitHub.


  • With a bundler such as Require.js, Browserify, or WebPack: require() the module and it returns a getUserMedia() method that will always return a Promise or Promise-like object.
  • As a standalone library: when neither define() nor module are defined, the module will go into polyfill mode, setting navigator.mediaDevices.getUserMedia() if that method is not already defined or doing nothing if it is.


var getUserMedia = require('get-user-media-promise'); // or navigator.mediaDevices.getUserMedia when used standalone 
getUserMedia({audio: true, video: true})
  .then(function(mediaStream) {
  .catch(function(error) {

Check browser support ahead of time via the isSupported property: