Skip to main content
The deployment manifest is named squid.yaml by convention. It defines the Cloud deployment identity, build, services, addons, environment, and resource profiles used by sqd deploy.
Use manifest_version, slot or tag, and deploy.init in new manifests. The older manifestVersion, numeric version, and deploy.migrate fields are accepted for backwards compatibility but are deprecated.

Minimal manifest

squid.yaml
With no slot or tag, sqd deploy . creates a new slot with a generated identifier. See Slots and tags before choosing a production deployment strategy. slot and tag are mutually exclusive. If neither is present, Cloud creates a new slot.
A tag identifies the slot that currently carries it. Deploying through a production tag updates that slot in place. If the change requires a fresh database or historical replay, create a new slot and move the tag only after validation.

build

Cloud builds one image and runs it with different commands for init, processor, and api. The following files must exist in the squid source:
  • package.json
  • tsconfig.json
  • commands.json
  • src/
The db/ and assets/ directories are included when present. Example:

deploy

The deploy section is required and contains the services and addons that make up the squid.

addons

postgres

Provision managed Postgres:
Supported Postgres versions are 14, 15, 16, 17, and 18. Cloud injects the connection variables described in the Postgres reference. Duration fields accept an integer number of milliseconds or a value ending in us, ms, s, min, h, or d.

rpc

Provision one or more Cloud RPC endpoints:
See RPC proxy networks for valid names and RPC proxy for usage.

hasura

Provision Hasura instead of an application-managed GraphQL server:
See Hasura for initialization and API configuration.

init

init runs to completion before processor and API services start. Use it for database migrations or one-time deployment initialization:
When Postgres is enabled and init is omitted, Cloud uses:
If init exits with an error, the deployment does not start.

processor

A single processor:
Multiple processors:
Names are required and must be unique when processor is a list. Each entry runs as a separate service and is billed separately. Processor services can run any executable included in the built image. That includes non-indexing workloads such as background and scheduled jobs.

api

api is optional. Add it when the deployment serves GraphQL or another HTTP API:
The server must listen on the Cloud-provided GRAPHQL_SERVER_PORT. Cloud exposes APIs through slot and tag URLs:
Use a tag URL in production so the destination can move between slots without changing clients.

env

Deployment-level variables are available to every service:
Service-level variables override deployment-level variables. See Environment variables and secrets.

cors

Configure the Cloud API proxy:
Available fields are enabled, allow_origin, allow_methods, allow_headers, expose_headers, allow_credentials, and max_age.

scale

The scale section selects dedicated or collocated placement and resource profiles:
version belongs under deploy.addons.postgres, not scale.addons.postgres. Scaling changes resources; it does not change the database engine version.
See Scaling and Postgres for allowed profiles, replicas, storage, and billing behavior.

Secrets

Reference an organization secret with the secrets context:
Secrets are organization-scoped. Changing a secret does not update running processes until the deployment is restarted:
Never store credentials directly in squid.yaml.

Production example

squid.yaml
Deploy it into a new generated slot:
After validation, attach a stable tag: