Skip to content

Configuration ​

Overslash is configured exclusively through environment variables. Three are required to boot — DATABASE_URL, SECRETS_ENCRYPTION_KEY, and SIGNING_KEY; everything else (OAuth providers, billing, email, log level) is optional and degrades gracefully when omitted. The canonical list lives in .env.example in the source repo and in Reference → Configuration.

Configuration is read once at startup by Config::from_env(). Missing required variables — and missing dependencies of an enabled feature — cause the process to exit immediately with an error (validate_env), so a misconfigured deploy fails fast rather than booting half-broken.

Required variables ​

These three must be set or the server will not start.

VariableNotes
DATABASE_URLPostgreSQL connection string, e.g. postgres://user:pass@host:5432/overslash. See Database.
SECRETS_ENCRYPTION_KEY64-character hex (32 bytes). Master key that AES-256-GCM-encrypts every secret in the vault. Generate with openssl rand -hex 32. See Keys & Rotation.
SIGNING_KEY64-character hex (32 bytes). Signs OAuth and session tokens. Generate with openssl rand -hex 32.

Conditionally required ​

These become required only when you enable the feature they belong to. Enabling the feature without them trips validate_env and the server exits at startup.

VariableRequired whenNotes
STRIPE_SECRET_KEYCLOUD_BILLING=trueStripe API secret key.
STRIPE_WEBHOOK_SECRETCLOUD_BILLING=trueVerifies inbound Stripe webhooks.
EMAIL_API_KEYEMAIL_PROVIDER is setProvider API key (e.g. Resend).
EMAIL_FROMEMAIL_PROVIDER is setSender address.

Optional variables ​

All optional variables have safe defaults. They are grouped by concern below.

Networking & URLs ​

VariableDefaultNotes
HOST0.0.0.0Bind address.
PORT8080 (serve) / fallback for webListen port. overslash web resolves --port → OVERSLASH_WEB_PORT → PORT → 7171.
PUBLIC_URLderived from HOST/PORTExternal base URL; set this behind a proxy so OAuth redirects resolve.
DASHBOARD_ORIGIN*localhost*Allowed dashboard origin(s) for CORS. Set explicitly in production.
DASHBOARD_URL/Where the API redirects to reach the dashboard.
APP_HOST_SUFFIX—Apex for the dashboard subdomain, e.g. app.overslash.com.
API_HOST_SUFFIX—Apex for the programmatic surface, e.g. api.overslash.com.
SESSION_COOKIE_DOMAIN—e.g. .overslash.com to share sessions across subdomains.
MCP_EXTRA_ORIGINS—Comma-separated extra origins allowed on /mcp + OAuth endpoints.

Authentication & org control ​

VariableDefaultNotes
GOOGLE_AUTH_CLIENT_ID / GOOGLE_AUTH_CLIENT_SECRET—Shared Google OAuth app for Overslash-managed sign-in. Leave unset to require each org to register its own.
GITHUB_AUTH_CLIENT_ID / GITHUB_AUTH_CLIENT_SECRET—Same, for GitHub.
DEV_AUTHunsetWhen set, enables /auth/dev/token (a dev login). Leave unset in production.
ALLOW_ORG_CREATIONtrueSet false to lock down org creation after initial setup.
SINGLE_ORG_MODE—When set to an org slug, scopes all requests to that org.

Limits & timeouts ​

VariableDefaultNotes
APPROVAL_EXPIRY_SECS1800How long a pending approval stays open.
EXECUTION_PENDING_TTL_SECS900TTL for a pending execution awaiting approval.
EXECUTION_REPLAY_TIMEOUT_SECS30Replay window for a resumed execution.
DEFAULT_RATE_LIMIT1000Requests per window (default scope).
DEFAULT_RATE_WINDOW_SECS60Rate-limit window length.
MAX_RESPONSE_BODY_BYTES5242880Max upstream response body (5 MB).
FILTER_TIMEOUT_MS2000Response-filter evaluation timeout.

Billing (Stripe) ​

VariableDefaultNotes
CLOUD_BILLINGfalseSet true to enable Stripe billing (then the Stripe secrets above are required).
STRIPE_EUR_LOOKUP_KEYoverslash_seat_eurStripe Price lookup key (EUR).
STRIPE_USD_LOOKUP_KEYoverslash_seat_usdStripe Price lookup key (USD).

Transactional email ​

VariableDefaultNotes
EMAIL_PROVIDER—Currently resend. Unset = no-op mailer (boots cleanly).
EMAIL_FROM—Sender address (required when EMAIL_PROVIDER set).
EMAIL_REPLY_TO—Reply-to; falls back to the provider default.

Infrastructure & keys ​

VariableDefaultNotes
REDIS_URL—Valkey/Redis for caching and pub-sub. Recommended with multiple replicas.
SECRETS_ENCRYPTION_KEY_PREVIOUS—Previous master key, decrypt-only, set during a key rotation. See Keys & Rotation.
SECRETS_ENCRYPTION_KEY_ACTIVE_ID1Version byte stamped on new ciphertext. Bump on every rotation.
SECRETS_ENCRYPTION_KEY_PREVIOUS_IDactive_id − 1Version byte of the previous key.
OVERSLA_SH_BASE_URL / OVERSLA_SH_API_KEY—Base URL and key for the short-link service.

Logging ​

VariableDefaultNotes
RUST_LOGinfoLog level / filter, e.g. info or info,overslash_metrics=debug. See Monitoring.
OVERSLASH_ENV—Deployment marker (e.g. dev, prod) surfaced in logs/tooling.

Deprecated & internal-only ​

There are no formally deprecated variables today.

A handful of variables exist only for testing or as escape hatches and must not be set in production: OVERSLASH_DANGER_READ_AUTH_SECRET_FROM_ENVVARS, OVERSLASH_SSRF_ALLOW_PRIVATE, OVERSLASH_SERVICE_BASE_OVERRIDES, and PREVIEW_ORIGIN_ALLOWLIST. They relax safety checks (SSRF protection, OAuth origin allowlisting) and are intended for local development and CI only.

Profiles for multiple environments ​

Overslash reads .env automatically if present, so the simplest pattern is one .env file per environment, built from the template:

bash
cp .env.example .env
# edit DATABASE_URL, SECRETS_ENCRYPTION_KEY, SIGNING_KEY, …

For deployed environments, inject variables through your platform's secret store (Secret Manager, Kubernetes Secret, Compose .env) rather than committing them. Set OVERSLASH_ENV (e.g. dev, prod) to mark the deployment in logs and tooling.

Pre-release software — subject to change without notice.