Ship a character in an afternoon.
The SDK takes audio and gives you frames. Everything else — the brain, the voice, the UI — stays yours.
Install
Swift Package Manager, iOS 16 and up. Models are not in the package — they arrive over an authenticated channel on first launch, so your binary stays small and the weights are never sitting in a downloadable .ipa.
// Package.swift
.package(url: "https://github.com/yoob/yoob-ios.git", from: "1.0.0")
Render a character
Point a view at a character and feed it audio. The renderer handles geometry, compositing and the idle host; you never manage frames.
import Yoob
let avatar = try await YoobAvatar(character: "samantha", licence: licenceKey)
// Any PCM source: your TTS, our on-device TTS, or a live stream.
try await avatar.speak(pcm: audioBuffer)
// SwiftUI
YoobAvatarView(avatar)
.aspectRatio(9/16, contentMode: .fit)
Bring your own brain
The SDK has no opinion about your LLM. Stream tokens from anywhere, synthesise them however you like, and hand us the audio. We never see the conversation.
for try await chunk in myLLM.stream(prompt) {
let pcm = try await myTTS.synthesise(chunk)
try await avatar.speak(pcm: pcm) // barge-in safe
}
On-device voice
If you would rather not run a TTS at all, ours runs locally and costs nothing per word.
let voice = try YoobVoice(.warm)
try await avatar.say("Ready when you are.", voice: voice)
Listening states
A face that freezes while the user talks reads as broken. Tell the renderer what phase the conversation is in and it handles attention, blinks and acknowledgement nods locally.
avatar.setPhase(.listening) // user is speaking
avatar.setPhase(.thinking) // waiting on your LLM
avatar.setPhase(.speaking) // audio is playing
What the SDK sends over the network
| Call | When | Payload |
|---|---|---|
| Model fetch | First launch, and on model updates | Signed character bundle |
| Licence check | First launch | Licence key, app bundle id |
| Usage report | Periodically, on paid plans | Conversation seconds. No audio, no frames, no text. |
That is the complete list, and we would rather you read the third row twice than discover it later: on paid plans the SDK does report conversation seconds, because that is what we bill. It reports a duration and nothing else — no audio, video, transcript or rendered frame leaves the device at any point. Ask us for a packet capture from a live session and check it yourself — Security has the details.
Platforms
iOS 16+ on A15 and newer is what ships today. Android is in development and Web is on the roadmap; neither has a date we are willing to print. If your timeline depends on one of them, tell us — it moves our priorities.
Full API reference ships with the SDK. Last updated 26 July 2026.