xybrid
Library New
Cross-platform on-device AI toolkit
- Downloads
- 82
- Dependents
- 0
- Stars
- 517
- Forks
- 58
- Contributors
- 15
- Commits
- 923
- Latest release
- 0.17.0 ·
About

Run LLMs, ASR, and TTS natively in apps and games.
Flutter · Swift · Kotlin · React Native · Unity · Rust
Private, offline, no cloud required.

Quick Start
Install and run a model in your language of choice.
Each badge links to its platform setup. See the full Installation Guide for all options.
Flutter
Install in pubspec.yaml:
dependencies:
xybrid_flutter: ^0.17.0
The plugin needs iOS 16.0, macOS 14.0 and Android 9 (API 28) or later; the Flutter guide shows how to raise your app's minimums.
Run a model:
final model = await Xybrid.model('kokoro-82m').load();
final result = await model.run(XybridEnvelope.text('Hello world'));
// result → 24kHz WAV audio
Kotlin
Install in build.gradle.kts:
dependencies {
implementation("ai.xybrid:xybrid-kotlin:0.17.0")
}
Releases 0.16.0 and later require Android 10 (API 29): set minSdk = 29 or higher in your app's defaultConfig, or the build fails at the manifest merge.
Downloading models from the registry needs network access, and the SDK declares no permissions: add <uses-permission android:name="android.permission.INTERNET" /> to your app's AndroidManifest.xml.
Run a model:
Read the full README
val model = Xybrid.model("kokoro-82m").load()
val result = model.runAsync(Envelope.text("Hello world"))
// result → 24kHz WAV audio
Swift
Install in Package.swift:
dependencies: [
.package(url: "https://github.com/xybrid-ai/xybrid.git", from: "0.17.0")
]
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 audio
React Native
Install in a React Native 0.76+ app with the New Architecture (or an Expo SDK 52+ development build):
npm install @xybrid/react-native@0.17.0
For bare React Native, run cd ios && pod install. For Expo, run npx expo prebuild; Expo Go cannot load the native module.
On Android, releases 0.16.0 and later require minSdkVersion 29 (Android 10). The React Native and Expo templates default to 24; the React Native guide shows how to raise it.
Run a model:
import { Envelope, GenerationConfigs, ModelLoader } from '@xybrid/react-native';
const model = await ModelLoader.fromRegistry('lfm2.5-230m').load();
const result = await model.run(Envelope.text('Name three rivers.'), {
generationConfig: GenerationConfigs.greedy({ maxTokens: 64 }),
});
console.log(result.text);
await model.release();
See the React Native guide for Expo setup, streaming, and cancellation. On the iOS Simulator, llama.cpp uses the CPU for reliable inference; iOS devices retain Metal acceleration.
Unity

