Install
pingd ships as a single Docker image. The fastest way to a running server is Docker Compose.
Docker (recommended)
Published on GitHub Container Registry as ghcr.io/saeid/pingd.
Run directly
docker run --rm \
--name pingd \
-p 7685:7685 \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=changeme \
-e PINGD_DATA_DIR=/data \
-v "$PWD/data:/data" \
ghcr.io/saeid/pingd:latest
Open http://localhost:7685, log in with the admin credentials you supplied, and create your first topic.
Docker Compose
Save this as docker-compose.yml:
services:
pingd:
image: ghcr.io/saeid/pingd:latest
ports:
- "7685:7685"
env_file:
- .env
volumes:
- ./data:/data
restart: unless-stopped
Use .env.example as the starting point for the .env file referenced above.
Then:
docker compose up -d
ADMIN_USERNAME and ADMIN_PASSWORD are only used to seed the first user on a fresh database.
See Configuration for the full environment variable list.
Build the image yourself
From a clone of the repo:
git clone https://github.com/saeid/pingd
cd pingd
docker build -t pingd:local .
Build from source (no Docker)
Requires Swift 6 or later. Tested on macOS 13+ and Ubuntu Noble; any Linux with a working Swift 6 toolchain should build.
swift build -c release --product pingd
.build/release/pingd serve
Using the CLI
pingd-cli is the command-line client for managing topics, users, tokens,
permissions, webhooks, and for tailing messages. It ships inside the same Docker image,
and can also be built standalone.
docker compose exec pingd ./pingd-cli --help
docker compose exec pingd ./pingd-cli topics list
swift build -c release --product pingd-cli
sudo cp .build/release/pingd-cli /usr/local/bin/
pingd-cli --help
alias pingd-cli='docker compose exec -T pingd ./pingd-cli'
pingd-cli topics list
On first boot the server seeds an admin token into $PINGD_DATA_DIR/cli-config.json,
so the bundled CLI works out of the box.
Health check
Once it is running, hit:
curl http://localhost:7685/health
The container has a built-in HEALTHCHECK on the same endpoint, so docker ps will show (healthy) when ready.
Reverse proxy
For HTTPS in production, run pingd behind a reverse proxy that handles TLS and forwards traffic to the pingd instance. See the Reverse proxy section for full Nginx and Caddy configs, including the SSE-specific tweaks needed for live streaming endpoints.