---
sidebar_position: 1
title: SDKs Overview
description: Firetell SDKs — client libraries for integrating with the Firetell platform.
---

# SDKs Overview

Firetell provides official client libraries and SDKs to simplify integration, handle WebRTC calling, and manage WebSocket communication within your applications.

Using our SDKs ensures that best practices—such as automatic reconnects, authentication timeouts, and media track management—are handled for you out of the box.

---

## Available SDKs

### JavaScript / TypeScript SDK

The `@firetell/firetell-client-sdk` library is compatible with browser environments (using ES Modules or loaded via a CDN script tag) for building WebRTC-based calling applications, and Node.js environments (using CommonJS) for receiving real-time events via WebSocket connection. It enables you to integrate real-time voice, video, and event features directly into your applications.

- **Package:** [`@firetell/firetell-client-sdk`](https://www.npmjs.com/package/@firetell/firetell-client-sdk)
- **Status:** Active / Stable
- **Interactive Live Demo:** [https://developers.firetell.com/firetell-client-sdk/example/](https://developers.firetell.com/firetell-client-sdk/example/)
- **Guides:** [Installation & Setup](/docs/sdks/javascript/installation) • [Client Authentication](/docs/sdks/javascript/authentication) • [Quickstart Guide](/docs/sdks/javascript/quickstart) • [API Reference](/docs/sdks/javascript/api-reference)

---

## Handling Concurrent Incoming Calls

When multiple incoming calls arrive simultaneously or an incoming call arrives while an agent is currently on an active call, Firetell supports two standard frontend integration patterns:

### Pattern A: Call Waiting & Hold (Multi-Call Management)

Allow the agent to receive call waiting notifications, put the current call on hold, and answer the new incoming call:

```typescript
let activeCall: Call | null = null;

client.events.on("call.offer", async (incomingCall: Call) => {
  if (activeCall && activeCall.active) {
    // 1. Show Call Waiting notification on UI
    console.log(`Call Waiting from ${incomingCall.from} (${incomingCall.from_name})`);

    // 2. When Agent clicks "Hold & Answer":
    await activeCall.hold();
    await incomingCall.accept();
    activeCall = incomingCall;
  } else {
    // Single call flow
    activeCall = incomingCall;
  }
});
```

### Pattern B: Auto-Reject / Busy (Single-Call Policy)

If your call center policy restricts agents to one call at a time:

```typescript
client.events.on("call.offer", async (incomingCall: Call) => {
  if (client.activeCalls.size > 1) {
    // Auto-reject 2nd call with Busy status (SIP 486 Busy)
    // The backend Call Flow will immediately execute the fallback branch (Voicemail/Reroute)
    await incomingCall.reject();
  }
});
```

---

## Planned SDKs

We are actively developing SDKs for additional languages and mobile frameworks to help you build native apps:

| Platform / Language | Status     | Package Name            | Target Environment |
| :------------------ | :--------- | :---------------------- | :----------------- |
| **Flutter**         | 🔜 Planned | `firetell_flutter`      | iOS & Android      |
| **React Native**    | 🔜 Planned | `react-native-firetell` | iOS & Android      |

If you need an SDK for another language, please reach out to us at [developers@firetell.com](mailto:developers@firetell.com).
