Skip to main content
One C++ core sits under every SDK. The namespaces, the option names, and the event shapes are deliberately the same, so code reads the same in Swift, Kotlin, TypeScript, and Dart. What differs is what each language forces. This page is the list of those differences, so you can port code without discovering them one compile error at a time.

The platforms

QHexRT, the Qualcomm Hexagon NPU backend, stops at 0.20.19 on Maven Central, pub.dev, and npm’s React Native package. Electron’s @runanywhere/electron-qhexrt is the exception and publishes at 0.20.24.

Async and streaming

Prompts and conversations

Flutter is the outlier, because Dart has no method overloading. It also has generateChatStream alongside generateStream.

Input constructors

React Native’s are plural. Flutter has no AudioInput.file and no ImageInput.rawRgba. Web has no AudioInput.file; use AudioFileLoader from @runanywhere/web/browser.

Streaming push handles

openStream returns a handle you push frames into. React Native has only the pull-shaped transcribeStream and detectStream.

Where streaming errors surface

Preflight failures throw from the call on every SDK. Do not share one error-handling helper across the two groups without checking.

Smaller differences worth knowing

Structured output modes

Every SDK exposes three enforcement modes and only two of them work:

Backends

MLX runs only on physical Apple hardware, never a simulator. QHexRT is arm64 only. On Windows the Electron lanes are mutually exclusive: x64 gets llama.cpp, ONNX, and Sherpa; arm64 gets QHexRT alone.

Pick one

Swift

iOS and macOS

Kotlin

Android

React Native

iOS and Android

Flutter

iOS and Android

Web

The browser