System requirements
Host requirements for running the SDK and CLI, validated by `qvac doctor`.
Overview
Minimum host requirements for running the SDK and CLI. These are worker-level — all SDK clients (JS/TS and Python) drive the same worker, so the requirements below apply regardless of which client you use.
You can validate your environment against the machine-checkable subset with:
qvac doctorUse --json for machine-readable output and --quiet to set the exit code only (0 when all required checks pass, 1 otherwise).
Supported environments
| Platform | Min Version | Architecture | GPU API/Backend | Notes |
|---|---|---|---|---|
| macOS | 14.0+ | arm64 | Metal | Arch x64 supports CPU inference only; Intel iGPU acceleration not supported |
| iOS | 17.0+ | arm64 | Metal | Requires Expo |
| Linux | Ubuntu 22+ | arm64, x64 | Vulkan >= 1.4 | Vulkan is required for GPU inference. If not available, it falls back to CPU. |
| Android | 12+ | arm64 | Vulkan, OpenCL (Adreno 700+) | Requires Expo |
| Windows | 10+ | x64 | Vulkan >= 1.4 | Vulkan is required even for CPU-only inference |
Environment setup
Host-level toolchain and driver setup that the QVAC worker relies on. Client install commands (npm i @qvac/sdk, pip install tetherto-qvac-sdk, Expo plugin wiring, …) live on each client page — see JS/TS SDK and Python SDK.
Linux
Requirements:
- Ubuntu 22 requires g++
>= 13. - Vulkan runtime
>= 1.4: Vulkan loader + a GPU driver with Vulkan support.
On desktop Linux distributions (e.g., Ubuntu Desktop), these requirements are typically satisfied out of the box.
On PCs, the Vulkan runtime is usually installed along with the GPU drivers. In other words, if you've installed the correct driver for your GPU (with Vulkan support), you typically don't need to install anything else.
To verify it, install Vulkan tools and run vulkaninfo:
sudo apt update
sudo apt install -y vulkan-tools
vulkaninfo --summaryIn minimalist/headless installations (e.g., Ubuntu Server), you may need to manually install the Vulkan loader, and ensure a Vulkan-capable GPU driver (ICD) is installed. The exact packages vary by distro and GPU vendor. For example:
sudo apt update
sudo apt install -y libvulkan1 mesa-vulkan-drivers
vulkaninfo --summaryEnsure QVAC can detect the GPU Vulkan driver by adding your user to the render and video groups:
sudo usermod -aG render,video $USERWindows
Requirement:
- Vulkan runtime
>= 1.4: Vulkan loader + a GPU driver with Vulkan support.
This requirement is typically satisfied out of the box after installing the correct GPU vendor drivers. To verify it, install Vulkan SDK and run:
vulkaninfo --summaryMobile (iOS / Android)
Mobile is supported by the JS/TS SDK via Expo. See JS/TS SDK — Expo setup for the full flow.
Due to limitations with llamacpp, QVAC currently does not run on emulators.
You must use a physical device.
Scope
The qvac CLI itself runs on desktops only. The SDK additionally targets Android and iOS via Expo/BareKit; those appear here as deploy targets with host-toolchain checks (adb, xcodebuild) but never cause a non-zero exit.
Required
| Requirement | Notes |
|---|---|
Node.js >= 18.0.0 | Node 18 is end-of-life; prefer >= 20. Matches engines.node of @qvac/cli. |
| Supported CLI host | darwin-arm64, darwin-x64, linux-arm64, linux-x64, win32-x64. The CLI cannot run on mobile; those are deploy targets only. |
Total RAM >= 2 GB (recommended >= 4 GB) | Below 4 GB, most LLMs will fail to load. |
Recommended
| Requirement | When it is needed |
|---|---|
Available RAM >= 2 GB | Needed when loading a model. Checked via os.availableMemory() on Node 22+, falling back to os.freemem() on older Nodes. |
| QVAC inference backends use Metal on macOS (always present) or Vulkan >=1.4 on Linux and Windows. In Windows, you must have Vulkan >= 1.4 even for using just CPU inference. | |
Free disk >= 5 GB in the working directory | Model artifacts are typically multi-GB per model. Uses fs.statfsSync (Node 18.15+) with a POSIX df fallback. |
Deploy targets
These checks are informational. They never cause qvac doctor to exit non-zero, because cross-bundling is always supported via bare-pack prebuilt binaries. What is checked here is the host toolchain needed to install/deploy to each target class.
| Target | Check | Status when missing |
|---|---|---|
darwin-{arm64,x64}, linux-{arm64,x64}, win32-x64 | Listed under "Desktop"; native host flagged with (native). | Always pass — cross-bundling is built in. |
android-arm64 | adb --version | warn — install Android platform tools to deploy to devices. |
ios-arm64 + simulators | xcodebuild -version (macOS only) | warn on macOS without Xcode, info on non-macOS hosts. |
Optional tools
This section applies to the JS/TS client — the tools listed here are checked by qvac doctor, which today only covers the JS/TS stack. Python users can ignore it unless they also run the JS/TS SDK.
Only required if you use the corresponding feature. The checker warns when they are missing but does not fail.
| Tool | Required for |
|---|---|
ffmpeg | Microphone capture, transcription examples, and the built-in audio decoder. Install from ffmpeg.org. |
| Bare runtime | Running the SDK under Bare directly. |
| Bun | Building the SDK from source or running the monorepo development workflow. |
Project
This section applies to the JS/TS client — the check below runs against @qvac/sdk in a Node.js/Bun project layout. Python users can ignore it unless they also run the JS/TS SDK.
| Check | Notes |
|---|---|
@qvac/sdk resolvable from project | Resolved with require.resolve('@qvac/sdk/package.json') rooted at the working directory; hoisted installs (monorepos, Yarn/Bun workspaces) are correctly detected. |
Exit codes
0— all required checks passed. Warnings, skips, and informational rows may still be present.1— one or more required checks failed (unsupported Node version, unsupported CLI host, insufficient total RAM, ...). See the printed hints for remediation steps.
JSON schema
interface DoctorReport {
ok: boolean;
platform: string; // e.g. "darwin"
arch: string; // e.g. "arm64"
nodeVersion: string; // e.g. "20.19.5"
sections: Array<{
id: 'runtime' | 'hardware' | 'targets' | 'tools' | 'project';
title: string;
checks: Array<{
id: string;
label: string;
status: 'pass' | 'warn' | 'fail' | 'skip' | 'info';
severity: 'required' | 'recommended' | 'informational';
value?: string;
detail?: string;
hint?: string;
}>;
}>;
}Status semantics
pass— check ran and the requirement is satisfied.warn— recommended requirement not met, or a deploy-target toolchain is missing; does not cause a non-zero exit.fail— required check not met; causes exit code1.skip— the check could not be executed on this host (missing Node API and no fallback, etc.).info— informational row with no pass/fail judgment (e.g. iOS deploy target on a non-macOS host).