MediaGrabber Pro
Reference

Environment Variables

Every environment variable, grouped by feature. Secrets live here — never in config files or version control.

Copy .env.example to .env.local and fill in what you need. Only the variables for the features you enable are required; analytics and monitoring stay off until their keys are present.

Core

VariableRequiredDescription
DATABASE_URLYesPostgres connection string
BETTER_AUTH_SECRETYesAuth signing secret (openssl rand -base64 32)
BETTER_AUTH_URLYesWeb app origin serving auth routes
WEB_URLYesPublic web app URL
API_URLYesPublic API origin
NEXT_PUBLIC_API_URLYesAPI URL exposed to the browser
PLUGIN_SLUGYesPlugin identifier (matches the Admin Module)

Auth

VariableDescription
AUTH_MAGIC_LINK / AUTH_PASSKEYS / AUTH_TWO_FACTORFeature toggles (default on)
AUTH_REQUIRE_EMAIL_VERIFICATIONRequire verified email before access
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle social login
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETGitHub social login

Billing

LemonSqueezy is the default; only the selected provider's vars are required.

VariableDescription
LEMONSQUEEZY_API_KEYAPI key
LEMONSQUEEZY_STORE_IDStore id
LEMONSQUEEZY_WEBHOOK_SECRETWebhook signing secret

Webhook URL to register: POST {API_URL}/webhooks/billing.

Email (fallback chain)

The chain is resend → nodemailer → plunk → maileroo → mailgun. Configure the providers you want; with none set, emails log to the console in dev.

VariableProvider
EMAIL_FROMDefault sender (all providers)
RESEND_API_KEYResend (primary)
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASSNodemailer SMTP
PLUNK_API_KEYPlunk
MAILEROO_API_KEYMaileroo
MAILGUN_API_KEY / MAILGUN_DOMAIN / MAILGUN_BASE_URLMailgun
EMAIL_RETRY_ATTEMPTS / EMAIL_RETRY_BASE_MSPer-provider retry/backoff

Storage (S3-compatible)

Off until STORAGE_ACCESS_KEY_ID + STORAGE_BUCKET are set.

VariableDescription
STORAGE_PROVIDERr2 / s3 / minio (informational)
STORAGE_BUCKETBucket name
STORAGE_ACCESS_KEY_ID / STORAGE_SECRET_ACCESS_KEYCredentials
STORAGE_REGIONauto for R2; a region for S3
STORAGE_ENDPOINTCustom endpoint (R2/MinIO)
STORAGE_PUBLIC_URLPublic base URL for objects
STORAGE_MAX_UPLOAD_BYTES / STORAGE_PRESIGN_TTLUpload guards

Analytics (GA4)

Off unless a measurement id is set. Privacy-first and consent-aware.

VariableDescription
NEXT_PUBLIC_GA_MEASUREMENT_IDGA4 id (G-XXXXXXXXXX)
NEXT_PUBLIC_ANALYTICS_ENABLEDMaster switch (default on when id present)
NEXT_PUBLIC_ANALYTICS_REQUIRE_CONSENTRequire cookie consent (default true)

Monitoring (Sentry)

Off unless a DSN is set.

VariableDescription
SENTRY_DSNServer DSN
NEXT_PUBLIC_SENTRY_DSNBrowser DSN
SENTRY_ENABLEDMaster switch (default on when DSN present)
SENTRY_TRACES_SAMPLE_RATEPerformance sampling (0.0–1.0)
SENTRY_AUTH_TOKEN / SENTRY_ORG / SENTRY_PROJECTSource-map upload (optional)

Background jobs

VariableDescription
QSTASH_TOKENQStash publish token
QSTASH_CURRENT_SIGNING_KEY / QSTASH_NEXT_SIGNING_KEYInbound signature verification
TRIGGER_SECRET_KEYTrigger.dev (optional runner)

Admin connector

VariableDescription
CONNECTOR_SECRETShared service token (openssl rand -base64 48)
ADMIN_CONNECTOR_URLAdmin Module connector endpoint

Plugin public surface

VariableDescription
PLUGIN_PUBLIC_API_KEYPublishable key shipped inside the plugin
PUBLIC_RATE_LIMIT_WINDOW_MS / PUBLIC_RATE_LIMIT_MAXPublic surface rate limits

Keep every secret in the environment — never commit .env.local or hardcode values in packages/config.

On this page

Environment Variables | MediaGrabber Pro