Sierpe 1.5.2 — where it runs, and two fixes that widen the answer

August 21, 2026

We set out to answer one question: if you hand the site to someone who needs an indexer, where can they actually put it? The result is a new page, Where it runs, covering app platforms, the three hyperscalers, serverless (no), self-hosted from Kubernetes to a Raspberry Pi, and twenty-five Postgres providers — each with a verdict and the one setting that matters.

Drawing the map found two things to fix.

Transaction-mode poolers. Supabase’s pooler on port 6543, PgBouncer before 1.21 and several managed connection pools do not support the prepared statements the driver sends by default. The documented escape hatch — default_query_exec_mode=simple_protocol in the URL — turned out not to work either: both jsonb writers leaned on type hints only the extended protocol provides. They now send JSON text explicitly, the store suite runs under the simple protocol as a regression test, and a boot that dies on a prepared-statement error names the fix in its last log line.

Health checks inside the container. The image is distroless: no shell, no curl. Docker, Swarm, Coolify, Dokploy, CapRover and NAS container managers run their health check inside the container, so every one of them marked Sierpe unhealthy forever. sierpe healthcheck probes the local /health and is declared as the image HEALTHCHECK.

One thing deliberately not changed: Sierpe still ignores the PORT variable. Honouring it would open Heroku web dynos and silently move the listener of every Railway deployment that did not pin HTTP_PORT. The page says so, with the reasoning.