Every environment variable the code reads, generated from .env.example (copy it to .env to get started), the schemas of app/config.server.ts and app/config.ts, which fail the start with a list of what is wrong, and the code reading process.env or import.meta.env directly.
Server
Read on the server only, validated by the schema of app/config.server.ts and read through ServerConfig (a few are read straight from process.env).
Voice chat https://dashboard.daily.co (voice is unavailable when unset). DAILY_DOMAIN is the subdomain of the account (<domain>.daily.co), the webhook secret is the hmac returned when creating the webhook
Voice chat https://dashboard.daily.co (voice is unavailable when unset). DAILY_DOMAIN is the subdomain of the account (<domain>.daily.co), the webhook secret is the hmac returned when creating the webhook
Voice chat https://dashboard.daily.co (voice is unavailable when unset). DAILY_DOMAIN is the subdomain of the account (<domain>.daily.co), the webhook secret is the hmac returned when creating the webhook
Defaultrequired in production, "db.sqlite3" elsewhere
Exampledb.sqlite3
Auth https://discord.com/developers
Defaultrequired in production, empty elsewhere
Auth https://discord.com/developers
Defaultrequired in production, empty elsewhere
Defaultrequired in production, "salmon" elsewhere
Examplesalmon
Discord webhook mod events (user reports, bans) are posted to (skipped when unset)
when we do pnpm run setup NODE_ENV is not set -> use test seasons
Default"development"
Valuesdevelopmentproductiontest
Patreon integration to sync supporter status https://www.patreon.com/portal/registration/register-clients
Defaultrequired in production, "secret" elsewhere
Examplesecret
Discord webhook SendouQ match cancellations are posted to (skipped when unset)
Whether to log SQL queries made via Kysely to console. Possible values: trunc, full or none (default: none)
Default"none"
Valuesnonetruncfull
Examplenone
Defaultrequired in production, "seaweedfs-user" elsewhere
Exampleseaweedfs-user
Defaultrequired in production, "sendou" elsewhere
Examplesendou
Defaultrequired in production, "http://127.0.0.1:9000" elsewhere
Examplehttp://127.0.0.1:9000
Defaultrequired in production, "us-east-1" elsewhere
Exampleus-east-1
Defaultrequired in production, "seaweedfs-password" elsewhere
Exampleseaweedfs-password
Twitch integration for fetching streams
Twitch integration for fetching streams
Push notification. Generate values here https://vapidkeys.com/
Push notification. Generate values here https://vapidkeys.com/
the client-readable public key (VITE_VAPID_PUBLIC_KEY) lives in ~/config; webPush.server.ts checks all three are set together
YouTube Data API key for fetching streams and resolving YouTube cast channels
Client
VITE_* variables, built into the client bundle by Vite so never secrets. Validated by the schema of app/config.ts and read through Config.
VITE_FUSE_ENABLED
booleannot in .env.exampleconfig.tsIf true uses real seasons & league data. Used when developing with the production database
Default"false"
Examplefalse
ConfigConfig.prodMode Use real seasons & league data (when developing against the production database). VITE_SHOW_BANNER_FOR_SEASON
not in .env.exampleconfig.tsDefault"false"
Examplefalse
Defaultrequired in production, "http://localhost:5173" elsewhere
Examplehttp://localhost:5173
Base URL for static assets (images, sounds, svg)
Default"https://sendou-assets.nyc3.cdn.digitaloceanspaces.com"
Examplehttps://sendou-assets.nyc3.cdn.digitaloceanspaces.com
VITE_TOURNAMENT_DEFAULT_LOGO
required in production.env.exampleDefaultrequired in production, "tournament-logo-default.avif" elsewhere
Exampletournament-logo-default.avif
Push notification. Generate values here https://vapidkeys.com/
the server-only private key and email live in ~/config.server; webPush.server.ts checks all three are set together
Scripts & build config
Listed in .env.example but read only outside the app: by scripts of scripts/ and the root config files.
Where the downloaded production snapshots are archived (default: ../backups)
Admin only: SSH target of the production service, used by pnpm run download-prod-db Found in Render Dashboard -> the service -> SSH e.g. srv-xxxxxxxx@ssh.frankfurt.render.com
Admin only: used by pnpm run deploy:prod. API key from Render Dashboard -> Account Settings -> API Keys, service id from the service's URL in the dashboard e.g. srv-xxxxxxxx
Admin only: used by pnpm run deploy:prod. API key from Render Dashboard -> Account Settings -> API Keys, service id from the service's URL in the dashboard e.g. srv-xxxxxxxx
Not in .env.example nor the config schemas: set by CI, package scripts or by hand to tweak a tool.
which render variant the signatures are built from