postiz-app Documentation

The ultimate agentic social media scheduling tool ๐Ÿค–

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy postiz-app on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name postiz-app -p 5432:5432 --restart always postgres:17-alpine
Configured Services & Ports
โš™๏ธ postiz-postgres
image: postgres:17-alpine
๐Ÿ”Œ Ports: 5432:5432
โš™๏ธ postiz-redis
image: redis:7-alpine
๐Ÿ”Œ Ports: 6379:6379
โš™๏ธ postiz-pg-admin
image: dpage/pgadmin4:latest
๐Ÿ”Œ Ports: 8085:80
โš™๏ธ postiz-redisinsight
image: redis/redisinsight:latest
๐Ÿ”Œ Ports: 5540:5540
โš™๏ธ temporal-elasticsearch
image: elasticsearch:7.17.27
โš™๏ธ temporal-postgresql
image: postgres:16
โš™๏ธ temporal
image: temporalio/auto-setup:1.28.1
๐Ÿ”Œ Ports: 7233:7233
โš™๏ธ temporal-admin-tools
image: temporalio/admin-tools:1.28.1-tctl-1.18.4-cli-1.4.1
โš™๏ธ temporal-ui
image: temporalio/ui:2.34.0
๐Ÿ”Œ Ports: 8080:8080
docker-compose.yml
yaml (docker-compose.yml)
# This docker-compose file is used for development purposes. It sets up the necessary services for the Postiz application.
# It is **not** intended for production use. For production, please refer to the official documentation.

services:
  postiz-postgres:
    # ref: https://hub.docker.com/_/postgres
    image: postgres:17-alpine # 17.0
    container_name: postiz-postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: postiz-local-pwd
      POSTGRES_USER: postiz-local
      POSTGRES_DB: postiz-db-local
      TEMPORAL_ADDRESS: "temporal:7233"
    volumes:
      - postgres-volume:/var/lib/postgresql/data
    ports:
      - 5432:5432
    networks:
      - postiz-network
  postiz-redis:
    # ref: https://hub.docker.com/_/redis
    image: redis:7-alpine # 7.4.0
    container_name: postiz-redis
    restart: always
    ports:
      - 6379:6379
    networks:
      - postiz-network
  postiz-pg-admin:
    # ref: https://hub.docker.com/r/dpage/pgadmin4/tags
    image: dpage/pgadmin4:latest
    container_name: postiz-pg-admin
    restart: always
    ports:
      - 8085:80
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: admin
    networks:
      - postiz-network
  postiz-redisinsight:
    # ref: https://hub.docker.com/r/redis/redisinsight
    image: redis/redisinsight:latest
    container_name: postiz-redisinsight
    links:
      - postiz-redis
    ports:
      - '5540:5540'
    volumes:
      - redisinsight:/data
    networks:
      - postiz-network
    restart: always

  temporal-elasticsearch:
    container_name: temporal-elasticsearch
    image: elasticsearch:7.17.27
    environment:
      - cluster.routing.allocation.disk.threshold_enabled=true
      - cluster.routing.allocation.disk.watermark.low=512mb
      - cluster.routing.allocation.disk.watermark.high=256mb
      - cluster.routing.allocation.disk.watermark.flood_stage=128mb
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms256m -Xmx256m
      - xpack.security.enabled=false
    networks:
      - temporal-network
    expose:
      - 9200
    volumes:
      - /var/lib/elasticsearch/data

  temporal-postgresql:
    container_name: temporal-postgresql
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: temporal
      POSTGRES_USER: temporal
    networks:
      - temporal-network
    expose:
      - 5432
    volumes:
      - /var/lib/postgresql/data

  temporal:
    container_name: temporal
    ports:
      - "7233:7233"
    image: temporalio/auto-setup:1.28.1
    depends_on:
      - temporal-postgresql
      - temporal-elasticsearch
    environment:
      - DB=postgres12
      - DB_PORT=5432
      - POSTGRES_USER=temporal
      - POSTGRES_PWD=temporal
      - POSTGRES_SEEDS=temporal-postgresql
      - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development-sql.yaml
      - ENABLE_ES=true
      - ES_SEEDS=temporal-elasticsearch
      - ES_VERSION=v7
      - TEMPORAL_NAMESPACE=default
    networks:
      - temporal-network
    volumes:
      - ./dynamicconfig:/etc/temporal/config/dynamicconfig
    labels:
      kompose.volume.type: configMap

  temporal-admin-tools:
    container_name: temporal-admin-tools
    image: temporalio/admin-tools:1.28.1-tctl-1.18.4-cli-1.4.1
    environment:
      - TEMPORAL_ADDRESS=temporal:7233
      - TEMPORAL_CLI_ADDRESS=temporal:7233
    networks:
      - temporal-network
    stdin_open: true
    depends_on:
      - temporal
    tty: true

  temporal-ui:
    container_name: temporal-ui
    image: temporalio/ui:2.34.0
    environment:
      - TEMPORAL_ADDRESS=temporal:7233
      - TEMPORAL_CORS_ORIGINS=http://127.0.0.1:3000
    networks:
      - temporal-network
    ports:
      - "8080:8080"

