Skip to content

Environment Variables

All configuration options for the InlineCMS API.

VariableDescription
DATABASE_URLPostgreSQL connection string (e.g., postgresql://user:pass@host:5432/dbname)
JWT_SECRETSecret for JWT signing. Minimum 32 characters. Generate with: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
VariableDefaultDescription
NODE_ENVdevelopmentSet to production for production deployments
PORT3001API server port
JWT_EXPIRES_IN7dJWT token expiration duration
IS_SELF_HOSTEDfalseSet to true for self-hosted instances

Optional. When a provider’s id and secret are both set, a “Continue with …” button appears on the dashboard login page. Sign-in links to an existing account by verified email — it never creates one. See the full walkthrough in OAuth Sign-In.

VariableDescription
PUBLIC_URLBase URL of this install as the browser sees it (e.g. https://cms.example.com). Used to build OAuth redirect URIs and the post-login redirect. Required when any OAuth provider is configured. In local dev, set it to the dashboard origin (http://localhost:3002). Falls back to the request origin if unset.
GOOGLE_OAUTH_CLIENT_IDGoogle OAuth 2.0 client ID
GOOGLE_OAUTH_CLIENT_SECRETGoogle OAuth 2.0 client secret
GITHUB_OAUTH_CLIENT_IDGitHub OAuth app client ID
GITHUB_OAUTH_CLIENT_SECRETGitHub OAuth app client secret

SSO (SAML/OIDC single sign-on) is a feature of InlineCMS Cloud and is not part of the self-hosted build.

Optional links shown in the login page footer. Omit either to hide that link.

VariableDescription
LEGAL_PRIVACY_URLURL for the footer’s “Privacy” link
LEGAL_TERMS_URLURL for the footer’s “Terms” link
VariableDescription
CDN_INVALIDATION_URLWebhook URL that InlineCMS POSTs to after every publish
CDN_INVALIDATION_SECRETSecret sent with purge requests for authentication
VariableDefaultDescription
INLINECMS_BAKEonServer-wide bake kill-switch. Set to off (or false/0) and GET /v1/snapshot reports bakeEnabled: false, forcing every build into safe (no-bake) mode — even builds you can’t redeploy.
DEPLOY_TRIGGER_DEBOUNCE_MS4000Window (ms) over which a burst of publishes coalesces into a single deploy trigger.

Deploy hooks themselves are configured per project (not via env) — see Build-Time Hydration → deploy triggers. The same INLINECMS_BAKE switch also works locally in a build environment to disable baking for one build.

For production media uploads, configure S3-compatible storage:

VariableDescription
S3_BUCKETBucket name
S3_REGIONAWS region or auto for Cloudflare R2
S3_ACCESS_KEY_IDAccess key
S3_SECRET_ACCESS_KEYSecret key
S3_ENDPOINTCustom endpoint URL (for R2 or MinIO)

When S3 variables are not set, media uploads are stored locally in the uploads/ directory.

Was this page helpful? Your feedback goes straight to the docs team.