RunAnywhere CLI

August 26, 2026 · View on GitHub

Run open models on your machine.

rcli pull qwen3
rcli run qwen3

Chat, vision, speech, and embeddings — all local. Nothing leaves the device.

Install

macOS (Apple Silicon)

brew install runanywhereai/rcli/rcli

or

curl -fsSL https://raw.githubusercontent.com/RunanywhereAI/RCLI/main/install.sh | sh

Windows (x64)

irm https://raw.githubusercontent.com/RunanywhereAI/RCLI/main/install.ps1 | iex

Linux (x86_64)

curl -fsSL https://raw.githubusercontent.com/RunanywhereAI/RCLI/main/install.sh | sh

Get started

rcli pull qwen3          # download
rcli run qwen3           # chat
rcli run qwen3 "Hello"   # one-shot
rcli serve qwen3         # OpenAI-compatible API on :8080 (macOS/Linux)

rcli models list --all is the full catalog. Short names work everywhere (qwen3, llama3.2, whisper-tiny, piper, …). Any Hugging Face GGUF works too:

rcli pull hf.co/Qwen/Qwen3-0.6B-GGUF/Qwen3-0.6B-Q8_0.gguf

Backends

One rcli binary. Catalog models already name their engine (GGUF → llama.cpp, mlx-* → MLX, Core ML → NeuRT, QNN-context → QHexRT). You normally do not pick one.

Override only when you mean it:

rcli llm generate --engine mlx -m mlx-qwen3 "Hello"
rcli run --engine qhexrt /path/to/lfm2_5_230m_HNPU "Hello"
rcli image generate --engine neurt --prompt "a red cube" --out out.png

--engine accepts mlx, llamacpp, sherpa, onnx, neurt / coreml / ane, and qhexrt / qnn / npu / hexagon. If you omit it, commons picks the highest-priority registered backend that implements that primitive:

PriorityEngineWho wins unpinned work
150QHexRTEvery primitive it implements, and only on a Windows ARM64 overlay binary (often the only engine in that binary)
110MLXApple GPU: LLM / VLM / TTS / STT / embeddings when an mlx-* model is not already pinned
100llama.cppGGUF LLM / VLM / embed / rerank
100NeuRTCore ML only. Stays at 100 on purpose so it never steals GGUF/MLX traffic. A Core ML bundle reaches NeuRT by framework pin, not by winning priority
90Sherpa-ONNXSTT / TTS / VAD
50ONNX Runtimeembeddings / VAD / diarization / segmentation

rcli backends is the source of truth for this binary. Public bottles never list neurt or qhexrt. Those engines are private overlays, never Homebrew / GitHub Release assets.

Where each engine exists

BackendmacOS Apple SiliconWindows x64Windows ARM64Linux x64
llama.cpppublic bottlepublic bottlepublic bottle
MLX (Apple GPU)public bottle (product rcli, not rcli-cxx)
Sherpa-ONNXpublic bottlepublic bottlepublic bottle
ONNX Runtimepublic bottlepublic bottlepublic bottle
NeuRT (Apple Neural Engine; Core ML is the format)overlay rebuild
QHexRT (Qualcomm Hexagon NPU)overlay rebuild

Public Windows ARM64 kits are commons-only (no llama.cpp / ONNX / Sherpa on MSVC ARM64). Snapdragon NPU is overlay-only. x64 Windows has no Hexagon path.

Modalities × engines

Yes = this engine implements the primitive. Try = a catalog id that rcli pull / a local path can run. Overlay engines still need the matching on-disk bundle (compiled .mlmodelc tree, or *_HNPU / v81/ QNN-context dir) — a Hugging Face repo page is HTML, not a model.

ModalityCommandllama.cppMLXSherpaONNXNeuRTQHexRT
LLMrcli run / llm generateyes · smollm2, qwen3yes · mlx-qwen3yes · lfm2-230m-ane local Core ML treeyes · lfm2-230m-npu local *_HNPU
VLMrcli vlm generate --imageyes · smolvlm2yes · mlx-qwen2-vlyes · internvl-1b-npu local HNPU
TTSrcli tts synthesize -o out.wavyes · mlx-sopranoyes · piperyes · kitten-micro-npu local HNPU
STTrcli stt transcribe audio.wavyes · mlx-qwen3-asryes · whisper-tinyyes · parakeet-tdt-v2-ane local Core MLyes · whisper-base-npu local HNPU
VADrcli vad detect audio.wavyesyes · silero
Embeddingsrcli embedyes · nemotron-3-embedyes · mlx-qwen3-embedyes · minilmyes · embeddinggemma-npu local HNPU
Rerankrcli rerank -d …yes · bge-rerankeryes · nv-rerank-npu local HNPU
Segmentationrcli segment image.ppm (binary P6 PPM)yes · segformer
Diarizationrcli diarize audio.wavyes · sortformer
Image genrcli image generate --prompt … --out …yes · sd15 (compiled Core ML zip, not the HF repo HTML)yes · cosmos3-diffusion-npu local HNPU

MLX registers with a one-line -811 then Swift callbacks install it — that warning is expected. image generate is compiled only when NeuRT is linked; --prompt and --out are required (not a positional prompt). --steps 4 is enough for a smoke PNG.

QHexRT on device also needs QAIRT matching the Hexagon skel (QNN_SDK_ROOT + ADSP_LIBRARY_PATH=…\lib\hexagon-v81\unsigned on v81). Overlay 2.47 DLLs vs a 2.41/2.48 device skel will fail to instantiate graphs. Pass the *_HNPU directory, not a GGUF. GGUF files cannot run on the ARM64 overlay binary (no llama.cpp).

Models

