Guides · · 5 min read

Inside the QVAC Monorepo: A Map of Every Package

A complete map of QVAC's repository — every package, what it does, and how the SDK and core libraries fit together.

Nobody has mapped this. Here it is.

QVAC's repository is a monorepo where every component lives under /packages — the SDK, the inference libraries, the core building blocks, and the tooling. Not all of them are published to npm. Understanding how they relate explains a great deal about how the SDK behaves.

The repo also has a top-level /plugins directory, separate from /packages, which is where the plugin ecosystem lives.

The four categories

Tether's own legend divides everything into four groups:

  • SDK — the primary entry point for consumers
  • Addon — capability packages; each QVAC capability is implemented by one or more addons
  • Core — foundational building blocks shared across the ecosystem
  • Tool — user-facing tools and services

That structure tells you the architecture before you read a line of code. There's one thing you import, a set of interchangeable capability implementations behind it, a shared foundation underneath, and tooling around the outside.


SDK

sdk

The main entry point. @qvac/sdk on npm. Type-safe, cross-platform, pluggable, exposing every capability through one unified interface.

This is the only package most developers ever touch directly. Everything below is what it orchestrates.


Addons — the capability implementations

Language and text

lib-infer-llamacpp-llm — Native C++ addon running LLMs via qvac-fabric-llm.cpp. This is the workhorse: text generation, chat, and the base for fine-tuning.

lib-infer-llamacpp-embed — Native C++ addon for text embeddings, also via qvac-fabric-llm.cpp.

lib-infer-nmtcpp — Translation, using either qvac-fabric-llm.cpp or Bergamot. The two-engine choice lives here.

rag — A JavaScript library for retrieval-augmented generation: document ingestion, vector search, LLM integration. Notably JS rather than native — it's orchestration, not inference.

langdetect-text — Language detection interface.

langdetect-text-cld2 — CLD2-based implementation with the same API.

That pairing is worth noticing: an interface package and an implementation package, with the same surface. It's the pattern QVAC uses throughout to keep backends swappable.

Speech and audio

transcription-whispercpp — Whisper transcription via qvac-ext-lib-whisper.cpp.

lib-infer-parakeet — High-performance speech-to-text via NVIDIA Parakeet. The alternative ASR engine.

lib-infer-onnx-tts — Text-to-speech using Chatterbox and Supertonic neural TTS models via ONNX Runtime.

lib-decoder-audio — FFmpeg-based audio decoding, used as a preprocessing step for the other audio addons. Unglamorous and load-bearing; your ASR quality depends on it.

Vision and images

diffusion-cpp — Native C++ addon for text-to-image generation via qvac-ext-stable-diffusion.cpp. Also underpins video generation.

ocr-onnx — Optical character recognition via ONNX Runtime.

lib-infer-onnx — ONNX Runtime session management. The shared foundation beneath OCR and TTS.

classification-ggml — Image classification via a customized GGML backend.

Frontier

bci-whispercppBrain–computer interface transcription, decoding multi-channel neural signals via a customized Whisper backend. Yes, really.

vla-ggmlVision-language-action for robot control via a customized GGML backend.

Shared addon infrastructure

inference-addon-cpp — A header-only C++ library providing common abstractions for building high-performance inference addons.

This one is the tell. It exists so that new addons can be built consistently. QVAC is designed to be extended at the native layer, not just the JS layer.


Core — the foundation

infer-base — Base class for inference addon clients, defining the common lifecycle and generic methods for model interaction. Every addon above conforms to this. It's why loadModel() works identically for an LLM and an OCR model.

dl-base — Base class for data-loading libraries; a common interface for loading from various sources.

dl-filesystem — Loads model weights and resources from the local filesystem.

dl-hyperdrive — Loads model weights from Hyperdrive, Holepunch's distributed filesystem. This is the peer-to-peer model distribution layer, expressed as just another data loader.

That last point is architecturally lovely. Fetching a model from a peer and reading it off disk are the same operation behind the same interface. P2P isn't bolted on; it's a data loader.

error — Standardized error handling across all QVAC libraries.

logging — A logger wrapper normalizing the logging interface across libraries.


Tools

cli — Command-line interface for building, bundling, and managing QVAC-powered applications. Also hosts the OpenAI-compatible HTTP server.

diagnostics — Diagnostic report generation. Use this when filing issues.

lib-registry-server — The distributed model registry, for downloading models and contributing new ones.

lint-cpp — C++ formatting and linting configuration with pre-commit hooks.


External repositories

Several backends live in their own repos, forked and customized:

  • qvac-fabric-llm.cpp — the llama.cpp fork powering LLM inference, embeddings, and translation
  • qvac-ext-lib-whisper.cpp — the Whisper fork
  • qvac-ext-stable-diffusion.cpp — the Stable Diffusion fork

Forking rather than depending is a meaningful choice. It means Tether can optimize these for cross-platform on-device inference — including mobile, which upstream projects historically deprioritize.


What the map tells you

The interface/implementation split is everywhere. langdetect-text and langdetect-text-cld2. dl-base, dl-filesystem, dl-hyperdrive. infer-base and every addon. This is why QVAC can offer Whisper or Parakeet, Fabric or Bergamot, and swap them by configuration rather than rewrite.

P2P is a data loader, not a feature. dl-hyperdrive sits beside dl-filesystem as a peer. Distribution is abstracted at the same level as reading a file.

The SDK is thin; the addons are the substance. Roughly a third of the codebase is C++. The unified JS interface is a facade over a lot of native inference work.

It's built to be extended. inference-addon-cpp and the plugin system exist so that other people can add capabilities. The top-level /plugins directory — separate from /packages — is where that ecosystem is meant to grow.


Practical notes

The repo also contains /docs/architecture for the system as a whole, /docs/gitflow.md for the development workflow, and per-component documentation under each /packages subdirectory. There's a CONTRIBUTING.md and a SECURITY.md.

At the time of writing: 1,927 commits, 195 releases, 308 stars, 78 forks. A young, fast-moving project. Package names and structure will change — verify against the repository before relying on any of this.


See also How QVAC Works Under the Hood, QVAC Fabric LLM, and The Complete Guide to QVAC's Capabilities.