Skip to content
PG Horizon
pgpipe

v4.0.0 · Released 20 July 2026 · See what's new →

Download pgpipe

Single static binary, ~25 MB. No runtime dependencies. Verify the SHA-256 checksum before running, especially on production hosts.

Run with Docker

The fastest way to try pgpipe.

A small Dockerfile + docker-compose.yml spin up a source database, a destination database, and pgpipe wired between them. The dashboard opens at http://localhost:8080.

1. Grab the files

# Make a working directory
mkdir pgpipe-demo && cd pgpipe-demo

# Pull the four files
BASE="https://www.pghorizon.com/downloads/pgpipe/v4.0.0/docker"
curl -fsSL $BASE/Dockerfile          -O
curl -fsSL $BASE/docker-compose.yml  -O
curl -fsSL $BASE/pgpipe.example.yaml -o pgpipe.yaml
curl -fsSL $BASE/init-source.sql     -O
curl -fsSL $BASE/init-dest.sql       -O

2. Bring the stack up

# Build the pgpipe image (pulls the published binary)
# and start everything in one go
docker compose up -d --build

# Watch pgpipe logs
docker compose logs -f pgpipe

# Open the dashboard
open http://localhost:8080

3. See replication in action

# Insert a row in the source database
docker compose exec source-db psql -U postgres source_db \
  -c "INSERT INTO public.greetings(message) VALUES ('hello from pgpipe');"

# A moment later, see it in the destination
docker compose exec dest-db psql -U postgres dest_db \
  -c "SELECT * FROM public.greetings;"

# Tear it all down (and delete data)
docker compose down -v

Logging into the dashboard

On the very first docker compose up, pgpipe generates a random admin password and prints it once to the logs. Open the dashboard at http://localhost:8080 and use these credentials:

# Just the password (cleanest, always works)
docker compose exec pgpipe cat /var/lib/pgpipe/pgpipe-admin.password

# Or grep the full first-run banner from the logs
docker compose logs pgpipe | grep -A 6 "FIRST RUN — DASHBOARD"

Username is admin. The password is auto-generated on first run, persisted to /var/lib/pgpipe/pgpipe-admin.password (mode 0600), and survives restarts. The "FIRST RUN" log banner only appears the first time — after that, the file is the only copy.

To set your own password instead, edit pgpipe.yamlserver.auth.password before bringing the stack up. For production, prefer an environment variable like PGPIPE_DASHBOARD_PASSWORD over a value baked into YAML.

Running pgpipe against your own databases? Drop the source-db and dest-db services from the compose file and edit pgpipe.yaml with your real hostnames. The Dockerfile builds the same image either way.

Linux packages

Platform File Size Download
Debian / Ubuntu (amd64)
sha256: 4988b774bbcd9847ae6fd9764fa47af5da45bb7d6ef2a4ede1fa07a9c1314c8d
pgpipe_4.0.0_amd64.deb 7.1 MB Download
Debian / Ubuntu (arm64)
sha256: 6e28a462f6deec12eb2cb21c2b9530b9e84cc4a1648791fd7c74204407b6032d
pgpipe_4.0.0_arm64.deb 6.1 MB Download
RHEL / Rocky / Fedora (x86_64)
sha256: b56872dbded75208cbfa65382fffeb09668c5afec69231c338d1e9d30d954806
pgpipe-4.0.0-1.x86_64.rpm 9.3 MB Download
RHEL / Rocky / Fedora (aarch64)
sha256: df2104be8113cd89aecf1f5461746ec91fe042b7c271429f846de9e05df4ca05
pgpipe-4.0.0-1.aarch64.rpm 8.4 MB Download

Verification & companion files

Debian / Ubuntu (.deb)

wget https://www.pghorizon.com/downloads/pgpipe/v4.0.0/pgpipe_4.0.0_amd64.deb
sudo apt install ./pgpipe_4.0.0_amd64.deb
sudo systemctl enable --now pgpipe

RHEL / Rocky / Fedora (.rpm)

wget https://www.pghorizon.com/downloads/pgpipe/v4.0.0/pgpipe-4.0.0-1.x86_64.rpm
sudo dnf install ./pgpipe-4.0.0-1.x86_64.rpm
sudo systemctl enable --now pgpipe

Upgrading to v4.0.0? Four things to know

  • Restart the service after the package upgrade. Installing the new .deb/.rpm does not restart a running pipeline. Validate the config, then run sudo systemctl restart pgpipe so the v4 binary takes over.
  • Existing supported configs remain compatible. Schema version 4 adds the disabled-by-default source.ddl.quarantine section. Older supported schemas continue to load with safe defaults; new examples and dashboard saves use config_version: 4.
  • Failure paths are now bounded. Explicit 0 values for newly bounded retry, reconnect, and recovery fields are normalized to finite defaults. Run pgpipe validate -c /etc/pgpipe/pgpipe.yaml and review the effective limits before restarting.
  • The production container is stricter. It runs as UID/GID 10001 with a read-only root filesystem. Custom deployments must keep /var/lib/pgpipe persistent and writable, mount config read-only, and provide a writable /tmp tmpfs.

Full v4.0.0 changelog →

First time using pgpipe?

The Docker Compose quickstart gets you replicating in under a minute, with a sample source and destination already wired up.

See the quickstart

pgpipe is provided as-is, free of charge, with no support SLA. For commercial support and managed deployments, talk to us.