Run LLMs, ASR, and TTS natively in apps and games.
Flutter · Swift · Kotlin · Unity · Rust
Private, offline, no cloud required.
| Goal | Path |
|---|---|
| Fastest demo (2 min) | Install CLI → |
| Build a mobile or desktop app | Flutter SDK → |
| Try the browser preview | Web SDK → |
| Add AI NPCs to your game | Unity SDK → and try the 3D tavern demo |
| Android native | Kotlin SDK → |
| Rust / embedded | Core crate → |
Native SDKs are powered by the Rust runtime and expose its native model
capabilities. The Browser/Web preview is a separate browser-native LiteRT.js
adapter that consumes model_metadata.json and currently supports only LiteRT
raw typed-tensor I/O.
| SDK | Platforms | Install | Status | Sample |
|---|---|---|---|---|
| Flutter | iOS, Android, macOS, Linux, Windows | pub.dev | Available | README |
| Unity | macOS, Windows, Linux, iOS, Android | See below | Available | Unity 3D AI tavern |
| Swift | iOS, macOS | Swift Package Manager | Coming Soon | README |
| Kotlin | Android | Maven Central | Available | README |
| Browser/Web preview | Modern browsers | @xybrid/web |
Preview | In-browser a+b demo |
| CLI | macOS, Linux, Windows | curl -sSL .../install.sh | sh |
Available | — |
| Rust | All | crates.io | Available | — |
The native SDKs share the Rust core; the Browser/Web preview does not and has the limited LiteRT tensor surface described above.
Install and run a model in your language of choice. Each section includes the install snippet and a minimal example.
See the full Installation Guide for all options.
Install in pubspec.yaml:
dependencies:
xybrid_flutter: ^0.4.1Run a model:
final model = await Xybrid.model('kokoro-82m').load();
final result = await model.run(XybridEnvelope.text('Hello world'));
// result → 24kHz WAV audioInstall in build.gradle.kts:
dependencies {
implementation("ai.xybrid:xybrid-kotlin:0.4.1")
}Run a model:
val model = Xybrid.model("kokoro-82m").load()
val result = model.runAsync(Envelope.text("Hello world"))
// result → 24kHz WAV audioInstall in Package.swift:
dependencies: [
.package(url: "https://github.com/xybrid-ai/xybrid.git", from: "0.4.1")
]Run a model:
let model = try await Xybrid.model("kokoro-82m").load()
let result = try await model.runAsync(envelope: Envelope.text("Hello world"))
// result → 24kHz WAV audioInstall via OpenUPM —
openupm add ai.xybrid.sdk, or add the https://package.openupm.com scoped
registry for scope ai.xybrid — or straight from the git subfolder:
https://github.com/xybrid-ai/xybrid.git?path=/bindings/unityNative libraries download automatically on import. See the Unity SDK README for details.
Run a model:
var model = XybridClient.LoadModel("kokoro-82m");
var result = model.Run(Envelope.Text("Hello world"));
// result → 24kHz WAV audioInstall in Cargo.toml:
[dependencies]
xybrid = "0.4.1"Run a model:
let model = Xybrid::model("kokoro-82m").load()?;
let result = model.run(&Envelope::text("Hello world"))?;
// result → 24kHz WAV audioInstall:
# macOS / Linux
curl -sSL https://raw.githubusercontent.com/xybrid-ai/xybrid/master/install.sh | sh# Windows (PowerShell)
irm https://raw.githubusercontent.com/xybrid-ai/xybrid/master/install.ps1 | iexRun a model:
xybrid run --model kokoro-82m --input-text "Hello world" -o output.wavFor platform-specific setup, see each SDK's README: Flutter · Unity · Swift · Kotlin · Rust.
Chain models together into a single multi-model inference pipeline (MMP) — build a voice assistant in 3 lines of YAML:
# voice-assistant.yaml
name: voice-assistant
stages:
- model: whisper-tiny-ggml # Speech → text
- model: qwen2.5-0.5b # Process with LLM
- model: kokoro-82m # Text → speechCLI:
xybrid run --config voice-assistant.yaml --input-audio question.wav -o response.wavFlutter:
final pipeline = Xybrid.pipeline(yaml: yamlString);
final result = await pipeline.run(XybridEnvelope.audio(bytes: audioBytes, sampleRate: 16000));Kotlin:
// Multi-model pipeline (MMP) support coming soon — use single model loading for nowSwift:
// Multi-model pipeline (MMP) support coming soon — use single model loading for nowUnity (C#):
// Multi-model pipeline (MMP) support coming soon — use single model loading for nowRust:
let pipeline = Xybrid::pipeline(&yaml_string).load()?;
pipeline.load_models()?;
let result = pipeline.run(&Envelope::audio(audio_bytes))?;All models run entirely on-device. No cloud, no API keys required. Browse the full registry with xybrid models list.
| Model | Type | Params | Why start here |
|---|---|---|---|
| SmolLM2 360M | LLM | 360M | Best quality-to-size ratio for any device |
| Kokoro 82M | TTS | 82M | High-quality speech, 24 voices, fast |
| Whisper Tiny | ASR | 39M | Accurate multilingual transcription |
| Model | Params | Format | Description |
|---|---|---|---|
Whisper Tiny (whisper-tiny-ggml) |
39M | GGML Q5_1 | Multilingual transcription on whisper.cpp — in every platform preset |
Whisper Tiny (whisper-tiny) |
39M | SafeTensors | Same weights on the Candle runtime — needs a build with the candle feature |
| Wav2Vec2 Base | 95M | ONNX | English ASR with CTC decoding |
| Model | Params | Format | Description |
|---|---|---|---|
| Kokoro 82M | 82M | ONNX | High-quality, 24 natural voices |
| KittenTTS Nano | 15M | ONNX | Ultra-lightweight, 8 voices |
| Model | Params | Format | Description |
|---|---|---|---|
| Gemma 3 1B | 1B | GGUF Q4_K_M | Google's mobile-optimized LLM |
| LFM2.5 230M | 230M | GGUF Q4_K_M | Liquid AI's smallest hybrid conv+attention LLM for edge devices |
| LFM2.5 350M | 354M | GGUF Q4_K_M | Liquid AI's hybrid conv+attention, 9 languages, tool calling |
| LFM2.5 1.2B Thinking | 1.2B | GGUF Q4_K_M | Liquid AI reasoning model — chain-of-thought via reasoningContent (guide) |
| Llama 3.2 1B | 1B | GGUF Q4_K_M | Meta's general purpose, 128K context |
| Qwen 2.5 0.5B | 500M | GGUF Q4_K_M | Compact on-device chat |
| Qwen 3.5 0.8B | 800M | GGUF Q4_K_M | Latest Qwen with reasoning (thinking mode) |
| Qwen 3.5 2B | 2B | GGUF Q4_K_M | Larger Qwen 3.5 with extended reasoning |
| SmolLM2 360M | 360M | GGUF Q4_K_M | Best tiny LLM, excellent quality/size ratio |
| Model | Params | Format | Description |
|---|---|---|---|
| LFM2-VL 450M | 450M | GGUF Q4_0 + mmproj | Liquid AI's compact VLM (SigLIP2 vision) — image + text in, runs via llama.cpp mtmd |
| Model | Type | Params | Priority | Status |
|---|---|---|---|---|
| Phi-4 Mini | LLM | 3.8B | P2 | Spec Ready (first multi-quant: Q4, Q8, FP16) |
| Qwen3 0.6B | LLM | 600M | P2 | Planned |
| Trinity Nano | LLM (MoE) | 6B (1B active) | P2 | Planned |
| LFM2-VL 700M | Vision+LLM | 700M | P2 | Planned |
| Nomic Embed Text v1.5 | Embeddings | 137M | P1 | Blocked (needs Tokenize/MeanPool steps) |
| Whisper Tiny CoreML | ASR | 39M | P2 | Planned |
| Qwen3-TTS 0.6B | TTS | 600M | P2 | Blocked (needs custom SafeTensors runtime) |
| Chatterbox Turbo | TTS | 350M | P3 | Blocked (needs ModelGraph template) |
Note: BYM support is experimental. The
model_metadata.jsonschema is stable, but the AI-assisted tooling (/xybrid-init) is under active development and may not handle all model types yet.
Xybrid works with any ONNX, GGUF, or SafeTensors model. You just need a model_metadata.json that tells xybrid how to run it.
With an AI assistant (Claude Code, Codex, etc.):
# Install xybrid skills into your project
curl -sSL https://raw.githubusercontent.com/xybrid-ai/xybrid/master/tools/scripts/install-skills.sh | sh
# Generate model_metadata.json from a HuggingFace model
claude /xybrid-init hexgrad/Kokoro-82M-v1.0-ONNXSkills are agent-agnostic and live in agents/skills/. The installer symlinks them for Claude Code (.claude/skills) and Codex (.codex/skills).
Manually — create model_metadata.json in your model directory:
{
"model_id": "my-model",
"version": "1.0",
"execution_template": { "type": "Onnx", "model_file": "model.onnx" },
"preprocessing": [],
"postprocessing": [],
"files": ["model.onnx"],
"metadata": { "task": "text-generation" }
}See the model metadata docs for the full schema, or look at existing examples in integration-tests/fixtures/models/.
| Capability | iOS | Android | macOS | Linux | Windows |
|---|---|---|---|---|---|
| Speech-to-Text | ✅ | ✅ | ✅ | ✅ | ✅ |
| Text-to-Speech | ✅ | ✅ | ✅ | ✅ | ✅ |
| Language Models | ✅ | ✅ | ✅ | ✅ | ✅ |
| Vision Models | ✅ | ✅ | ✅ | ✅ | ✅ |
| Tool Calling | 🔜 | 🔜 | ✅ | ✅ | ✅ |
| Embeddings | 🔜 | 🔜 | 🔜 | 🔜 | 🔜 |
| Multi-Model Pipelines (MMP) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Model Download & Caching | ✅ | ✅ | ✅ | ✅ | ✅ |
| Hardware Acceleration | Metal, ANE | CPU | Metal, ANE | CUDA, Vulkan | CUDA |
SDK MMP support: Flutter ✅ · Rust ✅ · Kotlin 🔜 · Swift 🔜 · Unity 🔜
Tool calling: local models call functions you define — your tools are
plain data (Tool::function(...)) and the loop is your code, so any tooling
plugs in. On-device via llama.cpp (LFM2 and gemma-4 protocols); Rust SDK and
CLI today (xybrid repl ships built-in web_search + your own via
--tools-file), Swift/Kotlin/Flutter bindings next. See the
Tool Calling guide.
- Privacy first — All inference runs on-device. Your data never leaves the device. The SDK attaches a small fleet-attribution header on registry metadata calls — see registry telemetry.
- Offline capable — No internet required after initial model download.
- Cross-platform — One API across iOS, Android, macOS, Linux, and Windows.
- Multi-model pipelines (MMP) — Chain models together (ASR → LLM → TTS) in a single call.
- Hardware acceleration — Apple Neural Engine, Metal, CUDA, plus opt-in Vulkan for Linux llama.cpp builds.
| Xybrid | Ollama | llama.cpp | ONNX Runtime | |
|---|---|---|---|---|
| Mobile (iOS/Android) | ✅ | ❌ | ❌ | ✅ |
| Game engine (Unity) | ✅ | ❌ | ❌ | ❌ |
| Multi-model pipelines (MMP) | ✅ | ❌ | ❌ | ❌ |
| ASR + TTS + LLM in one SDK | ✅ | ❌ | ❌ | ❌ |
| Runs in-process (no server) | ✅ | ❌ | ✅ | ✅ |
| No cloud required | ✅ | ✅ | ✅ | ✅ |
We welcome contributions! See CONTRIBUTING.md for guidelines on setting up your development environment, submitting pull requests, and adding new models.
New here? Browse the good first issue label for small, self-contained tasks. Tasks are also grouped by area: area: core, area: sdk, area: examples, area: bindings, area: tests. Medium-difficulty tasks live under help wanted.
Apache License 2.0 — see LICENSE for details.



