Note: This release includes a new PostgreSQL migration and one behavior change (
RETRY_POLL_BACKOFF_MS). Runoutpost migrate apply --yesbefore starting v1.2, and review the v1.2 Upgrade Guide.
Features
- Custom dead-letter queue names for auto-provisioned SQS, RabbitMQ, and GCP Pub/Sub queues, so DLQs can follow your own naming convention instead of the derived default — this also unblocks BYO-queue deployments whose DLQs don't match the derived name by @ambroziepaval in #1033
- New
outpost config listcommand, printing the effective configuration after defaults, YAML, and environment variables are resolved, with the same masking as the startup log. It skips validation, so it still works when a required field is missing by @zahradm in #1038
Performance
- The retry monitor now sleeps until the next retry actually comes due instead of polling Redis on a fixed interval, cutting idle Redis traffic from ~129.6M to ~86.4K commands per month per monitor.
RETRY_POLL_BACKOFF_MSis redefined as a maximum idle sleep with a new default of0(auto) by @alexluong in #1026 - Each provider now shares one HTTP client with a sized connection pool. Outpost previously built a client per destination, each with Go's default of two idle connections, so connection reuse collapsed above two concurrent deliveries to the same destination by @alexluong in #1021
Fixes
- Invalid webhook signature templates now fail at startup and name the offending template. A malformed template previously passed startup and panicked the delivery worker on every event, including after restart by @alexluong in #1025
- OpenTelemetry exporter and protocol resolve per signal. All three signals previously read the same
OTEL_EXPORTER/OTEL_PROTOCOLpair, so enabling one signal enabled the other two againstlocalhost:4317. The spec'sOTEL_EXPORTER_OTLP_*_PROTOCOLvariables are now honored by @alexluong in #1019 - Stale
deliveries_pkeyanddeliveries_default_pkeyindexes renamed toattempts_*(migration000010). Metadata-only, no table rewrite or downtime by @alexluong in #1031 - Creating a destination past
MAX_DESTINATIONS_PER_TENANTreturns400 Bad Requestinstead of500by @alexluong in #1010 - CLI errors are printed before exiting non-zero. Every
outpostfailure previously exited 1 with nothing on stderr, which madeoutpost migratefailures indistinguishable from one another by @alexluong in #1034
Updates
- Go 1.26.5 and a dependency refresh, addressing the CVEs in #1012 — including
x/textnorm.Iter(GO-2026-5970), reachable through webhook delivery, pgx, and Kafka SCRAM — plus GO-2026-6061 in grpc xDS by @alexluong in #1030 - Docker base image upgraded from
distroless/base-debian12todebian13, as debian12 has reached security end of life by @8BitJonny in #1036 RETRY_POLL_BACKOFF_MSdocumented in the configuration reference and its resolved value logged at startup by @alexluong in #1040- Signature header template documentation no longer carries inline shell/JSON escaping, which broke
.env, Compose, and YAML users; content and header template fields merged into one table by @alexluong in #1024 configdocsgenretired — it wrote to a docs path that no longer exists after the Markdoc migration by @alexluong in #1035, #1037
Small Fixes & QoL
- Flaky and unrunnable test suites fixed: shared config map in parallel S3 subtests, at-least-once redelivery assumptions in the Kinesis consumer, and others by @alexluong in #1029
New Contributors
- @8BitJonny made their first contribution in #1036
- @zahradm made their first contribution in #1038
Full Changelog: v1.1.0...v1.2.0