# Bare runtime The installed JARVIS daemon runs on the packaged Bare ELF runtime. Node.js is used in CI for npm dependency resolution and the portable test suite; it is not required on an end user’s machine. ```mermaid flowchart LR Install[web installer] --> Bundle[rolling Bare bundle] Bundle --> ELF[bare-runtime ELF] ELF --> Entry[daemon/bare-entry.js] Entry --> Compat[bare-node-runtime map] Compat --> Harness[copied agent harness] Entry --> QVAC[@qvac/inference in process] QVAC --> GPU[QVAC GPU backend] ``` Bare has no Node standard library. JARVIS carries the official `bare-node-runtime` conditional map at the root, daemon, computer-use, and copied harness package boundaries. Portable source imports such as `node:fs`, `node:path`, and `node:events` resolve to `bare-fs`, `bare-path`, and `bare-events`. Process execution resolves to `bare-subprocess`. New direct runtime code should prefer `bare-*` names when it has no Node test counterpart. The QVAC boundary has one deliberate runtime switch. Node uses the existing `@qvac/sdk` surface. Bare uses `@qvac/inference` in process and registers the LLM plugin once inside the copied harness engine. The daemon remains the single QVAC owner: no skill, job, or extension creates another inference runtime. `packaging/prepare-bare-deps.py` applies the same official map to CommonJS dependencies at bundle-build time. Bare resolves imports at each package boundary, and some third party CommonJS packages do not declare their own map. The preparation changes only the release copy under `node_modules`. Build and verify the bundle with: ```bash npm ci npm run bare:smoke npm run package:bare ``` The installer executes `node_modules/bare-runtime-linux-*/bin/bare` directly. The `node_modules/.bin/bare` convenience script is a Node launcher and is not used by the service. The generated systemd unit therefore has no Node executable in its `ExecStart` line. GPU policy remains strict. The Bare QVAC engine must report a visible GPU and the master load path passes `device: "gpu"`, full GPU layer offload, and GPU multimodal projection settings. A missing or unusable GPU stops inference and is reported by `gpu-doctor`; it never silently falls back to CPU.