Skip to content

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_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.