Client SDKs
Add AI voice and chat to any app. One package per platform — installs in seconds, handles everything internally.
What client SDKs do
Available Platforms
Web (React + Vanilla JS)
@converse/web
npm i @converse/sdkReact Native
@converse/react-native
npm i @converse/react-nativeiOS (Swift)
ConverseSDK
SwiftPMAndroid (Kotlin)
io.converse:converse-sdk
GradleFlutter (Dart)
converse_sdk
pub.devFeatures (All Platforms)
Voice Calls
Connect to AI agents with real-time voice. Mic, speaker, state — all managed.
Chat
WebSocket-based real-time messaging with streaming responses.
State Machine
voiceState (idle→connecting→active→ended) + agentState (listening→thinking→speaking)
UI Components
Pre-built visualizers and chat views — swap colors/sizes, same props.
Token Auth
Production-ready: tokenProvider function fetches short-lived tokens from YOUR backend.
Custom Branding
Zero Converse branding exposed to end users. Full customization.
Architecture
// Production flow:
┌──────────────┐ ┌───────────────┐ ┌─────────────────┐
│ Your App │ │ Your Backend │ │ Converse Cloud │
│ (Client SDK)│ │ (Server SDK) │ │ │
├──────────────┤ ├───────────────┤ ├─────────────────┤
│ tokenProvider│────▶│ tokens.create │────▶│ validates key │
│ │◀────│ return token │◀────│ returns token │
│ connect(token)│───────────────────────────▶│ WebRTC/WSS │
│ state events │◀─────────────────────────────│ voice + chat │
└──────────────┘ └───────────────┘ └─────────────────┘
Quick Example (React)
import { useConverseVoice, ConverseOrb } from '@converse/sdk/components';
function VoiceAgent() {
const { voiceState, agentState, connect, disconnect } = useConverseVoice({
agentId: 'agent_xxx',
tokenProvider: async () => {
const res = await fetch('/api/token', { method: 'POST', body: JSON.stringify({ agentId: 'agent_xxx' }) });
return res.json();
},
});
return (
<ConverseOrb
state={agentState}
size="lg"
color="#7c3aed"
onClick={voiceState === 'idle' ? connect : disconnect}
/>
);
}