Configuration
The API reads configuration from the environment (an optional .env fills gaps; real env always wins). The essentials:
Required
SVITRIO_JWT_SECRET— HS256 signing key. Boot fails if unset or under 32 bytes.
Core
SVITRIO_ADDR— listen address (default:8080).SVITRIO_SCHEMA— path toschema.gate(baked into the image at/schema.gate).SVITRIO_ADMIN_URL— admin origin; magic-link redirect target and CORS allow-origin.SVITRIO_JWT_ISSUER— JWTissclaim.
Database
SVITRIO_DB— DB path/DSN (default./svitrio.db).SVITRIO_DB_PROVIDER—sqlite | turso | postgres | neon, with the matchingSVITRIO_DB_HOST/TOKEN/USER/PASSWORD/NAME/PORT/SSLMODE.SVITRIO_CONTENT_DSN— optional separate content store.
Secrets & auth
SVITRIO_SECRETS_KEY— base64 32-byte AES-256 key that seals billing/AI/license keys at rest. Unset ⇒ plaintext + a boot warning.SVITRIO_ACCESS_TTL(15m),SVITRIO_REFRESH_TTL(7d),SVITRIO_MAGIC_TTL(15m).SVITRIO_WEBAUTHN_RP_ID/SVITRIO_WEBAUTHN_ORIGINS/SVITRIO_WEBAUTHN_RP_NAME— passkeys (optional).SVITRIO_RATELIMIT_DISABLED / _BURST(8) / _EVERY(20s)— the auth-endpoint throttle.
SVITRIO_EMAIL_PROVIDER—console | brevo | smtp.SVITRIO_BREVO_API_KEY, orSVITRIO_SMTP_HOST/PORT/USER/PASS.SVITRIO_EMAIL_FROM/SVITRIO_EMAIL_FROM_NAME.
Webhooks & portal
SVITRIO_CONTENT_WEBHOOK_URL/SVITRIO_CONTENT_WEBHOOK_SECRET— outbound content ping.SVITRIO_TICKETS_INBOUND_SECRET/SVITRIO_TICKETS_BREVO_SECRET— inbound ticket webhooks.SVITRIO_PORTAL_ADDR(:8081),SVITRIO_PORTAL_URL,SVITRIO_PORTAL_BASE_DOMAIN,SVITRIO_RESERVED_SUBDOMAINS.