volumes:
  redisinsight:
  postgres-volume:
    external: false

networks:
  postiz-network:
    external: false
  temporal-network:
    driver: bridge
    name: temporal-network

File: README.md

**[NEW: check out Postiz agent CLI! perfect for OpenClaw and other agents](https://github.com/gitroomhq/postiz-agent)**

๐Ÿ”Œ See the leading Postiz features

โœจ Features

Our Sponsors

Sponsor Logo Description
Hostinger Hostinger is on a mission to make online success possible for anyone โ€“ from developers to aspiring bloggers and business owners
Virlo Virlo is the #1 social media trend spotting and all-in-one GTM tool for teams leveraging short-form video
ChatbotX The ManyChat alternative that you can self-host, white-label, and resell to your clients. Bring your own OpenClaw, Hermes, or Claude agents!

Intro

  • Schedule all your social media posts (many AI features)
  • Measure your work with analytics.
  • Collaborate with other team members to exchange or buy posts.
  • Invite your team members to collaborate, comment, and schedule posts.
  • At the moment, there is no difference between the hosted version and the self-hosted version
  • Perfect for automation (API) with platforms like N8N, Make.com, Zapier, etc.

Tech Stack

  • Pnpm workspaces (Monorepo)
  • NextJS (React)
  • NestJS
  • Prisma (Default to PostgreSQL)
  • Temporal
  • Resend (email notifications)

Quick Start

To have the project up and running, please follow the Quick Start Guide

We now give a few options to Sponsor Postiz:

  • Just a donation: You like what we are building, and want to buy us some coffee so we can build faster.
  • Main repository: Get your logo with a backlink from the main Postiz repository. Postiz has over 7M downloads and 20k views per month.

Link: https://opencollective.com/postiz

Postiz Compliance

  • Postiz is an open-source, self-hosted social media scheduling tool that supports platforms like X (formerly Twitter), Bluesky, Mastodon, Discord, and others.
  • Postiz hosted service uses official, platform-approved OAuth flows.
  • Postiz does not automate or scrape content from social media platforms.
  • Postiz does not collect, store, or proxy API keys or access tokens from users.
  • Postiz never asks users to paste API keys into our hosted product.
  • Postiz users always authenticate directly with the social platform (e.g., X, Discord, etc.), ensuring platform compliance and data privacy.

License

This repository's source code is available under the AGPL-3.0 license.


File: apps/frontend/README.md

This is a Next.js project bootstrapped with create-next-app.

Getting Started

First, run the development server:

bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev

Open http://localhost:3000 with your browser to see the result.

You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.

This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.

Learn More

To learn more about Next.js, take a look at the following resources:

You can check out the Next.js GitHub repository - your feedback and contributions are welcome!

Deploy on Vercel

The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.

Check out our Next.js deployment documentation for more details.