Appearance
Config File
The exodus.yml file configures your project deployment.
Full Example
yaml
name: my-app
framework: nextjs
build:
command: pnpm exec next build
packageManager: pnpm
node: 24
targets:
default:
server: my-vps
autoDomain: true
domain:
- example.com
- www.example.com
envFiles:
- .env
- .env.production
env:
NODE_ENV: production
NEXT_TELEMETRY_DISABLED: "1"
imageRetention: 3
staging:
server: staging-vps
autoDomain: true
domain: []
envFiles:
- .env
- .env.staging
addons:
postgres:
main:
envKey: DATABASE_URL
cron:
- schedule: "0 * * * *"
command: "node scripts/cleanup.js"
volumes:
- ./uploads:/app/uploadsReference
Root
| Key | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Project identifier. Lowercase, numbers, hyphens only. |
framework | string | Yes | Framework type. Currently only nextjs. |
build | object | Yes | Build configuration. |
targets | object | Yes | Deployment targets (servers). |
addons | object | No | Optional addons (postgres, cron). |
volumes | string[] | No | Docker volume mounts. |
build
| Key | Type | Required | Description |
|---|---|---|---|
command | string | Yes | Build command (e.g., pnpm exec next build). |
packageManager | string | Yes | npm, pnpm, yarn, or bun. |
node | number | Yes | Node.js major version (e.g., 20, 22, 24). |
targets.
Each target represents a deployment environment.
| Key | Type | Required | Description |
|---|---|---|---|
server | string | Yes | Server name from exodus connect. |
domain | string[] | Yes | Custom domains. Empty array [] for none. |
autoDomain | boolean | Yes | Enable {project}.{ip}.sslip.io domain. |
envFiles | string[] | No | Local .env files to include at build time. |
env | object | No | Static environment variables. |
imageRetention | number | No | Number of old images to keep (default: 3). |
Multiple Targets
Define multiple targets for different environments:
yaml
targets:
default:
server: prod-vps
# ...
staging:
server: staging-vps
# ...Deploy with target selection: exodus deploy prompts which target.
addons.postgres
| Key | Type | Required | Description |
|---|---|---|---|
{name} | object | — | Named postgres instance. |
{name}.envKey | string | Yes | Env var name for connection string. |
yaml
addons:
postgres:
main:
envKey: DATABASE_URL
analytics:
envKey: ANALYTICS_DB_URLaddons.cron
| Key | Type | Required | Description |
|---|---|---|---|
schedule | string | Yes | Cron expression (e.g., 0 * * * *). |
command | string | Yes | Command to execute. |
yaml
addons:
cron:
- schedule: "0 0 * * *"
command: "node scripts/daily-report.js"volumes
Mount local directories into the container.
yaml
volumes:
- ./uploads:/app/uploads
- ./data:/app/dataWARNING
Volumes persist data outside the container. Use for user uploads or persistent storage only.