Configuration Reference
Vaibify projects are configured through three files: vaibify.yml and
container.conf in the project root directory, and project.json at
.vaibify/projects/project.json. This page documents every field and
option.
vaibify.yml
The primary configuration file. All fields use camelCase keys in the YAML file; the Python dataclass uses Hungarian notation internally.
Top-Level Fields
YAML Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
(required) |
Docker container and image name |
|
string |
|
Non-root user inside the container |
|
string |
|
Python version to install |
|
string |
|
Base Docker image |
|
string |
|
Mount point for the workspace volume |
|
string |
|
Package manager: |
|
boolean |
|
Disable outbound network access |
|
string |
|
Extra flags passed to |
|
boolean |
|
Keep the host awake ( |
|
integer |
|
The project’s dashboard port. |
|
integer |
|
Cap on container CPU cores. |
|
float |
|
Container memory cap in GB. |
List Fields
YAML Key |
Element Type |
Description |
|---|---|---|
|
dict |
Repository definitions (see below) |
|
string |
APT packages to install |
|
string |
pip packages to install |
|
string |
Refused at validation — see below |
|
dict |
Pre-built binaries to download |
|
dict |
Ports to expose from the container |
|
dict |
Host directories to mount |
|
dict |
Secret references (see Security below) |
Note
A user-supplied systemPackages list replaces the default set — it
does not extend it. The defaults are gcc, make, git, curl,
ca-certificates, gnupg, gosu, and time. If you set
systemPackages in vaibify.yml, include any of those you still
need alongside your additions.
Note
condaPackages is refused, not installed. A non-empty value fails
validation. The image installs Miniforge, but there is no
conda install step and no build argument carries the list, so
accepting the field would produce a container without the requested
packages and say nothing. Refusing is the honest interim until the
install step is wired; install what you need with pythonPackages, or
add a conda install line to container.conf.
Features Block
Nested under the features key:
YAML Key |
Type |
Default |
Description |
|---|---|---|---|
|
boolean |
|
Install JupyterLab |
|
boolean |
|
Install R and IRkernel |
|
boolean |
|
Install Julia |
|
boolean |
|
Install PostgreSQL client |
|
boolean |
|
Install DVC for data versioning |
|
boolean |
|
Install MultiNest, pymultinest and ultranest (adds a Fortran/LAPACK toolchain and a from-source build) |
|
boolean |
|
Install TeX Live |
|
boolean |
|
Install Claude Code CLI |
|
boolean |
|
Allow Claude Code to update itself |
|
boolean |
|
Install OpenAI Codex CLI |
|
boolean |
|
Update Codex when the container starts |
|
boolean |
|
Install Google Gemini CLI |
|
boolean |
|
Allow Gemini CLI to update itself |
|
boolean |
|
Install Google Antigravity CLI ( |
|
boolean |
|
Update Antigravity when the container starts |
|
boolean |
|
Install OpenCode CLI |
|
boolean |
|
Update OpenCode when the container starts |
|
boolean |
|
Install Cline CLI |
|
boolean |
|
Update Cline when the container starts |
|
boolean |
|
Install OpenHands CLI |
|
boolean |
|
Update OpenHands when the container starts |
|
boolean |
|
Install Pi coding agent |
|
boolean |
|
Update Pi when the container starts |
|
boolean |
|
Enable NVIDIA GPU passthrough |
All enabled CLIs receive the same Vaibify context, skills, persistent
configuration directory, and vaibify-do dashboard bridge. Auto-updates
need network access; when networkIsolation is enabled, Vaibify records a
startup warning that the update was deferred.
Reproducibility Block
Nested under the reproducibility key:
YAML Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
|
|
|
string |
|
Path to LaTeX source files |
|
string |
|
Path to generated figures |
Overleaf Sub-Block
Nested under reproducibility.overleaf:
YAML Key |
Type |
Default |
Description |
|---|---|---|---|
|
string |
|
Overleaf project identifier |
|
string |
|
Target directory in Overleaf |
|
list |
|
Paths to sync from Overleaf |
Example
projectName: earth-water-study
containerUser: researcher
pythonVersion: "3.12"
baseImage: ubuntu:24.04
workspaceRoot: /workspace
packageManager: pip
networkIsolation: false
systemPackages:
- gcc
- make
- git
- curl
pythonPackages:
- numpy
- matplotlib
- h5py
features:
jupyter: true
latex: true
reproducibility:
zenodoService: sandbox
latexRoot: src/tex
figuresRoot: src/tex/figures
container.conf
A line-oriented file listing repositories to clone and install. Each non-comment line has four pipe-separated fields:
name|url|branch|install_method
Install Methods
Method |
Action |
|---|---|
|
|
|
|
|
|
|
Add to |
|
Clone for reference, do not install |
Example
mycode|git@github.com:user/mycode.git|main|pip_editable
data-utils|git@github.com:user/data-utils.git|develop|pip_no_deps
project.json
Defines the execution pipeline. It lives at
.vaibify/projects/project.json inside the project repository — not
at the repository root — which is where the dashboard and vaibify run discover it. See Pipelines for full
documentation.
Environment variables
VAIBIFY_HUB_IDLE_TIMEOUT_SECONDS
How long a hub or viewer server may sit idle before it self-retires. This is the highest-precedence override — it wins over the stored Settings preference and the launch default — so scripts and CI can pin a deterministic value.
Accepts a non-negative number of seconds, or the string never (also
off, none, disabled) to disable self-shutdown entirely. 0
retains its historical meaning — retire as soon as the server is idle.
A malformed or negative value is ignored, and resolution falls through
to the next tier.
VAIBIFY_HUB_IDLE_TIMEOUT_SECONDS=60 vaibify # 60-second reaper
VAIBIFY_HUB_IDLE_TIMEOUT_SECONDS=never vaibify # never self-retire
When this variable is unset, the effective timeout is resolved in this
order: the stored host-global Settings preference (set from the gear
menu’s Idle shutdown control and applied live, without relaunching
the hub), then the launch default. The launch default is never for
a browser launch — a researcher sitting at the dashboard should never
have the connection reaped out from under them — and 1800 (30
minutes) for a headless/remote launch (browser suppressed via
VAIBIFY_SUPPRESS_BROWSER), so an abandoned server still retires.
Self-shutdown only fires when no browser tab is connected and no pipeline is running in any container the server holds; an open dashboard keeps the server alive indefinitely. See the Session & container-lock lifecycle section for the full rationale.
Security
Secrets are never stored in configuration files. The secrets field in
vaibify.yml lists secret references (names), not values. At
build time, Vaibify delegates to the host’s credential manager
(e.g., gh auth, OS keychain) to resolve secrets. See the
Reproducibility page for details on how secrets
interact with published projects.