Documentation
Installation
Install and run shitpost with Docker, Docker Compose, or Go.
Requirements
- Docker or Podman for the recommended setup.
- Go 1.25+ if you run the bot locally.
- A Telegram bot token from BotFather.
- Credentials for each social platform you want
crosspostto publish to.
Option 1: run the image
Use the published image when you want the simplest production path.
mkdir -p downloads
curl -o .env https://raw.githubusercontent.com/bupd/shitpost/main/.env.example
Edit .env, then run:
docker run -d --name shitpost \
--env-file .env \
-v ./downloads:/app/downloads \
registry.goharbor.io/bupd/shitpost:latest
Follow logs:
docker logs -f shitpost
Use a versioned tag for production once releases are available. latest tracks the newest build from main.
Option 2: Docker Compose
Clone the repo and run the Compose workflow:
git clone https://github.com/bupd/shitpost.git
cd shitpost
cp .env.example .env
docker compose up --build
The service mounts ./downloads into /app/downloads so Telegram media survives container restarts.
Option 3: Taskfile workflow
If you have Task installed, the repo exposes common workflows:
task setup
task up:dry-run
task logs
task down
task doctor
task validate
Start with task up:dry-run. Your Telegram messages will not be posted; the bot replies with the exact crosspost command it would run.
Option 4: local Go process
Local mode is useful while changing bot behavior.
cp .env.example .env
task dev:dry-run
The local process expects crosspost to be available on PATH if dry-run is disabled. The Docker image already installs and wraps crosspost for you.
Confirm it works
The bot is ready when logs include:
Authorized as @your_bot_username
Send a Telegram message to the bot. In dry-run mode, the reply should start with DRY RUN: would run.