QVAC is an open-source, cross-platform ecosystem for building local-first, peer-to-peer AI applications and systems. With QVAC, you can run AI tasks like LLMs, speech, RAG, and more locally across Linux, macOS, Windows, Android, and iOS — or delegate inference to peers using its built-in P2P capabilities.
- Local-first: load AI models and perform inference on your own machine. No third-party APIs, SaaS, or cloud involved.
- P2P: build unstoppable internet systems — like BitTorrent, IPFS, and blockchain networks, but for AI.
- Cross-platform: consistent developer experience across hardware, operating systems, and JS runtime environments — write code once, run it everywhere.
- OpenAI-compatible API: integrate with the broader AI ecosystem.
- Open source: 100% free to use and modify — build on top, contribute back, be part of our community.
QVAC is composed of JavaScript libraries and tools that converge in the JS SDK. The SDK is the main entry point for using QVAC. It is type-safe and exposes all QVAC capabilities through a unified interface. It runs on Node.js, Bare runtime, and Expo.
Additionally, QVAC also provides an HTTP server, allowing you to use it as a local model provider for your favorite AI tools, such as OpenCode, OpenClaw, and any other application compatible with the OpenAI API.
Whether you're building applications with the SDK or using QVAC as a local model provider, the principle is the same: load models and run inference locally, or delegate inference to peers using the built-in P2P capabilities.
| Task | Description |
|---|---|
| Text generation | LLM inference for text generation and chat via Fabric LLM. |
| Text embeddings | Vector embedding generation for semantic search, clustering, and retrieval, via Fabric LLM. |
| RAG | Out-of-the-box retrieval-augmented generation workflow. |
| Fine-tuning | Adapting LLMs to domain-specific tasks via LoRA. |
| Multimodal | LLM inference over text, images, and other media within a single conversation context. |
| Image generation | Text-to-image and image-to-image generation via a customized Diffusion backend. |
| Video generation | Text-to-video and image-to-video generation via a customized Diffusion backend. |
| Transcription | Automatic speech recognition (ASR) via a customized Whisper backend or NVIDIA Parakeet. |
| Text-to-Speech | Speech synthesis (TTS) via a customized GGML backend. |
| Translation | Text-to-text neural machine translation (NMT), via Fabric LLM and Bergamot. |
| BCI | Brain–computer interface transcription via a customized Whisper backend. |
| VLA | Vision-language-action for robot control via a customized GGML backend. |
| OCR | Optical character recognition for extracting text from images via ONNX Runtime or GGML backends. |
| Image classification | Classify images into labels with confidence scores via a customized GGML backend. |
Explore and use QVAC:
| Resource | Description |
|---|---|
| Docs | Comprehensive QVAC documentation. |
| Examples | Sample apps and PoCs built with QVAC SDK. |
| Local model provider | Use QVAC as a local model provider connected to your favorite AI tools. |
| QV.AC | Get to know our local AI assistant. |
| Support and community | We gather on Discord and Keet. Ask for help, give feedback, and discuss QVAC. |
| Blog | Tutorials, deep dives, engineering notes, and announcements. |
| Ecosystem | Discover the broader QVAC ecosystem. |
| Research | Papers, datasets, and models optimized for edge devices. |
| Our vision | Learn why Tether built QVAC. |
Note: access our Keet room via this link:
keet://chat/nfo61f4e...
keet://chat/nfo61f4e6zc5t1ifncyh9yp7s5eynbruz5bs95oc5ufn3e79entmhix74miigc8iz9iawfrb7pzk3am8eotxw8wat7554etbn7d6j4ho84b1zqnb63z7hxq1ubt5w4wi4kpq3mdgpijcnaifnhm7sy4cfxqqoyedpnb5qg1majcggy4s9s91fgtg3khgw
Want to get hands-on right away? Here's a simple example you can use to test QVAC.
- Create the examples workspace:
mkdir qvac-examples
cd qvac-examples
npm init -y && npm pkg set type=module- Install the SDK:
npm install @qvac/sdk- Create the quickstart script:
import { loadModel, LLAMA_3_2_1B_INST_Q4_0, completion, unloadModel, } from "@qvac/sdk";
try {
// Load a model into memory
const modelId = await loadModel({
modelSrc: LLAMA_3_2_1B_INST_Q4_0,
modelType: "llm",
onProgress: (progress) => {
console.log(progress);
},
});
// You can use the loaded model multiple times
const history = [
{
role: "user",
content: "Explain quantum computing in one sentence",
},
];
const result = completion({ modelId, history, stream: true });
for await (const token of result.tokenStream) {
process.stdout.write(token);
}
// Unload model to free up system resources
await unloadModel({ modelId });
}
catch (error) {
console.error("❌ Error:", error);
process.exit(1);
}- Run the quickstart script:
node quickstart.jsYou'll see the model download first. Then, QVAC will stream the response tokens and print them to the terminal.
We welcome contributions! Feel free to open a pull request, report bugs, or share ideas through issues.
See CONTRIBUTING for details.
Built something with QVAC? Add a badge or banner to your README, website, or app. It is a simple way to highlight your project, help others discover QVAC, and strengthen our community.
By using these badges and banners, you help foster the QVAC ecosystem!
Choose a banner or badge below and copy its Markdown snippet, or copy its image URL and use the hosted SVG asset directly.
Large format badges (240x60) for prominent placement in your README header.
Banner usage
[](https://github.com/tetherto/qvac)
Compact badges for use alongside other shields/badges in your README.
Compact
| Variant | Dark bg | Light bg |
|---|---|---|
| Green logo | ||
| Monochrome |
Inline
| Variant | Dark bg | Light bg |
|---|---|---|
| Green logo | ||
| Monochrome |
Badge usage
[](https://github.com/tetherto/qvac)