Catalog models are grouped by the org that trains them. GGUF rows run on llama.cpp (macOS, Windows x64, Linux). mlx-* rows run on Apple Silicon only.

Language

OrgFamiliesTry
Alibaba QwenQwen3, Qwen3.6, Qwen3.8qwen3, mlx-qwen3
MetaLlama 3.2llama3.2, mlx-llama3.2
GoogleGemma 4gemma4-e2b, mlx-gemma4-e2b
Hugging FaceSmolLM2smollm2
Liquid AILFM2lfm2
IBMGranite 4.1granite4.1-3b, mlx-granite4.1-3b
NVIDIANemotronmlx-nemotron-nano
PrismMLBonsai, Ternary-Bonsaibonsai-1.7b, mlx-bonsai-1.7b
DeepGroveMaple Previewmaple-preview, mlx-maple-preview

Vision

OrgFamiliesTry
Hugging FaceSmolVLM2smolvlm2
Alibaba QwenQwen2-VLqwen2-vl, mlx-qwen2-vl
Liquid AILFM2-VL, LFM2.5-VLlfm2-vl, mlx-lfm2.5-vl
AppleFastVLMmlx-fastvlm
MicrosoftFara 1.5 (computer use)fara
MetaMuse Glimmermuse-glimmer
NVIDIANemotron Omninemotron-omni
rcli vlm generate --model smolvlm2 --image photo.png "What is in this picture?"

Speech

OrgFamiliesRoleTry
OpenAIWhisperSTTwhisper-tiny
NVIDIAParakeet, Canary, Nemotron ASRSTTparakeet-tdt-v2
Alibaba QwenQwen3-ASR / Qwen3-TTSSTT / TTS (MLX)mlx-qwen3-asr
rhasspyPiperTTSpiper
SupertoneSupertonicTTSsupertonic
ZhipuGLM-ASRSTT (MLX)mlx-glm-asr
SileroSileroVADsilero
rcli tts synthesize "Hello from the device." -o hello.wav
rcli stt transcribe hello.wav

Embeddings, rerank, other

OrgFamiliesRoleTry
NVIDIANemotron Embed, Llama-Nemotron Embedembeddingsnemotron-3-embed
Alibaba QwenQwen3 Embeddingembeddings (MLX)mlx-qwen3-embed
sentence-transformersMiniLMembeddingsminilm
BAAIBGE Rerankerrerankbge-reranker
NVIDIASortformerdiarizationsortformer
NVIDIA / Hugging FaceSegFormersegmentationsegformer
Stability AI / AppleStable Diffusion 1.5image gen (NeuRT)sd15

macOS vs Windows

macOS Apple Silicon (public bottle): llama.cpp + MLX + Sherpa + ONNX. Pull qwen3 (GGUF) or mlx-qwen3 (GPU). Image generation is NeuRT (sd15) and only works after the private overlay is linked into product rcli.

Windows x64 (public zip): GGUF / ONNX / Sherpa. No MLX, no NeuRT, no QHexRT.

Windows ARM64 (Snapdragon): public kit has no llama.cpp/ONNX/Sherpa. The QHexRT overlay runs Hexagon NPU models from a local *_HNPU tree. Do not expect mlx-*, GGUF, or sd15 on that binary.

rcli serve is macOS and Linux.

Device round-trips are by modality, not by engine. scripts/e2e.sh always runs scripts/e2e-modalities.sh; public CI leaves the knobs unset and skips. On a machine that already has models:

export RUNANYWHERE_HOME=/path/to/home          # already-pulled OSS models
export RCLI_E2E_MODEL_ROOTS=/path/to/hnpu      # *_HNPU / *_ANE / *.mlmodelc trees
bash scripts/e2e-modalities.sh /path/to/rcli   # no --engine required

RCLI_E2E_LLM, RCLI_E2E_STT, RCLI_E2E_IMAGE, … pin one primitive. Catalog ids (mlx-qwen3, whisper-base-npu) pin the framework; a Hugging Face repo page is HTML, not a bundle.

Commands

rcli run / rcli chatchat (REPL with no prompt)
rcli pull / rcli models downloaddownload
rcli list / rcli lslocal models (--all = catalog)
rcli showone model
rcli rmdelete
rcli llm generate / streamcompletion
rcli vlm generate --imagevision
rcli stt transcribespeech → text
rcli tts synthesizetext → WAV
rcli vad detectvoice activity
rcli embedembeddings
rcli rerankrerank documents
rcli image generatetext → image (NeuRT / Apple Silicon)
rcli serveOpenAI-compatible HTTP (macOS/Linux)
rcli backendsregistered engines
rcli infoversions and paths
--engineforce mlx / llamacpp / sherpa / onnx / neurt / qhexrt

rcli --help and rcli <command> --help cover the rest.

Build from source

Stage a C++ desktop kit from runanywhere-sdks. The pin is cmake/sdk-pin.cmake (RCLI_PINNED_SDK_VERSION).

C++-only (rcli-cxx on Apple; rcli elsewhere):

cmake -B build -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_PREFIX_PATH=/path/to/kit
cmake --build build
./build/rcli version   # ./build/rcli-cxx on Apple
./build/rcli backends

Apple Silicon product binary is the Swift MLX host (build/rcli). Independent clones need the SDK Swift tree (RCLI_SDK_SWIFT_PATH) and RCLI_APPLE_MLX_HOST=ON (the default):

export RCLI_SDK_SWIFT_PATH=/path/to/runanywhere-sdks
cmake -B build -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_PREFIX_PATH=/path/to/kit
cmake --build build
# or: scripts/build-mlx.sh build
./build/rcli version
./build/rcli backends

See CONTRIBUTING.md.

Docs

MIT. See LICENSE.