Skip to content

Environment variables

This page is for self-hosters and operators. On the managed cloud these are already set for you; you only need them if you’re running the backend yourself.

The backend reads configuration from environment variables (or a .env file) via backend/app/config/settings.py — the source of truth. Each variable below is the uppercased form of a settings field.

VariablePurposeDefault
ENVIRONMENTdevelopment or production. Production enables strict checks.development
DEBUGVerbose error output. Turn off in production.true
RATE_LIMIT_ENABLEDPer-IP rate limits on auth endpoints. Set true in production.false
TRIAL_DAYSReverse trial: new workspaces start on Pro for this many days, then drop to Free. 0 disables trials.14
EXECUTION_MODEplaywright (real) or simulate (fake, for dev).playwright
MAX_RUN_SECONDSWall-clock ceiling per run; kills runaway runs. 0 = off.1800
MAX_CONCURRENT_BROWSERSMax live browsers per worker process; excess runs wait for a permit instead of risking out-of-memory. Size to instance RAM.8
FRONTEND_URLBase URL of the web app; used in email links and OAuth redirects.http://localhost:5173
CORS_ORIGINSComma-separated allowed origins. Never * in production.localhost dev origins
VariablePurposeDefault
STORAGE_MODEmemory (ephemeral dev) or database (Postgres). Production uses database.memory
DATABASE_URLAsync Postgres URL (postgresql+asyncpg://…).local Postgres
DATABASE_URL_SYNCSync Postgres URL (postgresql://…) for the scheduler jobstore.local Postgres
DATABASE_POOL_SIZESQLAlchemy pool size.5
DATABASE_MAX_OVERFLOWExtra connections beyond the pool.10
DATABASE_ECHOLog every SQL statement.false
VariablePurposeDefault
REDIS_URLEnables shared state, cross-worker WebSocket broadcast, and the run watchdog. Empty = single-worker mode.
WEB_CONCURRENCYNumber of web-server worker processes.server default

Each AI task picks a provider + model independently. Set the key for any provider you use.

VariablePurposeDefault
OPENAI_API_KEYOpenAI key (platform default for visual comparison).
ANTHROPIC_API_KEYAnthropic key.
GROQ_API_KEYGroq key.
GEMINI_API_KEYGoogle Gemini key (platform default for parsing + translation).
OLLAMA_BASE_URLOllama server URL (local models).http://ollama:11434
OLLAMA_MODELDefault Ollama model.qwen3:8b
PARSING_PROVIDER / PARSING_MODELProvider + model for English → steps.gemini / gemini-3.1-flash-lite
TRANSLATION_PROVIDER / TRANSLATION_MODELProvider + model for non-English → English.gemini / gemini-3.1-flash-lite
VISUAL_COMPARISON_PROVIDER / VISUAL_COMPARISON_MODELProvider + model for visual diffs.openai / gpt-4o-mini
OPENAI_MODELDefault OpenAI model.gpt-4o-mini
VISUAL_PIXEL_THRESHOLDPixel-diff fraction below which a visual step passes without a vision call.0.005
BYOK_ENCRYPTION_KEYFernet key that enables per-user BYOK. Empty = BYOK disabled (routes return 503).

See BYOK for what BYOK_ENCRYPTION_KEY unlocks.

VariablePurposeDefault
JWT_SECRET_KEYSigns access tokens. Must change in production.dev default (rejected in prod)
SESSION_SECRET_KEYSigns sessions. Must change in production.dev default (rejected in prod)
JWT_ALGORITHMJWT signing algorithm.HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTESAccess-token lifetime.30
JWT_REFRESH_TOKEN_EXPIRE_DAYSRefresh-token lifetime.7
AUTH_PROVIDERAuth backend.local
EMAIL_VERIFICATION_EXPIRE_MINUTESVerification-link lifetime.15
PASSWORD_RESET_EXPIRE_MINUTESPassword-reset-link lifetime.30
VariablePurpose
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle sign-in. Both required to enable it.
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETGitHub sign-in. Both required to enable it.

Configure either SMTP or Resend. Email powers verification, invites, and run-report notifications.

VariablePurposeDefault
RESEND_API_KEYUse Resend’s HTTP API for sending.
SMTP_HOST / SMTP_PORTSMTP server.localhost / 1025
SMTP_USERNAME / SMTP_PASSWORDSMTP auth.
SMTP_TLS / SMTP_SSLSMTP transport security.false / false
EMAIL_FROM_ADDRESS / EMAIL_FROM_NAMESender identity.noreply@marriska.dev / Marriska
VariablePurposeDefault
PAYMENT_PROVIDERdev (self-confirm bypass, rejected in production), stripe, or paddle.dev
STRIPE_SECRET_KEY / STRIPE_WEBHOOK_SECRETStripe credentials (both needed for Stripe).
PADDLE_API_KEY / PADDLE_WEBHOOK_SECRETPaddle credentials.
PADDLE_ENVIRONMENTsandbox or production.sandbox
PADDLE_PRICE_<TIER>_<CYCLE>Paddle price IDs, e.g. PADDLE_PRICE_PRO_MONTHLY.
VariablePurpose
SENTRY_DSNEnables Sentry error reporting (production).

The marriska-runner and marriska-agent CLIs read their own variables — MARRISKA_API_KEY, MARRISKA_API_URL, MARRISKA_WS_URL. They’re documented in the CLI reference.