Reference

Environment variables

Every env var across the API, workers, Discord bot, Credentials Helper, overlay, and wiki.

rustplus-api

Runtime

VarDefaultNotes
NODE_ENVdevelopmentproduction flips cookie secure and disables debug routes.
PORT3000Fastify listen port.
LOG_LEVELinfodebug for verbose, warn in production if you want it quiet.

URLs

VarRequiredNotes
PUBLIC_URLyesThe public URL of the API. Steam's OpenID callback must hit this URL.
FRONTEND_URLyesWhere to redirect after login/checkout. Also CORS-allowed origin.
ADMIN_ORIGINoptionalLocal admin port. Added to CORS allowlist + Steam-OpenID ?return=.

Database & session

VarRequiredNotes
DATABASE_URLyesPostgres connection string.
SESSION_SECRETyes32-byte hex; generate with openssl rand -hex 32.
SESSION_SALTyes16-char string.
CREDS_ENCRYPTION_KEYyes32-byte hex; AES-256-GCM key for FCM credentials.
CREDS_ENCRYPTION_KEY_PREVnoPrevious key during a rotation; allows decrypt with old, re-encrypt with new.

Stripe

VarRequiredNotes
STRIPE_SECRET_KEYyessk_test_* for dev, sk_live_* in prod.
STRIPE_WEBHOOK_SECRETyeswhsec_*. From the Stripe CLI (dev) or Dashboard webhook (prod).
STRIPE_PRICE_SCOUTyesprice_*.
STRIPE_PRICE_OPERATORyesprice_*.
STRIPE_PRICE_OVERLORDyesprice_*.

External APIs

VarRequiredNotes
STEAM_WEB_API_KEYoptionalProfile enrichment + vanity URL resolution.
BATTLEMETRICS_TOKENoptionalRequired for !alias and !track.
LIBRETRANSLATE_URLoptionalRequired for !translate. Blank → command returns not configured.
LIBRETRANSLATE_API_KEYoptionalOnly needed for hosted libretranslate.com.
GROQ_API_KEYoptionalRequired for !pulse. Free tier @ console.groq.com.
GROQ_MODELllama-3.1-8b-instantOverride to llama-3.3-70b-versatile for slower/smarter.
GROQ_BASE_URLhttps://api.groq.com/openai/v1Only override for proxies / OpenAI-compatible alternatives.

Discord (per-user OAuth)

VarRequiredNotes
DISCORD_CLIENT_IDyesFrom the Discord developer portal.
DISCORD_CLIENT_SECRETyesFrom the Discord developer portal.
DISCORD_BOT_TOKENyesThe bot's token.
DISCORD_PUBLIC_KEYyesFor interaction signature verification.

Web push

VarRequiredNotes
VAPID_PUBLIC_KEYyesGenerate with npm run vapid:generate.
VAPID_PRIVATE_KEYyesPair to the public key.
VAPID_CONTACTyesmailto:support@rustpulse.app.

Admin

VarRequiredNotes
ADMIN_STEAM_IDSoptionalComma-separated Steam64s. Empty → admin disabled.

Discord support bot

VarRequiredNotes
DISCORD_BOT_TOKENyesThe support-bot token (different from the user-facing OAuth bot).
DISCORD_CLIENT_IDyes
DISCORD_GUILD_IDyesSingle-guild bot.
RUSTPULSE_API_BASEhttp://localhost:3000Where to fetch FAQ from.
RUSTPULSE_API_TOKENoptionalIf your FAQ endpoint is gated.
DISCORD_VANITY_INVITEhttps://discord.com/invite/rustpulseShown in branded embeds.
STATUS_WEBSITE_URLoptionalStatus board website probe.
STATUS_API_BASEoptionalStatus board API + DB probe.
STATUS_RELAY_BASEoptionalStatus board relay probe.

Credentials Helper

VarRequiredNotes
RUSTPLUS_API_BASEhttps://api.rustpulse.appOverride for local dev.

Wiki (this site)

VarRequiredNotes
NEXT_PUBLIC_SITE_URLoptionalUsed for canonical URLs / OpenGraph. Defaults to https://wiki.rustpulse.app.