> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.jambonz.org/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.jambonz.org/_mcp/server.

# WebRTC SDK

The jambonz WebRTC SDK enables browser and mobile applications to make and receive voice calls through a jambonz SBC using SIP over WebSocket.

It supports **Web (React)** and **React Native (iOS + Android)** with a unified API. [JsSIP](https://jssip.net/) is used internally for SIP signaling but is completely hidden from SDK consumers.

**Source code:** [github.com/jambonz/webrtc-sdk](https://github.com/jambonz/webrtc-sdk)

#### [Web (React) Guide](/sdks/webrtc-web)

Step-by-step guide for building a browser softphone with React

#### [React Native Guide](/sdks/webrtc-react-native)

Step-by-step guide for building an iOS + Android softphone

#### [API Reference](/sdks/webrtc-api)

Full API documentation — JambonzClient, JambonzCall, events, types

## Packages

| Package                            | Platform        | Install                                                            |
| ---------------------------------- | --------------- | ------------------------------------------------------------------ |
| `@jambonz/client-sdk-web`          | Browser / React | `npm install @jambonz/client-sdk-web`                              |
| `@jambonz/client-sdk-react-native` | iOS + Android   | `npm install @jambonz/client-sdk-react-native react-native-webrtc` |

Both packages share the same API. The only difference is the import path.

## What It Does

* **SIP registration** with a jambonz SBC over WebSocket
* **Outbound calls** to phone numbers, SIP users, queues, conferences, and applications
* **Incoming calls** with answer/decline
* **In-call controls** — mute, hold, DTMF, transfer (blind + attended)
* **Call quality monitoring** — jitter, packet loss, round-trip time
* **Audio device management** — enumerate and switch microphones/speakers
* **SIP messaging** — send and receive SIP MESSAGE
* **React hooks** — `useJambonzClient()` and `useCall()` for declarative React integration

## Call Types

The SDK supports five types of outbound calls, matching jambonz SBC routing:

| Method                        | Description                    | SIP Target                   |
| ----------------------------- | ------------------------------ | ---------------------------- |
| `client.call(number)`         | Call a phone number or SIP URI | `sip:number@domain`          |
| `client.callUser(username)`   | Call a registered SIP user     | `sip:username@domain`        |
| `client.callQueue(name)`      | Take a call from a queue       | `sip:queue-name@domain`      |
| `client.callConference(name)` | Join a conference room         | `sip:conference-name@domain` |
| `client.callApplication(sid)` | Call a jambonz application     | `sip:app-sid@domain`         |

## Quick Example

```js
import { createJambonzClient } from '@jambonz/client-sdk-web';

const client = createJambonzClient({
  server: 'wss://sbc.example.com:8443',
  username: 'user1',
  password: 'pass123',
});

await client.connect();

// Make a call
const call = client.call('+15551234567');
call.on('accepted', () => console.log('Connected!'));
call.on('ended', () => console.log('Call ended'));

// Receive incoming calls
client.on('incoming', (incomingCall) => {
  incomingCall.answer();
});
```