One engine. Four SDKs.

The reliable and efficient on-device inference core, available as a native Rust crate, a Swift Package, a Dart Flutter plugin, and a React Native SDK.

Rust

The native crate. Zero-copy, Tokio async, runs everywhere Rust does — from macOS and Linux servers to embedded targets.

Swift

UniFFI bindings in an SPM package with a signed XCFramework. iOS, macOS, and tvOS. Local test mode built in.

Dart

Flutter-first plugin on pub.dev. On-device inference for iOS, macOS, and visionOS from a single Dart codebase.

React Native

JavaScript and TypeScript bindings published on npm. Bring Onde into React Native apps without giving up on-device inference.

Current scope

Chat-focused: ChatEngine, GgufModelConfig, platform-default model selection, and streaming callbacks. More APIs ship with the engine.

Quick Start

Install.

Add the crate via Cargo. One dependency, no build scripts beyond what Cargo handles automatically. If you want to test model downloads or GGUF output before wiring it into app code, use Onde CLI.

# via CLI
cargo add onde

# or in Cargo.toml
[dependencies]
onde = "0.1"

Usage

Two lines to infer.

Load a model with the platform default config, send a message, get a result. Everything is async and cancellable. If you want the longer argument for local inference, read The Forward Pass.

use onde::inference::{ChatEngine, GgufModelConfig};

let engine = ChatEngine::new();
engine
    .load_gguf_model(
        GgufModelConfig::platform_default(),
        Some("You are a helpful assistant.".into()),
        None,
    )
    .await?;

let result = engine.send_message("Hello!").await?;
println!("{}", result.text);
// completed in 85ms, fully on device

Coverage

Platform Matrix.

macOS and iOS first. tvOS and visionOS are in the pipeline. If you want to watch the network side of Onde, open Onde Inference Pulse.

PlatformTargetStatus
macOSarm64Ready
iOSarm64 device, arm64 simulatorReady
tvOSarm64Pending
visionOSarm64Pending