Skip to content

Environment Variables

This reference is for operators looking up common environment variables.

This page lists the most common core and provider variables. Use Environment Variables for required values, defaults, file-backed configuration, legacy aliases, and complete deployment notes.

OpenPost Image Editor

VariableDefaultPurpose
OPENPOST_IMAGE_EDITOR_ENABLEDtrueEnable the OpenPost Image Editor UI and API. Disabling it leaves the Media library operational.
OPENPOST_IMAGE_EDITOR_MODEL_BASE_URL/image-editor-modelsServe the pinned background-removal model and runtime from another operator-controlled base URL.

Automatic image alt text

VariableDefaultPurpose
OPENROUTER_API_KEYemptyServer-only OpenRouter key that enables automatic alt text for images without saved alt text; supports _FILE.
OPENPOST_IMAGE_CAPTION_MODELopenai/gpt-5.6-lunaModel used with a 400px JPEG thumbnail and up to 1,000 characters of relevant post or thread segment text.
OPENPOST_IMAGE_CAPTION_PROVIDERemptyOptional exact OpenRouter provider slug allowed for automatic image alt text.
OPENPOST_IMAGE_CAPTION_REQUIRE_ZDRfalseRequire a zero-data-retention endpoint for automatic image alt text.

Meme generator

VariableDefaultPurpose
OPENPOST_MEME_GENERATOR_ENABLEDfalseEnable authenticated Memegen template search, previews, rendering, and saved generation recipes.
OPENPOST_MEMEGEN_URLhttps://api.memegen.linkHosted or operator-controlled Memegen API base URL.
OPENPOST_MEMEGEN_API_KEYemptyOptional server-only Memegen key; supports _FILE.
OPENPOST_MEME_GENERATION_MODELopenai/gpt-5.6-lunaOpenRouter model used only for optional template and caption suggestions.

OpenPost Video Editor and stock media

VariableDefaultPurpose
OPENPOST_VIDEO_MODEL_BASE_URL/video-editor-modelsServe the pinned local transcription and voice-detection files from another operator base URL.
OPENPOST_STOCK_MEDIA_ENABLEDfalseEnable the public, rate-limited stock search API for providers with configured server keys.
OPENPOST_PEXELS_API_KEYemptyServer-only Pexels photo and video API key.
OPENPOST_UNSPLASH_ACCESS_KEYemptyServer-only Unsplash photo API access key.
OPENPOST_PIXABAY_API_KEYemptyServer-only Pixabay image and video API key.

User feedback

VariableDefaultPurpose
OPENPOST_FEEDBACK_ENABLEDfalseEnable the authenticated report form when the destination and recipient are also configured.
OPENPOST_FEEDBACK_DESTINATION_URLemptyServer-only HTTPS Discord-compatible webhook.
OPENPOST_FEEDBACK_RECIPIENTemptyRecipient name disclosed in the form before send.
OPENPOST_FEEDBACK_SUPPORT_URLOpenPost GitHub new-issue URLSupport link shown when delivery is not configured.

Operations

VariableDefaultPurpose
OPENPOST_UPDATE_CHECK_ENABLEDtrueEnable read-only stable release checks for self-hosted instance admins.
OPENPOST_X_MONTHLY_BUDGET_MICROUSD5000000Cloud-only per-workspace X request safety limit in millionths of a US dollar.
OPENPOST_X_POST_CREATE_COST_MICROUSD15000Estimated X post-create cost without a URL, in millionths of a US dollar.
OPENPOST_X_POST_CREATE_WITH_URL_COST_MICROUSD200000Estimated X post-create cost with a URL, in millionths of a US dollar.
OPENPOST_PROVIDER_USAGE_RETENTION_DAYS180Immutable provider-cost event retention; the current month is never pruned.

Most variables loaded through the main backend config loader can also be loaded from <VARIABLE>_FILE; direct env values win over file-backed values. Instance admins can manage the optional account, email, authentication, OpenPost Image Editor, feedback, and provider behavior values from Settings → Instance → Configuration. An encrypted admin override takes precedence over those environment values after restart, and the screen keeps the environment source visible as the fallback. Provider apps use a separate environment-first merge path. Legacy aliases support the same suffix, for example DATABASE_URL_FILE, JWT_SECRET_FILE, and ENCRYPTION_KEY_FILE. Adapter-only variables read directly by provider code, such as META_GRAPH_API_VERSION, do not currently support _FILE variants.

