nolay.toml
Every field of the project settings file with types and defaults.
nolay.toml lives in the root of the project repository. Every field is optional: without the file the agent detects the builder and port itself. The file in the repository takes priority over the panel form, and the panel never does more than this file.
Secrets are not written in nolay.toml: the file lives in the repository. Set them in the panel on the Secrets page.
Example
Fields
The table is built from the protocol schema nolay-toml.v1.json. A path with [] is an element of a table list, for example [[cron]]; source(git) and source(archive) are the two variants of the [source] section.
How the image is built. auto picks on its own: your Dockerfile, then a Nolay template, then Railpack. compose is not supported yet, nixpacks is kept for older projects and is not used by auto.
Backup schedule to your own S3 storage. No section means no backups. S3 keys are never written here: they are project secrets NOLAY_S3_*.
How to dump the database. Required when targets contains db.
Name of the variable that holds the database password, for example POSTGRES_PASSWORD. The agent takes the value from project secrets.
Database name for postgres and mysql.
Which database runs in the project container.
Name of a catalog service from uses to dump. User, database and password are then taken from the service.
Path to the database file inside the container, sqlite only.
Database user for postgres and mysql. Not a secret.
How many daily copies to keep.
How many monthly copies to keep.
How many weekly copies to keep.
Cron schedule, five fields, UTC time.
What to back up: project volumes, a database dump, or both.
Image build settings.
Build arguments (ARG in a Dockerfile). Keys use capital Latin letters, digits and _. Secrets do not belong here: the file lives in the repository.
Reserved. The agent does not read this field yet; set the repository subdirectory in source.subdir.
Build command for Railpack, nixpacks and templates, for example npm run build.
Path to the Dockerfile inside the project directory. Defaults to Dockerfile.
Ready-made image for builder = "image", for example nginx:alpine. Other builders ignore it.
nixpacks only: replaces its whole install step. Without it nixpacks installs dependencies from package.json and similar files.
Directory with already built static files for builder = "static", dist by default. The agent does not build the frontend.
Scheduled jobs. Each run starts a one-off container from the project image. Up to 20 jobs per project.
Command that runs as sh -c <cmd> in the job container.
Job name, unique within the project: lowercase Latin letters, digits and hyphens, up to 32 characters.
Cron schedule, five fields, UTC. A run is skipped while the previous one is still going.
How many seconds one run may take, 1 to 21600. After that the container is stopped.
Non-secret environment variables. Secrets are set in the panel; if a key is in both places, the secret wins.
Readiness check. No section: the project is ready once the container runs. With path: the agent waits for a 2xx or 3xx answer on that path.
Pause between check attempts, seconds.
HTTP check path, for example /healthz. Without it the image HEALTHCHECK is used.
How long to wait for readiness in total, seconds. If it runs out, the new version is not switched on and the old one keeps running.
Domain protection on the entry proxy. No section: the defaults from this table apply.
Addresses and subnets allowed to reach the domain. Empty: open to everyone. The ACME certificate check is never blocked.
Answer 403 to known scanners by User-Agent. Search engine crawlers are not on the list.
Value of the X-Frame-Options header: SAMEORIGIN or DENY. Remove the field and the header is not set.
Redirect HTTP to HTTPS with code 308. Does not apply to *.localhost, *.test and IP addresses.
Maximum request body size in MiB. Larger requests get 413.
Requests per IP as <count>/<window>, for example 300/1m, or off.
Coraza attack filter with OWASP CRS rules. low has almost no false positives, medium is stricter. Costs about 100 MiB of memory.
Paths where the filter is off, by prefix, for example /api/upload.
Project domains. No domains: the project is reachable only inside the Docker network on the server.
Lowercase domains, no *. The agent on your server issues the certificate.
Redirect www.<domain> to <domain> with code 308.
Project container limits.
CPU share, for example 0.5 or 2.
Memory limit in MiB for the container and the build. Not set: the build runs with a 512 MiB limit.
How the project runs.
Reserved, the agent does not read this field yet.
Port the application listens on. Templates have their own default, so it is optional.
Reserved, the agent does not read this field yet.
Reserved, the agent does not read this field yet. Run migrations from the application start command.
Linux capabilities beyond the base set, without the CAP_ prefix, up to eight. Each one is written to the agent log.
Start command when the builder does not detect it, for example npm start.
Where the agent takes the code from. Usually the panel writes this section, there is no need to keep it in the repository.
Exact commit. Set by the panel, not written in the repository.
git for a repository.
Branch, tag or commit hash.
Repository subdirectory to build from. Not set: the root.
Repository address over HTTPS or SSH. Do not put a login or token in the address: private repositories use the NOLAY_GIT_TOKEN and NOLAY_GIT_SSH_KEY secrets.
Archive format. Set by the panel on upload.
archive for an archive uploaded through the panel.
Archive checksum. The agent verifies it before unpacking.
Archive size in bytes.
Upload ID. Set by the panel.
Server catalog services the project connects to, for example ["db", "cache"]. The connection string arrives as the DATABASE_URL, REDIS_URL or MONGO_URL secret.
Docker volumes for persistent data. Without volumes the container contents are lost on the next deploy.
Volume name within the project: lowercase Latin letters, digits and hyphens.
Absolute path inside the container where the volume is mounted.
Background processes: containers from the same image without a port or domain. Up to 10 per project.
Start command as sh -c <cmd>. The key can also be written as start_cmd.
Process name, unique within the project.
How many identical containers to run, 1 to 10.
Process limits. Not set: taken from the project [resources].
CPU share.
Memory limit in MiB.

