Use this file to discover all available pages before exploring further.
This article guides you for local development on Postiz. If you’re only looking to self-host, docker-compose is the recommended method.
Docker-Compose is the recommended method and now includes the Temporal stack for workflow processing.
Important: Postiz uses Temporal for background workflows. If you are upgrading from v2.11.2 to v2.12.0 or later, follow the migration guide at /installation/migration and use the maintained Docker Compose repository which includes the Temporal stack: /installation/docker-compose.
Naturally you can use these instructions to setup a development environment on any platform, but there may not be much experience in the community to help you with any issues you may encounter.
Several users using Windows (and WSL) have reported issues with the setup. This is not well tested as the main developers of the project do not use Windows/WSL for development. If you are using Windows and encounter issues, please do not try to get support, as we aren’t able to support you.
PostgreSQL - or any other SQL database (instructions below suggest Docker)
Redis - for handling worker queues (instructions below suggest Docker)
Temporal - runs as a separate stack (Postgres + Elasticsearch + Temporal services). For local development run the Temporal stack via the postiz-docker-compose repository described in /installation/docker-compose. Set TEMPORAL_ADDRESS in your .env to point at the Temporal service (example below).
We have some messages from users who are using Windows, which should work, but they are not tested well yet.
To run Temporal locally, clone the maintained Docker Compose repository which includes the Temporal stack and follow the instructions in /installation/docker-compose. See /installation/migration for migration steps when moving data to the Temporal-enabled setup.
Copy the .env.example file to .env and fill in the values
# Required SettingsDATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"REDIS_URL="redis://localhost:6379"JWT_SECRET="random string for your JWT secret, make it long"FRONTEND_URL="http://localhost:4200"NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"BACKEND_INTERNAL_URL="http://localhost:3000"TEMPORAL_ADDRESS="localhost:7233"# Optional. Your upload directory path if you host your files locally.UPLOAD_DIRECTORY="/opt/postiz/uploads/"# Optional: your upload directory slug if you host your files locally.NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=""# Your email provider, optionalEMAIL_PROVIDER="resend|nodemailer"RESEND_API_KEY="re_1234567890" # api key if you choose resendEMAIL_HOST="smtp.gmail.com" # smtp host if you choose nodemailerEMAIL_PORT="465" # smtp port if you choose nodemailerEMAIL_SECURE="true" # smtp secure if you choose nodemailerEMAIL_USER="user" # smtp user if you choose nodemailerEMAIL_PASS="pass" # smtp pass if you choose nodemailer## These are dummy values, you must create your own from Cloudflare.## Remember to set your public internet IP address in the allow-list for the API token.CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"CLOUDFLARE_BUCKETNAME="postiz"CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"CLOUDFLARE_REGION="auto"# Social Media API SettingsX_API_KEY="Twitter API key for normal oAuth not oAuth2"X_API_SECRET="Twitter API secret for normal oAuth not oAuth2"LINKEDIN_CLIENT_ID="Linkedin Client ID"LINKEDIN_CLIENT_SECRET="Linkedin Client Secret"REDDIT_CLIENT_ID="Reddit Client ID"REDDIT_CLIENT_SECRET="Linkedin Client Secret"GITHUB_CLIENT_ID="GitHub Client ID"GITHUB_CLIENT_SECRET="GitHub Client Secret"# AIOPENAI_API_KEY="OpenAI API key"# Developer SettingsNX_ADD_PLUGINS=falseIS_GENERAL="true" # required for now
3
Install the dependencies
pnpm install
4
Generate the prisma client and run the migrations
pnpm run prisma-db-push
5
Run the project
pnpm run dev
If everything is running successfully, open http://localhost:4200 in your browser!If everything is not running - you had errors in the steps above, please head over to our support page.