VariablePurpose
OPENPOST_PORTBackend port
OPENPOST_EDITIONProduct edition: selfhost or cloud
OPENPOST_DATABASE_DRIVERDatabase driver: sqlite or postgres
OPENPOST_DATABASE_PATHSQLite path or DSN
OPENPOST_DATABASE_URLPostgres URL when using the Postgres driver
OPENPOST_APP_URLPublic frontend URL
OPENPOST_PUBLIC_URLCanonical browser origin used for WebAuthn/passkeys
OPENPOST_EXTRA_CORS_ORIGINSExtra CORS allowlist
OPENPOST_DISABLE_REGISTRATIONSDisable new signups after bootstrap
OPENPOST_PUBLIC_PROFILES_ENABLEDEnable opt-in public profiles and their public routes
OPENPOST_EMAIL_VERIFICATION_REQUIREDRequire six-digit email confirmation before email-and-password signup completes
OPENPOST_EMAIL_PROVIDERMail transport: smtp, resend, or cloudflare
OPENPOST_EMAIL_FROMVerified sender for confirmation and password-reset mail
OPENPOST_RESEND_API_KEYResend API key
OPENPOST_CLOUDFLARE_EMAIL_ACCOUNT_IDCloudflare account ID for Email Service
OPENPOST_CLOUDFLARE_EMAIL_API_TOKENCloudflare Email Service API token
OPENPOST_EMAIL_DELIVERY_WEBHOOK_SECRETHMAC secret for authenticated invitation delivery callbacks
OPENPOST_FEEDBACK_ENABLEDEnable the configured authenticated feedback form
OPENPOST_FEEDBACK_DESTINATION_URLServer-only Discord-compatible webhook
OPENPOST_FEEDBACK_RECIPIENTRecipient label disclosed to users
OPENPOST_FEEDBACK_SUPPORT_URLFallback support URL
OPENPOST_UPDATE_CHECK_ENABLEDEnable read-only stable release checks for self-hosted instance admins
OPENROUTER_API_KEYEnable server-side automatic image alt text; supports _FILE
OPENPOST_IMAGE_CAPTION_MODELOpenRouter model ID for automatic image alt text
OPENPOST_IMAGE_CAPTION_PROVIDERExact OpenRouter provider slug allowed for automatic image alt text
OPENPOST_IMAGE_CAPTION_REQUIRE_ZDRRequire a zero-data-retention endpoint for automatic image alt text
OPENPOST_MEME_GENERATOR_ENABLEDEnable authenticated Memegen template and rendering APIs
OPENPOST_MEMEGEN_URLHosted or self-hosted Memegen API base URL
OPENPOST_MEMEGEN_API_KEYOptional server-only Memegen API key; supports _FILE
OPENPOST_MEME_GENERATION_MODELOpenRouter model ID for optional meme suggestions
OPENPOST_JWT_SECRETJWT signing secret
OPENPOST_ENCRYPTION_KEYOAuth token encryption secret
OPENPOST_AUTH_GOOGLE_CLIENT_IDGoogle OAuth client ID for first-party sign-in and linking
OPENPOST_AUTH_GOOGLE_CLIENT_SECRETGoogle OAuth client secret; supports _FILE
OPENPOST_OIDC_ISSUERExact issuer for the optional instance-wide OIDC provider
OPENPOST_OIDC_CLIENT_IDClient ID for the instance-wide OIDC provider
OPENPOST_OIDC_CLIENT_SECRETClient secret for the instance-wide OIDC provider; supports _FILE
OPENPOST_OIDC_NAMELogin label for the instance-wide OIDC provider
OPENPOST_OIDC_SCOPESSpace- or comma-separated OIDC scopes; openid is always included
OPENPOST_OIDC_JIT_ENABLEDCreate a user on first verified provider login
OPENPOST_OIDC_BOOTSTRAP_ALLOWLISTExact issuer-and-subject pairs or emails allowed to become instance admin through JIT
OPENPOST_SSO_BREAK_GLASS_EMAILSExisting MFA-protected instance admins allowed through required SSO during an IdP outage
OPENPOST_OIDC_NATIVE_CALLBACK_URLNative one-time handoff link; defaults to openpost://oidc/callback
OPENPOST_STORAGE_DRIVERMedia storage driver: local or s3
OPENPOST_MEDIA_PATHLocal media directory
OPENPOST_MEDIA_URLPublic media base URL
OPENPOST_S3_ENDPOINTS3-compatible endpoint for R2 or non-AWS storage
OPENPOST_S3_REGIONS3 region
OPENPOST_S3_BUCKETS3 bucket
OPENPOST_S3_ACCESS_KEY_IDS3 access key ID
OPENPOST_S3_SECRET_ACCESS_KEYS3 secret access key
OPENPOST_S3_PUBLIC_BASE_URLPublic media base URL for S3-backed media
OPENPOST_S3_FORCE_PATH_STYLEForce path-style S3 addressing
OPENPOST_PADDLE_API_KEYServer-only Paddle API key
OPENPOST_PADDLE_ENVIRONMENTExplicit Paddle environment: sandbox or production
OPENPOST_PADDLE_CLIENT_TOKENBrowser-safe Paddle.js client token
OPENPOST_PADDLE_WEBHOOK_SECRETPaddle webhook verification secret
OPENPOST_PADDLE_CHECKOUT_RETURN_URLOpenPost return URL after checkout
OPENPOST_PADDLE_STARTER_MONTHLY_PRICE_IDPaddle Starter monthly price ID
OPENPOST_PADDLE_STARTER_ANNUAL_PRICE_IDPaddle Starter annual price ID
OPENPOST_PADDLE_FOUNDER_MONTHLY_PRICE_IDPaddle Founder monthly price ID
OPENPOST_PADDLE_FOUNDER_ANNUAL_PRICE_IDPaddle Founder annual price ID
OPENPOST_PADDLE_PRO_MONTHLY_PRICE_IDPaddle Pro monthly price ID
OPENPOST_PADDLE_PRO_ANNUAL_PRICE_IDPaddle Pro annual price ID
OPENPOST_PADDLE_TEAM_MONTHLY_PRICE_IDPaddle Team monthly price ID
OPENPOST_PADDLE_TEAM_ANNUAL_PRICE_IDPaddle Team annual price ID
OPENPOST_PADDLE_AGENCY_MONTHLY_PRICE_IDPaddle Agency monthly price ID
OPENPOST_PADDLE_AGENCY_ANNUAL_PRICE_IDPaddle Agency annual price ID
OPENPOST_X_MONTHLY_BUDGET_MICROUSDCloud-only per-workspace X provider-cost safety limit
OPENPOST_X_POST_CREATE_COST_MICROUSDEstimated X post-create price without a URL
OPENPOST_X_POST_CREATE_WITH_URL_COST_MICROUSDEstimated X post-create price with a URL
OPENPOST_PROVIDER_USAGE_RETENTION_DAYSImmutable provider-cost event retention
OPENPOST_PROVIDER_APPSStructured provider app registry JSON; entries override matching encrypted database rows
OPENPOST_DISABLED_PROVIDERSEmergency provider deny-list; overrides readiness-ledger controls after restart
OPENPOST_PROVIDER_CERTIFICATION_ENFORCEDCloud-only strict provider evidence gate; defaults to false
X_CLIENT_IDX client ID
X_CLIENT_SECRETX client secret
X_REDIRECT_URIX callback override
MASTODON_REDIRECT_URIMastodon callback override
MASTODON_SERVERSMastodon server JSON
LINKEDIN_CLIENT_IDLinkedIn client ID
LINKEDIN_CLIENT_SECRETLinkedIn client secret
LINKEDIN_REDIRECT_URILinkedIn callback override
OPENPOST_DISABLE_LINKEDIN_THREAD_REPLIESDisable LinkedIn thread replies; legacy LINKEDIN_DISABLE_THREAD_REPLIES remains supported
OPENPOST_LINKEDIN_ORGANIZATIONS_ENABLEDRequest approved LinkedIn organization permissions and offer administered Pages during connection
LINKEDIN_API_VERSIONOptional LinkedIn REST API version override; direct adapter variable without _FILE support
THREADS_CLIENT_IDThreads client ID
THREADS_CLIENT_SECRETThreads client secret
THREADS_REDIRECT_URIThreads callback override
META_GRAPH_API_VERSIONMeta Graph API version for Facebook Pages and Instagram

Facebook, Instagram, TikTok, and YouTube are configured through the provider app registry with providers facebook, instagram, tiktok, and youtube; no legacy env vars are required.

Legacy aliases still work for upgrades: DATABASE_URL, OPENPOST_DB_PATH, OPENPOST_FRONTEND_URL, OPENPOST_CORS_EXTRA_ORIGINS, JWT_SECRET, ENCRYPTION_KEY, TWITTER_CLIENT_ID, TWITTER_CLIENT_SECRET, TWITTER_REDIRECT_URI, and LINKEDIN_DISABLE_THREAD_REPLIES.

Open source under AGPL-3.0-only.