Skip to content

Configuration

Quayside reads all its settings from environment variables (or a .env file in services/api/). This page lists every variable.

Format

All variables use the QUAYSIDE_ prefix. Booleans are case-insensitive (true/false/1/0). Secrets use pydantic.SecretStr — they don’t appear in logs or repr output.

Postgres

VarDefaultNotes
QUAYSIDE_DATABASE_URLRequired at runtime. postgres://user:pass@host:port/db
QUAYSIDE_TEST_DATABASE_URLfalls back to QUAYSIDE_DATABASE_URLUsed by the test fixture only

Logging

VarDefaultNotes
QUAYSIDE_LOG_LEVELinfoForwarded to FastAPI / uvicorn

Anthropic upstream

Quayside’s proxy talks to Anthropic when configured. Leave the key unset and the proxy uses a deterministic MockUpstream for development.

VarDefaultNotes
QUAYSIDE_ANTHROPIC_API_KEYunsetSecret. Set to enable real Anthropic forwarding.
QUAYSIDE_ANTHROPIC_BASE_URLhttps://api.anthropic.comOverride for staging or a Bedrock-style sidecar
QUAYSIDE_ANTHROPIC_VERSION2023-06-01Sent as the anthropic-version header
QUAYSIDE_ANTHROPIC_TIMEOUT_S60.0Whole-request httpx timeout

Auth (JWT)

VarDefaultNotes
QUAYSIDE_JWT_SECRETdev-only fallback when DEV_MODE=trueSecret. Required when DEV_MODE=false. HS256 signing key.
QUAYSIDE_JWT_ALGORITHMHS256Only HS256 supported in v1
QUAYSIDE_JWT_TTL_SECONDS3600Default token lifetime
QUAYSIDE_JWT_ISSUERquaysideiss claim
QUAYSIDE_DEV_MODEtrueWhen true, enables the /auth/dev/mint-token endpoint AND the X-Quayside-* header fallback at the proxy. Set to false in production.

Production safety

Two things you absolutely must set differently in production:

Terminal window
QUAYSIDE_DEV_MODE=false
QUAYSIDE_JWT_SECRET=<at least 32 random bytes>

The first disables the easy-mint endpoint. The second forces explicit secret configuration; the dev fallback secret is a publicly-known string in source.

A complete .env example

For local development:

Terminal window
QUAYSIDE_DATABASE_URL=postgres://quayside:quayside@localhost:5432/quayside
QUAYSIDE_TEST_DATABASE_URL=postgres://quayside:quayside@localhost:5433/quayside_test
QUAYSIDE_LOG_LEVEL=info
QUAYSIDE_DEV_MODE=true
# QUAYSIDE_ANTHROPIC_API_KEY=sk-ant-...

For production:

Terminal window
QUAYSIDE_DATABASE_URL=postgres://...your-managed-postgres-dsn...
QUAYSIDE_LOG_LEVEL=info
QUAYSIDE_DEV_MODE=false
QUAYSIDE_JWT_SECRET=...32-bytes-of-randomness...
QUAYSIDE_ANTHROPIC_API_KEY=sk-ant-...

Frontend

The dashboard reads one var:

VarDefaultNotes
NEXT_PUBLIC_QUAYSIDE_API_URLemptyIf set, the dashboard’s API client uses this as the base URL. Empty means same-origin (relies on the Next.js /api/v1/* rewrite in dev).

CLI

VarDefaultNotes
QUAYSIDE_CLI_HOME~/.config/quayside/Where to store the token cache
QUAYSIDE_URLhttp://localhost:8000Default server when no flag and no cached URL

Migration runner

The quayside-migrate and quayside-seed CLIs read QUAYSIDE_DATABASE_URL if no --database-url is passed. They also respect:

VarNotes
QUAYSIDE_ENVIf set to prod, refuses --reset unless --i-know-this-drops-everything is also passed.
QUAYSIDE_MIGRATIONS_DIROverride where to find *.sql files. Mostly for tests.