Skip to content

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/uploads

Reference

Root

KeyTypeRequiredDescription
namestringYesProject identifier. Lowercase, numbers, hyphens only.
frameworkstringYesFramework type. Currently only nextjs.
buildobjectYesBuild configuration.
targetsobjectYesDeployment targets (servers).
addonsobjectNoOptional addons (postgres, cron).
volumesstring[]NoDocker volume mounts.

build

KeyTypeRequiredDescription
commandstringYesBuild command (e.g., pnpm exec next build).
packageManagerstringYesnpm, pnpm, yarn, or bun.
nodenumberYesNode.js major version (e.g., 20, 22, 24).

targets.

Each target represents a deployment environment.

KeyTypeRequiredDescription
serverstringYesServer name from exodus connect.
domainstring[]YesCustom domains. Empty array [] for none.
autoDomainbooleanYesEnable {project}.{ip}.sslip.io domain.
envFilesstring[]NoLocal .env files to include at build time.
envobjectNoStatic environment variables.
imageRetentionnumberNoNumber 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

KeyTypeRequiredDescription
{name}objectNamed postgres instance.
{name}.envKeystringYesEnv var name for connection string.
yaml
addons:
  postgres:
    main:
      envKey: DATABASE_URL
    analytics:
      envKey: ANALYTICS_DB_URL

addons.cron

KeyTypeRequiredDescription
schedulestringYesCron expression (e.g., 0 * * * *).
commandstringYesCommand 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/data

WARNING

Volumes persist data outside the container. Use for user uploads or persistent storage only.