Toolchains
vybn uses composable toolchain modules to set up your VM’s development environment. Instead of a fixed set of tools, you choose which toolchains to install — only what you need, nothing more.
Available Toolchains
Section titled “Available Toolchains”| Name | What it installs |
|---|---|
node | nvm + Node.js LTS (default) |
python | pyenv + latest Python 3 |
rust | rustup + stable toolchain |
go | Official Go binary (latest) |
docker | Docker CE + Compose plugin |
By default, only node is installed. To change this, set VYBN_TOOLCHAINS in ~/.vybnrc.
Configuration
Section titled “Configuration”Set VYBN_TOOLCHAINS to a comma-separated list of module names:
# Node.js and PythonVYBN_TOOLCHAINS="node,python"To install no toolchains at all, set it to an empty string:
VYBN_TOOLCHAINS=""Changes take effect on the next vybn deploy.
Extra Packages
Section titled “Extra Packages”Beyond toolchains, you can install additional system packages and npm globals:
# Extra apt packagesVYBN_APT_PACKAGES="ripgrep fd-find sqlite3 jq"
# Extra global npm packages (requires node toolchain)VYBN_NPM_PACKAGES="typescript tsx prettier"VYBN_APT_PACKAGES are installed via apt-get. VYBN_NPM_PACKAGES are installed via npm install -g and require the node toolchain.
Custom Setup Script
Section titled “Custom Setup Script”For anything beyond packages — cloning repos, configuring tools, setting environment variables — use a custom setup script:
VYBN_SETUP_SCRIPT="$HOME/.vybn/setup.sh"The script runs after all standard setup completes, in a subshell with set +e so failures don’t abort the deploy. Example:
#!/usr/bin/env bash# Clone project repossudo -u claude git clone https://github.com/myorg/myapp.git /home/claude/myapp
# Install project dependenciescd /home/claude/myapp && sudo -u claude npm installPreset Examples
Section titled “Preset Examples”Full-stack web development
Section titled “Full-stack web development”VYBN_TOOLCHAINS="node,docker"VYBN_NPM_PACKAGES="typescript tsx"Data science / ML
Section titled “Data science / ML”VYBN_TOOLCHAINS="node,python"VYBN_APT_PACKAGES="libopenblas-dev"Systems programming
Section titled “Systems programming”VYBN_TOOLCHAINS="rust,go"VYBN_APT_PACKAGES="protobuf-compiler"Everything
Section titled “Everything”VYBN_TOOLCHAINS="node,python,rust,go,docker"How It Works
Section titled “How It Works”During vybn deploy, the startup script is assembled by concatenating several layers:
- Config header — your
VYBN_TOOLCHAINS,VYBN_APT_PACKAGES, and other settings baked as shell variables - Network config — Tailscale auth key and other network-specific values
- base.sh — core setup functions (user creation, Claude Code installation, tmux, SSH hardening)
- Toolchain modules — one file per enabled toolchain from
vm-setup/toolchains/ - Provider-network variant — e.g.,
vm-setup/gcp-tailscale.shorchestrates the setup order - User script — your
VYBN_SETUP_SCRIPT, if configured
Each toolchain module defines a setup_toolchain_<name>() function. The variant script calls these functions for each enabled toolchain. Modules are idempotent — they check whether the tool is already installed before doing anything.