SEC 02 / PACKAGES
SDK & package map
There is no single “ElevenLabs SDK” — instead there are eight official packages, one per environment, each owning a different slice of the platform.
| Environment | Package | Primary role |
|---|---|---|
| Python | elevenlabs |
REST API, async client, Agents, Speech Engine |
| Node.js/server JavaScript | @elevenlabs/elevenlabs-js |
REST API and server-side Speech Engine |
| Browser JavaScript | @elevenlabs/client |
Agents, browser audio, real-time Scribe |
| React | @elevenlabs/react |
React bindings and hooks for Agents/Scribe |
| React Native | @elevenlabs/react-native |
Mobile Agents over WebRTC |
| Swift | ElevenLabs Swift SDK | Native Apple-platform Agents |
| Kotlin/Android | ElevenLabs Android SDK | Native Android Agents |
| Flutter | elevenlabs_agents |
Cross-platform mobile Agents |
The package distinction that bites people
The maintained Node server package is:
@elevenlabs/elevenlabs-js
The browser conversational package is:
@elevenlabs/client
They are not interchangeable. @elevenlabs/elevenlabs-js is the broad REST client meant to run on a trusted server; @elevenlabs/client owns the microphone, WebRTC, conversation, and client-side real-time behaviour of a browser tab. Reaching for the Node package inside a browser bundle — or expecting the browser package to cover general REST operations — is the mistake this distinction exists to prevent. The official Node repository explicitly directs browser and React applications to the client and React packages instead.
What the core API actually covers
The public API surface is much broader than text-to-speech:
| Media APIs | Resource and platform APIs |
|---|---|
| Text to Speech | Voices and voice management |
| Speech to Text | Pronunciation dictionaries |
| Text to Dialogue | Workspace resources |
| Voice Changer | Agents |
| Voice Design | Conversations |
| Sound Effects | Agent tools |
| Music generation | Knowledge bases |
| Audio Isolation | Agent tests |
| Dubbing | Phone numbers and SIP |
| Forced Alignment | Twilio, Exotel, and WhatsApp integrations |
| Audio Native | Batch calling |
| Speech Engine | MCP integrations |
| Analytics and environment variables |
That breadth means the core SDK reads closer to an automatically generated client for the full ElevenLabs platform than a focused “TTS helper.” Expect to find resources for phone numbers, knowledge bases, and batch calling alongside the audio endpoints you came for.
Typical core-client operations look like this:
client.text_to_speech.convert(...)
client.text_to_speech.stream(...)
client.voices.search(...)
client.voices.ivc.create(...)
Python exposes both ElevenLabs and AsyncElevenLabs entry points; the Node package uses a single ElevenLabsClient.
Generated-client implications
The core packages are largely generated from the API specification. That gives extensive typed coverage and rapid access to new endpoints, but it carries real consequences for how you build on top of them:
- Generated source is not a safe place for local customizations.
- Regeneration can rearrange types and method internals.
- Application code should wrap the SDK behind an internal adapter.
- Version upgrades should be tested rather than accepted automatically.
- Response parsing should tolerate new fields.
ElevenLabs’ compatibility policy treats adding response properties as a non-breaking change — clients are expected to ignore fields they don’t understand. Removing fields or changing their types incompatibly is treated as breaking. Write your response parsing accordingly, and don’t hand-edit generated files; the Node repository warns that direct edits to generated areas may be silently overwritten on the next regeneration.
Going deeper: exact versions at the research snapshot
At the time of the research snapshot (3 August 2026):
| Environment | Package | Version |
|---|---|---|
| Python | elevenlabs |
2.60.0 |
| Node.js/server JavaScript | @elevenlabs/elevenlabs-js |
2.60.0 |
| Browser JavaScript | @elevenlabs/client |
1.17.0 |
| React | @elevenlabs/react |
1.12.0 |
| React Native | @elevenlabs/react-native |
1.2.18 |
| Swift | ElevenLabs Swift SDK | 3.2.2 |
| Kotlin/Android | ElevenLabs Android SDK | 0.11.1 |
| Flutter | elevenlabs_agents |
0.6.1 |
The core Python and Node packages share a version line (both 2.60.0), while the browser, React, and mobile packages each have their own independent version line. Don’t assume that similarly dated packages expose matching interfaces — always check the changelog of the specific package you’re installing.