Skip to content
This repository

JsSIP, the JavaScript SIP library

branch: master

Fix #176. Update to the latest IceServer definition


dictionary RTCIceServer {
    DOMString  url;
    DOMString? credential;


dictionary RTCIceServer {
    (DOMString or sequence<DOMString>) urls;
    DOMString?                         username = null;
    DOMString?                         credential;

Note: Current Firefox Nightly "28.0a1 (2013-11-18)" Does not support multiple 'urls'
latest commit 62e832320c
José Luis Millán jmillan authored
Octocat-spinner-32 src Fix #176. Update to the latest IceServer definition November 19, 2013
Octocat-spinner-32 test Added 'registrar_server' UA configuration parameter. See the doc at h… March 01, 2013
Octocat-spinner-32 .gitignore Ignore dist/ and node_modules/ in .gitignore. November 12, 2012
Octocat-spinner-32 .travis.yml Remove Node 0.6 (old stable version) from Travis. February 27, 2013
Octocat-spinner-32 AUTHORS to markdown. February 15, 2013
Octocat-spinner-32 Update BUILDING, CHANGELOG and README files March 18, 2013
Octocat-spinner-32 Update BUILDING, CHANGELOG and README files March 18, 2013
Octocat-spinner-32 Gruntfile.js Fix typo in Gruntfile.js September 11, 2013
Octocat-spinner-32 LICENSE Add URI and NameAddrHeader classes January 31, 2013
Octocat-spinner-32 Add repro (reSIProcate) to the README server list September 03, 2013
Octocat-spinner-32 Add Daniel Pocock to the file September 17, 2013
Octocat-spinner-32 package.json Fix #107. Stop spamming provisional responses July 10, 2013

Build Status


  • SIP over WebSocket (use real SIP in your web apps)
  • Audio/video calls (WebRTC), instant messaging and presence
  • Lightweight! (~140KB)
  • Easy to use and powerful user API
  • Works with OverSIP, Kamailio, Asterisk and repro (reSIProcate) servers (more info)
  • Written by the authors of draft-ietf-sipcore-sip-websocket and OverSIP

Getting Started

The following simple JavaScript code creates a JsSIP User Agent instance and makes a SIP call:

// Create our JsSIP instance and run it:

var configuration = {
  'ws_servers': 'ws://',
  'uri': '',
  'password': 'superpassword'

var coolPhone = new JsSIP.UA(configuration);


// Make an audio/video call:

// HTML5 <video> elements in which local and remote video will be shown
var selfView =   document.getElementById('my-video');
var remoteView =  document.getElementById('peer-video');

// Register callbacks to desired call events
var eventHandlers = {
  'progress': function(e){
    console.log('call is in progress');
  'failed': function(e){
    console.log('call failed with cause: '+;
  'ended': function(e){
    console.log('call ended with cause: '+;
  'started': function(e){
    var rtcSession = e.sender;

    console.log('call started');

    // Attach local stream to selfView
    if (rtcSession.getLocalStreams().length > 0) {
      selfView.src = window.URL.createObjectURL(rtcSession.getLocalStreams()[0]);

    // Attach remote stream to remoteView
    if (rtcSession.getRemoteStreams().length > 0) {
      remoteView.src = window.URL.createObjectURL(rtcSession.getRemoteStreams()[0]);

var options = {
  'eventHandlers': eventHandlers,
  'mediaConstraints': {'audio': true, 'video': true}
};'', options);

Want to see more? Check the full Getting Started section in the project website.

Online Demo

Check our Tryit JsSIP online demo:

Website and Documentation



José Luis Millán

Iñaki Baz Castillo

Saúl Ibarra Corretgé


JsSIP is released under the MIT license.

Something went wrong with that request. Please try again.