onsip
SIP.js
TypeScript

A simple, intuitive, and powerful JavaScript signaling library

Last updated Jul 9, 2026
2.1k
Stars
725
Forks
93
Issues
+1
Stars/day
Attention Score
87
Language breakdown
No language data available.
โ–ธ Files click to expand
README

SIP.js Logo

Build Status npm version

SIP Library for JavaScript

  • Create real-time peer-to-peer audio and video sessions via WebRTC
  • Utilize SIP in your web application via SIP over WebSocket
  • Send instant messages and view presence
  • Support early media, hold and transfers
  • Send DTMF RFC 2833 or SIP INFO
  • Share your screen or desktop
  • Written in TypeScript
  • Runs in all major web browsers
  • Compatible with standards compliant servers including Asterisk and FreeSWITCH

Demo

Want see it in action? The project website, sipjs.com, has a live demo.

Looking for code to get started with? This repository includes demonstrations which run in a web browser.

Usage

To place a SIP call, either utilize the SimpleUser class...

import { Web } from "sip.js";

// Helper function to get an HTML audio element function getAudioElement(id: string): HTMLAudioElement { const el = document.getElementById(id); if (!(el instanceof HTMLAudioElement)) { throw new Error(Element "${id}" not found or not an audio element.); } return el; }

// Options for SimpleUser const options: Web.SimpleUserOptions = { aor: "sip:alice@example.com", // caller media: { constraints: { audio: true, video: false }, // audio only call remote: { audio: getAudioElement("remoteAudio") } // play remote audio } };

// WebSocket server to connect with const server = "wss://sip.example.com";

// Construct a SimpleUser instance const simpleUser = new Web.SimpleUser(server, options);

// Connect to server and place call simpleUser.connect() .then(() => simpleUser.call("sip:bob@example.com")) .catch((error: Error) => { // Call failed });

Or, alternatively, use the full API framework...

import { Inviter, SessionState, UserAgent } from "sip.js";

// Create user agent instance (caller) const userAgent = new UserAgent({ uri: UserAgent.makeURI("sip:alice@example.com"), transportOptions: { server: "wss://sip.example.com" }, });

// Connect the user agent userAgent.start().then(() => {

// Set target destination (callee) const target = UserAgent.makeURI("sip:bob@example.com"); if (!target) { throw new Error("Failed to create target URI."); }

// Create a user agent client to establish a session const inviter = new Inviter(userAgent, target, { sessionDescriptionHandlerOptions: { constraints: { audio: true, video: false } } });

// Handle outgoing session state changes inviter.stateChange.addListener((newState) => { switch (newState) { case SessionState.Establishing: // Session is establishing break; case SessionState.Established: // Session has been established break; case SessionState.Terminated: // Session has terminated break; default: break; } });

// Send initial INVITE request inviter.invite() .then(() => { // INVITE sent }) .catch((error: Error) => { // INVITE did not send });

});

Installation

Node module

npm install sip.js

UMD bundle

Building, Development and Testing

Clone this repository, then...

npm install
npm run build-and-test

For more info please see the Documentation.

Support

  • For migration guides and API reference please see the Documentation.
  • For bug reports and feature requests please open a GitHub Issue.
  • For questions or usage problems please use the Google Group.
  • For more information see the project website at SIPjs.com.

ยฉ 2026 GitRepoTrend ยท onsip/SIP.js ยท Updated daily from GitHub