Every key below can be set as REL_<SECTION>__<KEY> (uppercased, . → __) or --<key>,
equally. This is every configuration key rel understands, including the dynamic,
parametrized ones (openid.<name>.* and the like) — rel --help prints the same list from
the binary itself, if you want it without leaving a terminal.
Full postgres://user:pass@host:port/db. Takes precedence when set — populates pg.host/pg.port/pg.database/pg.user/pg.password itself ; setting any of them alongside pg.uri is a configuration error. When pg.uri isn't set, it's built from the granular fields instead (defaults included), so it's never left blank.
This deployment's externally-reachable domain (bare host, no scheme/port) — required for OpenID/SAML redirect URLs to resolve. See Authentication.
http.cookies_max_age
REL_HTTP__COOKIES_MAX_AGE
86400 (seconds)
Default max-age for a cookie set via a route response, when the response doesn't specify one. Doesn't apply to the JWT cookie — see jwt.max_age below.
http.max_body_size
REL_HTTP__MAX_BODY_SIZE
10 MiB
Hard cap on a declared route request's entire body (multipart envelope included). Rejected with 413 before any of it is buffered.
http.max_part_count
REL_HTTP__MAX_PART_COUNT
100
Max number of multipart/form-data parts a single declared-route request may contain.
http.static.path
REL_HTTP__STATIC__PATH
—
Colon-separated directories served at the router root, as the fallback for any path no declared route claims. See Static files.
http.upload.dir
REL_HTTP__UPLOAD__DIR
unset (uploads disabled)
Subpath of the static write directory (the first entry of http.static.path) that every stream_upload writes under. Uploaded files stay servable as static content, but no file under here is ever eligible for jet execution. See File uploads.
http.upload.max_size
REL_HTTP__UPLOAD__MAX_SIZE
= http.max_body_size
Hard cap on a stream_upload route's streamed payload — separate from http.max_body_size since this path streams to disk instead of buffering in memory. See File uploads.
http.templates.path
REL_HTTP__TEMPLATES__PATH
/template
Directory Jet templates are loaded from, for a route's or middleware's own template, and (merged with http.static.path) for a static .jet render. See Requests and responses and Static files.
One named entry per provider — <name> is yours to choose, unrelated to the provider's brand.
See Authentication for the full picture (routes, callback function
contract, worked examples); this is the exhaustive key list.
Key pattern
Env var
Default
What it does
openid.<name>.issuer
REL_OPENID__<NAME>__ISSUER
— (required)
The OIDC issuer URL; /.well-known/openid-configuration is discovered from it.
Two dynamic namespaces add to (never replace) rel's built-in blacklist:
Key pattern
Env var
Default
What it does
blacklist.relations.<schema>.<name|*>
REL_BLACKLIST__RELATIONS__<SCHEMA>__<NAME|*>
see below
y/n; * blacklists an entire schema. pg_catalog.* and information_schema.* are blacklisted by default.
blacklist.functions.<schema>.<name|*>
REL_BLACKLIST__FUNCTIONS__<SCHEMA>__<NAME|*>
see below
y/n; * blacklists an entire schema. A handful of individually dangerous functions (pg_sleep, pg_terminate_backend, the pg_advisory_*lock* family, ...) are blacklisted by default.
Filesystem path rel (re)writes database.ts's content to directly, at startup and on every SIGUSR1 reload — for an editor/LSP watching a real file on disk. See TypeScript client.