Install via OpenUPM (recommended):
openupm add ai.xybrid.sdk
Or add https://package.openupm.com as a scoped registry for scope ai.xybrid.
Install manually — add the git subfolder as a UPM package:
https://github.com/xybrid-ai/xybrid.git?path=/bindings/unity
Native libraries download automatically on import. See the Unity SDK guide for details.
Run a model:
var model = XybridClient.LoadModel("kokoro-82m");
var result = model.Run(Envelope.Text("Hello world"));
// result → 24kHz WAV audio
Rust
Install in Cargo.toml:
[dependencies]
xybrid = "0.17.0"
Run a model:
let model = Xybrid::model("kokoro-82m").load()?;
let result = model.run(&Envelope::text("Hello world"))?;
// result → 24kHz WAV audio
CLI
Install:
# 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 | iex
Run a model:
xybrid run --model kokoro-82m --input-text "Hello world" -o output.wav
Multi-Model Inference Pipelines — MMP (Experimental)
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 → speech
CLI:
xybrid run --config voice-assistant.yaml --input-audio question.wav -o response.wav
Flutter:
final pipeline = Xybrid.pipeline(yaml: yamlString);
final result = await pipeline.run(XybridEnvelope.audio(bytes: audioBytes, sampleRate: 16000));
Kotlin:
val pipeline = XybridPipeline.fromYamlAsync(yamlString)
val result = pipeline.runAsync(inputEnvelope)
val transcript = result.stage("asr")?.text // every stage's output, not just the last
Swift:
let pipeline = try await XybridPipeline.fromYamlAsync(yamlString)
let result = try await pipeline.runAsync(envelope: inputEnvelope)
let transcript = result.stage("asr")?.text // every stage's output, not just the last
Unity (C#):
using var pipeline = Pipeline.FromYaml(yamlString);
PipelineResult result = pipeline.Run(inputEnvelope);
string transcript = result.Stage("asr")?.Text; // every stage's output, not just the last
Rust:
let pipeline = Xybrid::pipeline(&yaml_string).load()?;
pipeline.load_models()?;
let result = pipeline.run(&Envelope::audio(audio_bytes))?;
Supported Models
All models run entirely on-device. No cloud, no API keys required. Browse the
full catalogue at xybrid.ai/models, or run
xybrid models list.
Speech-to-Text
| Model | Params | Description |
|---|---|---|
| Whisper Tiny | 39M | Multilingual transcription on whisper.cpp — in every platform preset |
| Wav2Vec2 Base | 95M | English ASR with CTC decoding |
Text-to-Speech
| Model | Params | Description |
|---|---|---|
| Kokoro 82M | 82M | High-quality, 24 natural voices |
| KittenTTS Nano | 15M | Ultra-lightweight, 8 voices |
| NeuTTS Nano | 120M | Codec TTS with voice cloning |
LLM
| Model | Params | Description |
|---|---|---|
| LFM2.5 230M | 230M | Liquid AI's smallest hybrid conv+attention LLM — 9 languages, tool calling |
| LFM2.5 350M | 354M | Same architecture, more headroom — 9 languages, tool calling |
| LFM2.5 1.2B Instruct | 1.2B | Agentic tasks and data extraction |
| LFM2.5 1.2B Thinking | 1.2B | Reasoning model — chain-of-thought via reasoningContent (guide) |
| SmolLM2 360M | 360M | Best tiny LLM, excellent quality/size ratio |
| FunctionGemma 270M | 270M | Purpose-built for function calling |
| Gemma 3 1B | 1B | Google's mobile-optimized LLM, 32K context |
| Gemma 4 E2B | 5.1B | Google's compact multimodal LLM, 2.3B effective params |
| Gemma 4 E4B | 8B | Google's mid-range multimodal LLM, 4.5B effective params |
| Llama 3.2 1B | 1B | Meta's general purpose, 128K context |
| Qwen 3.5 0.8B | 800M | Reasoning (thinking mode), 201 languages |
| Qwen 3.5 2B | 2B | Larger Qwen 3.5 with extended reasoning |
| Bonsai 27B | 27B | PrismML's 1-bit multimodal LLM (text + vision), hybrid attention |
Vision-Language
| Model | Params | Description |
|---|---|---|
| LFM2-VL 450M | 450M | Liquid AI's compact VLM (SigLIP2 vision) |
| LFM2.5-VL 3B | 3B | Larger Liquid VLM for local inference |
Tool calling: see the Tool Calling guide.
Bring Your Own Model (Experimental)
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-ONNX
Skills 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/.
Features
| Capability | iOS | Android | macOS | Linux | Windows |
|---|---|---|---|---|---|
| Speech-to-Text | ✅ | ✅ | ✅ | ✅ | ✅ |
| Text-to-Speech | ✅ | ✅ | ✅ | ✅ | ✅ |
| LLM | ✅ | ✅ | ✅ | ✅ | ✅ |
| Vision Models | ✅ | ✅ | ✅ | ✅ | ✅ |
| Tool Calling | ✅ | ✅ | ✅ | ✅ | ✅ |
| Embeddings | 🔜 | 🔜 | 🔜 | 🔜 | 🔜 |
| Multi-Model Pipelines (MMP) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Model Download & Caching | ✅ | ✅ | ✅ | ✅ | ✅ |
| Hardware Acceleration | Metal, ANE on devices; CPU llama.cpp on Simulator | CPU | Metal, ANE | CPU, opt-in Vulkan | CPU |
SDK MMP support: Flutter ✅ · Rust ✅ · Kotlin ✅ · Swift ✅ · React Native ✅ · Unity ✅
Tool calling: local models call functions you define — your tools are plain data and the loop is your code. See the Tool Calling guide.
Embeddings: text embedding models (e.g. EmbeddingGemma 2, all-MiniLM) already run as bring-your-own models: see the custom models guide. Registry models are coming.
Why Xybrid?
- Private / offline — inference runs on-device and keeps working with no network after the first model download.
- One API, five platforms — iOS, Android, macOS, Linux, Windows.
- Many backends, one API — ONNX Runtime, llama.cpp (GGUF), whisper.cpp, Candle and CoreML.
- Multi-model pipelines — chain ASR → LLM → TTS in one call.
- Tool calling — local models call functions you define, on every SDK.
- Swap models without shipping an app — models resolve from the registry at runtime and cache on device.
- Cloud fallback — opt in per run (docs).
- Telemetry you control — opt-in behind an API key (docs).
- Hardware acceleration — Metal and the Apple Neural Engine on Apple, opt-in Vulkan on Linux; Android and Windows are CPU today (docs).
How it compares
| 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 | ✅ | ✅ | ✅ | ✅ |
Community
Contributing
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.
Star History
License
Apache License 2.0 — see LICENSE for details.
Compatibility
- Runs on
- Metal
What shows it
- Metal: xybrid-core dependency objc2-metal
- Native code
- Required
- Binds native code: llama, whisper, xybrid-llama-sys, xybrid-whisper-sys, xybrid-zzz-sys and 3 more
- Build uses a native toolchain: bindgen, cc, cmake
- Python bindings
- No Python binding crate found
- License
- Apache-2.0
Compare with similar projects
Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.
| Project | Downloads | Dependents | Stars | Latest release | Runs on (GPU) | Native code | License |
|---|---|---|---|---|---|---|---|
|
Cross-platform on-device AI toolkit |
82 downloads over 30 days | 0 | 517 | 0.17.0 | Metal | Binds native code: llama, whisper, xybrid-llama-sys, xybrid-whisper-sys, xybrid-zzz-sys and 3 more. Build uses a native toolchain: bindgen, cc, cmake | Apache-2.0 |
|
ort Featured
A safe Rust wrapper for ONNX Runtime 1.31 - Optimize and accelerate machine learning inference & training Also in Run and serve models. |
3,902,768 downloads over 30 days | 694 | 2,611 | 2.0.0-rc.15 | CUDA, WebGPU, ROCm | Binds native code: onnxruntime, ort-sys. Build uses a native toolchain: pkg-config (feature pkg-config) | Apache-2.0 OR MIT |
|
rten Featured
Tensor library for the RTen machine learning runtime Also in Run and serve models. |
496,924 downloads over 30 days | 29 | 360 | 0.27.0 | GPU support unknown | No native code found | Apache-2.0 OR MIT |
|
Lightweight Ollama-compatible inference server with native SafeTensors support. No Python dependencies, cross-platform WebGPU acceleration via Airframe. Also in Build LLM apps and agents. |
352 binary downloads per release | Not applicable | 6,014 | 2.6.6 | GPU support unknown | Binds native code: sys-info | Apache-2.0 |
|
Efficent platform for inference and serving local LLMs including an OpenAI compatible API server. Also in Build LLM apps and agents. |
138 binary downloads per release | Not applicable | 739 | Not measured | Not measured | MIT | |
|
NobodyWho is an inference engine that lets you run LLMs locally and efficiently on any device. Also in Build LLM apps and agents. |
34 binary downloads per release | Not applicable | 1,672 | Not measured | Not measured | EUPL-1.2 | |
|
Inference server for LLMs, speech and embeddings: OpenAI-compatible routes with streaming, plus speech synthesis (TTS) and transcription (ASR). Serves Llama, Mistral, Qwen, Mamba2, MLA+MoE and hybrid models from SafeTensors, AWQ, GPTQ and GGUF. Also in Build LLM apps and agents. |
8 binary downloads per release | Not applicable | 7 | 0.7.1 | CUDA, WebGPU | Binds native code: ring (feature distributed) | Apache-2.0 |
All projects in Build LLM apps and agentsAll projects in Run and serve models
Why NewIts first release on 19 May 2026 is under 180 days old.
The check tests the Featured gates once the first release passes this age limit.
What else the check found
- The last activity is on 9 Nov 2026, 0 days ago. The rules expect an update within 365 days. Dormancy rule
Exact rules: New. The check on applied thresholds version 9.
Every rule outcome, as the check records it
expected-interval: version 0.17.0 base 140, raised to the 365-day floor: E = 365 daysdormancy: last activity 2026-11-09, 0 days ago, E = 365: activenew: new: first release 2026-05-19 is under 180 days old
Crates9 crates
Measurements and sources
Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.
Sources6 sources
- Description: the GitHub repository description
- crates.io database dump, fetched
- RustSec advisory database, fetched
- GitHub repository, fetched
- crates.io package, fetched
- GitHub contributors, fetched
Adoption1 active dependents, 1 new dependents in 365 days1 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Active dependents | 0.5 | crates.io database dump | Yes | |
| New dependents (365 days) | 0.5 | crates.io database dump | Yes | |
| Peak active dependents | 0.5 | crates.io database dump | Yes | |
| Active dependents as a share of the peak | 1 | crates.io database dump | Yes | |
| Binary downloads per release | Not measured | Yes |
MaintenanceLatest human commit: on the check date3 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Latest human commit | 2026-11-09 | GitHub repository | Yes | |
| Latest release | 2026-11-06 | crates.io database dump | Yes | |
| First release | 2026-05-19 | crates.io database dump | Yes | |
| Latest version | 0.17.0 | crates.io database dump | Yes | |
| Days the oldest outside issue waits for a reply | 163 | GitHub repository | Yes | |
| Maintainer replies over 365 days | 2 | GitHub repository | Yes | |
| Repository archived | false | GitHub repository | Yes | |
| Repository gone | false | GitHub repository | Yes | |
| Release commit or manifest in the repo | true | crates.io package | Yes | |
| Published docs | true | crates.io database dump | Yes | |
| Latest release fails cargo check | Not measured | Yes | ||
| Build check date | Not measured | Yes | ||
| Build check toolchain | Not measured | Yes |
SecurityUnpatched vulnerabilities: none
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Unpatched vulnerabilities past the grace window | none | RustSec advisory database | Yes | |
| RustSec unmaintained advisory | none | RustSec advisory database | Yes | |
| Deprecation notice | none | crates.io database dump | Yes | |
| Deprecated requirement | none | crates.io database dump | Yes |
Distribution30 releases, 82 downloads over 30 days5 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Releases | 30 | crates.io database dump | Yes | |
| Downloads over 30 days | 82 | crates.io database dump | Yes | |
| Binary downloads over the last 3 releases | Not measured | Yes | ||
| Homebrew installs on request over 365 days | Not measured | Yes | ||
| Repology repository families | Not measured | Yes | ||
| Docker pull growth over 90 days | Not measured | Yes | ||
| Docker pulls at the growth baseline | Not measured | Yes | ||
| Every version a prerelease | false | crates.io database dump | Yes | |
| Every version 0.0.x | false | crates.io database dump | Yes | |
| Every version yanked | false | crates.io database dump | Yes | |
| Crate deleted from crates.io | false | crates.io database dump | Yes |
Repository517 stars, 58 forks, 15 contributors, 923 commits. Stars alone never qualify a project.
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| GitHub stars | 517 | GitHub repository | Yes — one part of the repository route | |
| GitHub forks | 58 | GitHub repository | Yes — one part of the repository route | |
| Contributors with a GitHub account | 15 | GitHub contributors | Yes — one part of the repository route | |
| Commits on the default branch | 923 | GitHub repository | No | |
| Repository's main crate left out of the entry | none | crates.io database dump | Yes |
Facts that never count
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| License | Apache-2.0 | crates.io database dump | No | |
| Runs on, from listed crates and their direct dependencies | Metal | crates.io database dump | No | |
| What shows each backend | Metal: xybrid-core dependency objc2-metal | crates.io database dump | No | |
| Native code, from listed crates and their dependencies | Binds native code: llama, whisper, xybrid-llama-sys, xybrid-whisper-sys, xybrid-zzz-sys and 3 more. Build uses a native toolchain: bindgen, cc, cmake | crates.io database dump | No | |
| Python bindings, from direct dependencies of listed crates | No Python binding crate found | crates.io database dump | No | |
| Crates that depend on a listed crate directly | 0 | crates.io database dump | No |
Corrections and review history
No correction applies to this entry.
Judgments
A judgment enters only through an approved issue and a merged pull request.
No judgment applies to this entry.