YAML reference
Use this reference after the task-oriented configuration
guide. Put resources below .deliberate/; project.yaml
selects the Team, Project, and Environment Flow, while every other document
starts with resource:.
Project pin
Section titled “Project pin”team: acmeproject: chatflow: defaultResources
Section titled “Resources”| Resource | Purpose |
|---|---|
component | A long-running service, background worker, or scheduled job |
database | Platform-operated PostgreSQL or FerretDB |
volume | Durable, automatically expanding filesystem storage |
bucket | Elastic S3-compatible object storage |
route | Explicit public or Private Net HTTP routing |
domain | A customer-owned hostname attached to an environment |
blueprint | A pinned instance of a published Blueprint |
flow-pattern | A custom persistent and disposable Environment topology |
Components
Section titled “Components”Components declare an image and only the behavior they need. Ports are internal
unless they request visibility: public or private. No ports means a worker;
schedule: means a scheduled job.
resource: componentname: appimage: ghcr.io/acme/app:1.4.2cpu: 1memory: 2Giports: - port: 3000 visibility: publicenv: DATABASE_URL: "${{ postgres.url }}"secrets: - SESSION_SECRETneeds: databases: - postgreshealthcheck: path: /healthDeclaring needs authorizes the dependency; it injects nothing automatically.
Wire the output to the environment-variable name your software expects with a
${{ name.output }} expression.
Complete example
Section titled “Complete example”This bundle describes a production application and its supporting resources.
Put it in .deliberate/app.yaml, next to .deliberate/project.yaml.
# PostgreSQL is addressed as `postgres` by the components below.resource: databasename: postgresengine: postgrestier: prodversion: "17"extensions: - vector
---# Volumes grow automatically. `backup` selects the durability policy.resource: volumename: uploadsbackup: offsite
---# Buckets expose S3-compatible outputs such as endpoint and access_key.resource: bucketname: assetsexpose: trueanonymousRead: false
---resource: componentname: appimage: ghcr.io/acme/example-app:1.4.2cpu: 1memory: 2Gireplicas: 1class: standardports: - port: 3000 protocol: httpenv: NODE_ENV: production DATABASE_URL: "${{ postgres.url }}" DATABASE_POOL_URL: "${{ postgres.pooled_url }}" S3_ENDPOINT: "${{ assets.endpoint }}" S3_BUCKET: "${{ assets.bucket }}" S3_ACCESS_KEY: "${{ assets.access_key }}" S3_SECRET_KEY: "${{ assets.secret_key }}"secrets: - SESSION_SECRETneeds: databases: - postgres buckets: - assets volumes: - name: uploads path: /app/uploadshealthcheck: path: /health port: 3000 initialDelay: 15srelease: command: ["npm", "run", "migrate"] timeout: 10mpostDeploy: command: ["npm", "run", "warm-cache"] timeout: 5mshutdown: gracePeriod: 60salerts: - name: elevated-error-rate type: http_error_rate threshold: 5 window: 10m minRequests: 100 recipients: - ops@example.comoverrides: preview-*: cpu: 0.125 memory: 256Mi replicas: 1 class: standard
---# A worker is the same component primitive without a port.resource: componentname: workerimage: ghcr.io/acme/example-app:1.4.2command: ["npm", "run", "worker"]cpu: 1memory: 2Gienv: DATABASE_URL: "${{ postgres.url }}"needs: databases: - postgres
---# Routes deliberately connect a hostname to a component.resource: routehost: chatvisibility: publicrules: - path: / to: appopen: - label: Open Acme Chat path: / description: Open the customer-facing application. - label: Administration path: /admin description: Configure the application.The needs declarations grant the app access to the named resources. The
${{ ... }} expressions then map their outputs to the environment-variable
names this particular image expects. release runs before the new revision is
made current; postDeploy runs after deployment. Both use the bounded
lifecycle hook contract. The preview-* override
keeps every matching preview environment smaller without changing production.
The route makes public exposure explicit. Change its visibility or replace its host without changing the Component that serves it.
The parser rejects unknown fields.