Guide
saasie.yaml
saasie.yaml, in full
THE BLUEPRINT
saasie.yaml describes the repository, not one deployment. It holds no names,
no hostnames and no connection strings: every deployment of it gets its own
databases, with their own generated passwords, and its own hostnames. Today
that is production, from main; the file is written this way so that what
deploys it later — a preview branch, a second environment — needs no edit.
That is why environment values can be references rather than literals: the
control plane resolves them once the thing they point at exists.
version: 1
databases:
db:
engine: postgres # postgres | redis
cache:
engine: redis
batteries: # optional; any of analytics, mail, inference
analytics: # no settings — the caps are the platform's
services:
backend:
dockerfile: backend/Dockerfile # relative to the repo root
context: . # build context, relative to the root
port: 3000 # what the container listens on
health:
path: /health # absolute path, served on that port
env:
LOG_LEVEL: info # a literal
DATABASE_URL: { database: db, property: url }
API_URL: { service: backend, property: internalUrl }
Every field above is required except env, databases and batteries. Nothing
has a default: a value a deployment depends on is written down, so reading
the file tells you what will run without having to know what was left out. At
least one service is required.
REFERENCES
{ database: <name>, property: <property> }
postgres: url, host, port, name, user, password
redis: url, host, port, password
Asking a redis for "user" is a parse error, not a variable that
resolves to nothing at deploy time.
{ service: <name>, property: <property> }
url public HTTPS URL — what a browser should call
internalUrl in-cluster URL — what a sibling service should call
host, port
{ battery: <name>, property: <property> }
analytics: url, token
mail: url, token, from
inference: url, token
Only for a battery declared under "batteries:". See: saasie docs
batteries
Secrets are not written here. A database password reaches your service as a
reference, already resolved.
Unknown keys are rejected rather than ignored, so a typo is an error at push
time and not a setting that silently did nothing.
Check a file: saasie validate
The same text, on your machine:
saasie docs blueprint