Skip to main content
Postiz is configured entirely through environment variables. Any change requires an application restart. The canonical list lives in the example postiz.env file. This page documents every variable Postiz reads, grouped by purpose.
Variables marked Required are validated on boot: Postiz will fail to start if they’re missing or malformed.

Required core

These six variables are non-optional for any deployment.

DATABASE_URL Required

PostgreSQL connection string used by Prisma.

REDIS_URL Required

Redis connection string used for queues, rate limiting, and short-lived caches.

JWT_SECRET Required

A long random string used to sign session JWTs. Rotating this invalidates every existing session.

FRONTEND_URL Required

The URL the browser uses to reach the Postiz frontend. Used as the OAuth redirect base and for email links.

NEXT_PUBLIC_BACKEND_URL Required

The URL the browser uses to reach the Postiz backend.

BACKEND_INTERNAL_URL Required

The URL the frontend SSR server uses to reach the backend from inside your network. If everything runs in the same container/host, this is usually http://localhost:3000.

Application behaviour

DISABLE_REGISTRATION

Set to true to allow only a single user signup and then disable the sign-up page. Useful for self-host where you want full control.
This also disables OIDC / OAuth sign-in.

API_LIMIT

Per-hour limit on the public-API create-post endpoint. Defaults to 90. It is a single value for the whole instance and does not tier by plan: channel and post quotas do that instead. Note that the shipped docker-compose.yaml sets API_LIMIT: 30, which is lower than the default. Raise it if you drive Postiz from scripts.

RUN_CRON

When set, the backend process runs the scheduled-task workers. Leave unset on API-only instances when workers are deployed separately.

RESTRICT_UPLOAD_DOMAINS

Comma-separated allowlist of domains for /public/v1/upload-from-url. If set, only URLs whose hostname matches an entry are accepted.

DISALLOW_PLUS

When set, blocks the upgrade UI elements pointing to paid plans. Used for self-host deployments that don’t want to surface cloud-only billing.

IS_GENERAL

Branding and product-line switch. It controls page titles, which sign-in providers are offered, the default landing route, and a handful of labels. Set it to "true", which is what the shipped compose file does.
IS_GENERAL is not the cloud switch, despite the name. Plans, limits and billing are enabled by the presence of STRIPE_PUBLISHABLE_KEY, so an install without a Stripe key has no plan gating at all and behaves as the top tier.

DISABLE_IMAGE_COMPRESSION

When truthy, the frontend skips client-side image compression on upload. Set this if you need pixel-exact originals at the cost of larger uploads.

DISABLE_SSRF_PROTECTION

When connecting providers that take a self-hosted URL (WordPress, Mastodon, Lemmy, Listmonk, Bluesky PDS, etc.), posting media to such providers, fetching webhooks, or handling /public/v1/upload-from-url, Postiz fetches the URL server-side and blocks requests that resolve to private, internal, loopback, or link-local IPs to prevent SSRF. Blocked requests surface as fetch failed with Error: Blocked IP in the backend or orchestrator logs. Set to true to disable the guard. Set it on both the backend and orchestrator containers.
This disables SSRF protection globally, not per provider. Only set it if your Postiz instance must reach those services on a trusted private network (e.g. same Docker network, VPC, or homelab LAN) and all users of the instance are trusted (single-tenant). Any user who can submit a URL can make the server fetch internal services. Prefer fixing DNS/routing so the hostname resolves to a reachable address.

NOT_SECURED

Dev only. Never set in production: it disables security checks that exist for a reason.

MAIN_URL

Primary application URL used for absolute links in some emails and SEO metadata. Falls back to FRONTEND_URL when not set.

EXTENSION_ID

The Chrome Extension ID for cookie-based platform integrations (e.g. Skool). See the Chrome Extension guide.

MOBILE_APP_SCHEME

URL scheme used for deep-linking from emails into the mobile app.

Storage

See also: Cloudflare R2 and Uploads & Storage.

Email

See also: Email configuration.

OAuth sign-in (OIDC)

See also: OAuth configuration.

Temporal (workflow orchestration)

Since v2.12.0, Postiz uses Temporal for scheduled posts and background workflows. Self-host deployments need to run a Temporal stack (the official docker-compose ships with one). See the Temporal migration guide.

Public API & MCP


AI / generation


If a Postiz user configures short-link replacement, Postiz proxies link shortening through one of the configured providers. Pick one set.

Dub.co

Short.io

Kutt.it

LinkDrip


Payments

Removed

These appear in older .env examples and in the shipped compose file, but nothing in Postiz reads them any more. Delete them. STRIPE_SIGNING_KEY_CONNECT, FEE_AMOUNT, NOWPAYMENTS_API_KEY, NOWPAYMENTS_AMOUNT, SLACK_SIGNING_SECRET, NX_ADD_PLUGINS

Analytics & tracking (frontend)

All of these are optional. Frontend reads NEXT_PUBLIC_* at build time.

Misc frontend


Social provider keys

Each social provider has its own env-var block. See the per-provider setup pages under Providers for the exact OAuth steps; this table is just a lookup so you can find which page documents which variable.

Runtime & build

These are read from the environment but are typically managed by your runtime, hosting platform, or framework rather than set by hand.