Explainers · · 7 min read

QVAC SDK Explained: What Developers Can Build With On-Device AI

The QVAC SDK is the main entry point for building local-first AI apps. What it exposes, how models are loaded, and what to expect when building on it.

The QVAC SDK is Tether's open-source toolkit for building AI that runs on the device, not in the cloud. If you've evaluated local-AI tooling and found it fragmented — one library for inference, another for speech, another for OCR, and no clean mobile story — the SDK's pitch is to put all of it behind a single import that runs everywhere.

Here's what it is and how to think about it.

What it is

The QVAC SDK (@qvac/sdk) is a type-safe JavaScript/TypeScript package that exposes multiple on-device AI capabilities through one unified interface. It's released under the Apache 2.0 license, which permits commercial use in proprietary apps. It launched publicly on April 9, 2026.

The design philosophy is "go wide": rather than being the best at one thing, it unifies many modalities and runs consistently across platforms.

What it can do

Through one interface, the SDK supports:

  • Text generation / chat (LLM completion)
  • Embeddings (semantic search, clustering, retrieval)
  • RAG (retrieval-augmented generation, out of the box)
  • Transcription (speech-to-text)
  • Translation (on-device neural machine translation)
  • OCR (text from images)
  • Vision / multimodal and additional capabilities

Under the hood it wires together best-in-class native engines — QVAC Fabric (a fork of llama.cpp) for text and embeddings, whisper.cpp / Parakeet for speech, Bergamot for translation, and others — and exposes them through a consistent API so you can combine or swap capabilities without rewriting application logic. → Full capabilities guide

Where it runs

The same codebase runs across:

  • Node.js (servers, CLI tools)
  • Bare (Holepunch's lightweight runtime)
  • Expo (iOS and Android, physical devices)

So one codebase targets iOS, Android, macOS, Windows, and Linux. Note it does not target the browser — that's a deliberate choice, since it's playing a different game than browser-based inference libraries.

The basic shape of the API

You load a model, call the capability you need, and unload:

import { loadModel, completion, unloadModel } from "@qvac/sdk";

const modelId = await loadModel({ modelType: "llm" });

const response = completion({
  modelId,
  history: [
    { role: "system", content: "You are a helpful assistant." },
    { role: "user", content: "What can I do in Paris on a weekend?" },
  ],
});

await unloadModel(modelId);

Models can come from a local file path, an HTTP URL, or QVAC's distributed model registry (with preconfigured model constants). The SDK also ships an HTTP server that exposes an OpenAI-compatible API, so existing OpenAI-style code can point at local inference.

The differentiators

  • P2P built in. Via the Holepunch stack, you can distribute models peer-to-peer and even delegate inference to a more powerful device on the network (a phone offloading to a desktop).
  • Model registry. A distributed registry handles model retrieval, including sharded models and pause/resume downloads.
  • Pluggable. Include only the capabilities you need to keep apps lean, and extend with custom plugins.

When to reach for it

The QVAC SDK is a strong fit when you're building an app — especially cross-platform or mobile — that needs private, offline, or cost-free AI, and often several modalities at once. If you only need to run a text model on your own machine, a runtime like Ollama may be simpler (see QVAC vs Ollama). If you're shipping a multi-feature consumer app across iOS and Android, the SDK is built for exactly that.

Official docs live at docs.qvac.tether.io. For a worked example from a shipping app, see how we're building on-device RAG in Local Notes (coming soon), and for the how-to, How to Build a QVAC App.

API details evolve; verify current signatures against the official documentation before building.