# Configuration
vvbox loads config in this order:
1. `~/.vvbox/config.yaml` (or `.yml`, `.json`)
2. `vvbox.yaml` (or `.yml`, `.json`) in repo root
3. `--config <path>` override
## Example config
```yaml
image: ubuntu:latest
network: default
workdir: /work
env:
CI: "1"
ports:
- "8080:8080"
volumes:
- source: vvbox:cache
target: /cache
- source: ~/.ssh
target: /root/.ssh
readonly: true
pre_install:
- apt-get update
- apt-get install -y git
run:
- npm install
- npm test
services:
- name: db
image: postgres:16
env:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: app
ports:
- "5432:5432"
volumes:
- source: vvbox:pgdata
target: /var/lib/postgresql/data
```
## Notes
- `pre_install` and `run` execute in a single `sh -lc` shell.
- `run` can be a string or list of commands.
- `vvbox:<name>` creates a persistent volume at `~/.vvbox/volumes/<name>`.
- `services` are optional and intended for simple dependencies.