elevenlabs_flutter_sdk
Flutter plugin for ElevenLabs conversational agents on Android and iOS.
This package provides a unified Dart API over native ElevenLabs SDKs, including:
- session start/end
- voice controls (mute/unmute)
- text messaging and contextual updates
- feedback signaling
- native events as Dart streams
Features
- Public and private session startup:
- public agent via
agentId - private agent via backend-issued
conversationToken
- public agent via
- Event stream support:
- connection, status, mode, messages, VAD, audio alignment, tool calls
- Convenience API in Dart:
startPublicSession(...),startPrivateSession(...)
- Works on:
- Android
- iOS
Installation
Add the package:
dependencies:
elevenlabs_flutter_sdk: ^0.0.1
Then run:
flutter pub get
Platform Setup
Android
Add microphone permission to your Android app manifest:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Request runtime microphone permission in your Flutter app before startSession(...).
iOS
- Set deployment target to
iOS 13.0+. - Add microphone usage description to
ios/Runner/Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>This app needs microphone access for voice conversations.</string>
- Add the ElevenLabs Swift SDK package to your app target in Xcode:
- URL:
https://github.com/elevenlabs/elevenlabs-swift-sdk.git - Version:
2.0.0or newer
- URL:
Reference docs: ElevenLabs Swift SDK
Quick Start
import 'package:elevenlabs_flutter_sdk/elevenlabs_flutter_sdk.dart';
final sdk = ElevenlabsFlutterSdk();
// Public agent session
await sdk.startPublicSession(
agentId: 'your_public_agent_id',
userId: 'user_123',
);
// Send text message
await sdk.sendUserMessage('Hello!');
// End session
await sdk.endSession();
Private Agent Session
Never ship ElevenLabs API keys in the app. Generate a temporary conversation token on your backend, then use:
await sdk.startPrivateSession(
conversationToken: tokenFromBackend,
userId: 'user_123',
);
API
Session
startSession({String? agentId, String? conversationToken, String? userId})startPublicSession({required String agentId, String? userId})startPrivateSession({required String conversationToken, String? userId})endSession()
Messaging and Context
sendUserMessage(String message)sendContextualUpdate(String context)sendUserActivity()
Feedback
sendFeedback(bool isPositive)
Audio and Status
toggleMute()setMicMuted(bool muted)isMuted()getStatus()getConversationId()
Events
Raw broadcast stream:
events(Stream<Map<String, dynamic>>)
Convenience streams:
onConnectonMessageonModeChangeonStatusChangeonCanSendFeedbackChangeonUnhandledClientToolCallonVadScoreonAudioAlignment
Example listener:
final sub = sdk.onStatusChange.listen((status) {
debugPrint('Status: $status');
});
Permissions Guidance
This package does not manage UI permission prompts for you. Use a package like permission_handler in your app:
- request microphone before starting a session
- if permanently denied, prompt users to open app settings
Security
- For private agents, use
conversationTokenfrom your backend. - Do not store ElevenLabs API keys in client applications.
Known Notes
- iOS Local Network permission warnings in debug builds can come from Flutter VM service publishing and are usually unrelated to ElevenLabs session auth.
- Audio session behavior can vary by simulator/device and OS version.