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

From the project README ·

English · 简体中文 · 日本語

Xybrid Logo

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

Desktop demo     Android demo

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

Game demo

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
ModelParamsDescription
Whisper Tiny39MMultilingual transcription on whisper.cpp — in every platform preset
Wav2Vec2 Base95MEnglish ASR with CTC decoding
Text-to-Speech
ModelParamsDescription
Kokoro 82M82MHigh-quality, 24 natural voices
KittenTTS Nano15MUltra-lightweight, 8 voices
NeuTTS Nano120MCodec TTS with voice cloning
LLM
ModelParamsDescription
LFM2.5 230M230MLiquid AI's smallest hybrid conv+attention LLM — 9 languages, tool calling
LFM2.5 350M354MSame architecture, more headroom — 9 languages, tool calling
LFM2.5 1.2B Instruct1.2BAgentic tasks and data extraction
LFM2.5 1.2B Thinking1.2BReasoning model — chain-of-thought via reasoningContent (guide)
SmolLM2 360M360MBest tiny LLM, excellent quality/size ratio
FunctionGemma 270M270MPurpose-built for function calling
Gemma 3 1B1BGoogle's mobile-optimized LLM, 32K context
Gemma 4 E2B5.1BGoogle's compact multimodal LLM, 2.3B effective params
Gemma 4 E4B8BGoogle's mid-range multimodal LLM, 4.5B effective params
Llama 3.2 1B1BMeta's general purpose, 128K context
Qwen 3.5 0.8B800MReasoning (thinking mode), 201 languages
Qwen 3.5 2B2BLarger Qwen 3.5 with extended reasoning
Bonsai 27B27BPrismML's 1-bit multimodal LLM (text + vision), hybrid attention
Vision-Language
ModelParamsDescription
LFM2-VL 450M450MLiquid AI's compact VLM (SigLIP2 vision)
LFM2.5-VL 3B3BLarger 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.json schema 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

CapabilityiOSAndroidmacOSLinuxWindows
Speech-to-Text✅✅✅✅✅
Text-to-Speech✅✅✅✅✅
LLM✅✅✅✅✅
Vision Models✅✅✅✅✅
Tool Calling✅✅✅✅✅
Embeddings🔜🔜🔜🔜🔜
Multi-Model Pipelines (MMP)✅✅✅✅✅
Model Download & Caching✅✅✅✅✅
Hardware AccelerationMetal, ANE on devices; CPU llama.cpp on SimulatorCPUMetal, ANECPU, opt-in VulkanCPU

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
XybridOllamallama.cppONNX 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

Star history for xybrid-ai/xybrid

License

Apache License 2.0 — see LICENSE for details.

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.

xybrid beside the projects that share a topic with it
ProjectDownloadsDependentsStarsLatest releaseRuns on (GPU)Native codeLicense
xybrid This page New

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
shimmy App Listed

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
candle-vllm App Listed

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 App Listed

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
blazr App Listed

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
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 days
  • dormancy: last activity 2026-11-09, 0 days ago, E = 365: active
  • new: 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
Adoption1 active dependents, 1 new dependents in 365 days1 not measured
Adoption measurements
SignalValueSourceFetchedCounts
Active dependents0.5crates.io database dumpYes
New dependents (365 days)0.5crates.io database dumpYes
Peak active dependents0.5crates.io database dumpYes
Active dependents as a share of the peak1crates.io database dumpYes
Binary downloads per releaseNot measuredYes
MaintenanceLatest human commit: on the check date3 not measured
Maintenance measurements
SignalValueSourceFetchedCounts
Latest human commit2026-11-09GitHub repositoryYes
Latest release2026-11-06crates.io database dumpYes
First release2026-05-19crates.io database dumpYes
Latest version0.17.0crates.io database dumpYes
Days the oldest outside issue waits for a reply163GitHub repositoryYes
Maintainer replies over 365 days2GitHub repositoryYes
Repository archivedfalseGitHub repositoryYes
Repository gonefalseGitHub repositoryYes
Release commit or manifest in the repotruecrates.io packageYes
Published docstruecrates.io database dumpYes
Latest release fails cargo checkNot measuredYes
Build check dateNot measuredYes
Build check toolchainNot measuredYes
SecurityUnpatched vulnerabilities: none
Security measurements
SignalValueSourceFetchedCounts
Unpatched vulnerabilities past the grace windownoneRustSec advisory databaseYes
RustSec unmaintained advisorynoneRustSec advisory databaseYes
Deprecation noticenonecrates.io database dumpYes
Deprecated requirementnonecrates.io database dumpYes
Distribution30 releases, 82 downloads over 30 days5 not measured
Distribution measurements
SignalValueSourceFetchedCounts
Releases30crates.io database dumpYes
Downloads over 30 days82crates.io database dumpYes
Binary downloads over the last 3 releasesNot measuredYes
Homebrew installs on request over 365 daysNot measuredYes
Repology repository familiesNot measuredYes
Docker pull growth over 90 daysNot measuredYes
Docker pulls at the growth baselineNot measuredYes
Every version a prereleasefalsecrates.io database dumpYes
Every version 0.0.xfalsecrates.io database dumpYes
Every version yankedfalsecrates.io database dumpYes
Crate deleted from crates.iofalsecrates.io database dumpYes
Repository517 stars, 58 forks, 15 contributors, 923 commits. Stars alone never qualify a project.
Repository measurements
SignalValueSourceFetchedCounts
GitHub stars517GitHub repositoryYes — one part of the repository route
GitHub forks58GitHub repositoryYes — one part of the repository route
Contributors with a GitHub account15GitHub contributorsYes — one part of the repository route
Commits on the default branch923GitHub repositoryNo
Repository's main crate left out of the entrynonecrates.io database dumpYes
Facts that never count
Facts that never count measurements
SignalValueSourceFetchedCounts
LicenseApache-2.0crates.io database dumpNo
Runs on, from listed crates and their direct dependenciesMetalcrates.io database dumpNo
What shows each backendMetal: xybrid-core dependency objc2-metalcrates.io database dumpNo
Native code, from listed crates and their dependenciesBinds native code: llama, whisper, xybrid-llama-sys, xybrid-whisper-sys, xybrid-zzz-sys and 3 more. Build uses a native toolchain: bindgen, cc, cmakecrates.io database dumpNo
Python bindings, from direct dependencies of listed cratesNo Python binding crate foundcrates.io database dumpNo
Crates that depend on a listed crate directly0crates.io database dumpNo

Corrections and review history

Report a correction

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.