Compared with alternatives

Good Webhooks against Svix, Outpost, Convoy, and pg-boss plus fetch. What each does, what this library does not have, and when to pick which.

Four other ways to send webhooks from an application, checked against their own documentation, repositories, and pricing pages on 27 October 2026. The notes on the table give the detail behind each cell, and the sources are listed at the end. Open an issue if a claim is out of date.

OptionWhat it is
SvixHosted service
OutpostGo event gateway
ConvoyGo webhook gateway
pg-boss plus fetchJob queue plus your code

Svix is a hosted webhook service with an open-source Rust server that covers part of it.

Outpost is a Go event-destinations gateway by Hookdeck, self-hosted or managed, that sends to webhooks and message queues.

Convoy is a Go webhook gateway with a dashboard, self-hosted or cloud, with paid features behind a license key.

pg-boss plus fetch is a PostgreSQL job queue for Node.js plus about 50 lines of your own that sign and send each request.

What each does

FeatureGood WebhooksSvixOutpostConvoypg-boss
OutboxYesNoNoNoYes
Signing specStandardsvix-* namesOptionalOwnBuild it
Retries8 over 28 h8 over 28 h10 over 8.5 hConfigurable2, no delay
Auto-pauseYesYesOptionalOptionalNo
ReplayYesYesPer eventYesretry()
HeadersYesYesYesPer eventBuild it
Rate limitsNoYesNoYesNo
DashboardNoHosted onlyPortalYesJobs only
Pull APINoEnterpriseNoNoNo
TransformsNoHosted onlyNoPaidBuild it
StoragePostgreSQLPostgreSQLRedis, DB, MQPG and RedisPostgreSQL
HostingLibraryCloud or selfCloud or selfCloud or selfLibrary
LicenseMITMITApache 2.0ELv2MIT
PriceFreeFree tierFree to runFree to runFree

Notes on the table

  • Outbox in your own transaction
    • Good Webhooks: yes, publish() joins your transaction.
    • Svix: no, you call its HTTP API and keep your own outbox.
    • Outpost: no, you call its HTTP API or write to a queue.
    • Convoy: no, you call its HTTP API or a broker.
    • pg-boss plus fetch: yes, send() takes your transaction.
  • Signing standard
    • Good Webhooks: Standard Webhooks with HMAC-SHA256.
    • Svix: Standard Webhooks under svix-* names, webhook-* on paid plans or by a server switch.
    • Outpost: its own x-outpost-signature by default, Standard Webhooks as an option.
    • Convoy: its own X-Convoy-Signature, not Standard Webhooks.
    • pg-boss plus fetch: none, you sign each request yourself.
  • Retries and Retry-After
    • Good Webhooks: eight attempts over about 28 hours, and Retry-After on 429 and 503.
    • Svix: the same eight-step schedule, with Retry-After found only in the open-source code.
    • Outpost: ten retries, exponential from 30 seconds (about 8.5 hours), and Retry-After not found.
    • Convoy: linear or exponential backoff per project, and Retry-After not found.
    • pg-boss plus fetch: two retries with no delay by default, and Retry-After is yours to parse.
  • Pause on failing endpoints
    • Good Webhooks: automatic after five days of failures or a 410, resume by API.
    • Svix: automatic after five days of failures, re-enable by API or in the dashboard.
    • Outpost: off by default; when on, after 100 consecutive failures.
    • Convoy: dead endpoints when disable_endpoint is on, plus a circuit breaker on paid plans.
    • pg-boss plus fetch: none, exhausted jobs go to a dead letter queue if you set one.
  • Replay
    • Good Webhooks: one delivery or one page of an endpoint's deliveries, same event ID and body.
    • Svix: one message, recover failed from a date, or replay missing.
    • Outpost: one event to one destination per call.
    • Convoy: one delivery or a filtered batch, plus a force retry for successes.
    • pg-boss plus fetch: retry() on a failed job, and each retry overwrites the last attempt.
  • Per-endpoint headers
    • Good Webhooks: yes.
    • Svix: yes.
    • Outpost: yes, off in the portal by default.
    • Convoy: per event, plus one API-key header per endpoint.
    • pg-boss plus fetch: you build it.
  • Rate limiting to receivers
    • Good Webhooks: no, only a per-endpoint maxInFlight cap.
    • Svix: yes, a messages-per-second throttleRate per endpoint.
    • Outpost: no, excluded by design.
    • Convoy: yes, rate_limit per endpoint.
    • pg-boss plus fetch: no, only group concurrency and throttled sends.
  • Dashboard or portal
    • Good Webhooks: neither.
    • Svix: both on the hosted service, neither in the open-source server.
    • Outpost: a receiver portal ships in the open-source repository.
    • Convoy: a dashboard in the community edition, and Portal Links on paid plans.
    • pg-boss plus fetch: a job dashboard package, no receiver portal.
  • Receiver pull API
    • Good Webhooks: no.
    • Svix: polling endpoints on the Enterprise plan.
    • Outpost: no.
    • Convoy: no.
    • pg-boss plus fetch: no.
  • Transformations
    • Good Webhooks: no.
    • Svix: JavaScript on the hosted service.
    • Outpost: no, only through the separate Hookdeck Event Gateway.
    • Convoy: JavaScript on paid plans.
    • pg-boss plus fetch: whatever your handler does.
  • Storage
    • Good Webhooks: your PostgreSQL.
    • Svix: PostgreSQL plus optional Redis when self-hosted, not documented when hosted.
    • Outpost: Redis, PostgreSQL or ClickHouse, and a message queue.
    • Convoy: PostgreSQL 15 or later, plus Redis 6 or later unless you use its experimental paid PostgreSQL queue.
    • pg-boss plus fetch: your PostgreSQL.
  • Hosting model
    • Good Webhooks: a library in your app plus a worker you run.
    • Svix: hosted service, self-hosted Rust server, or on-prem on Enterprise.
    • Outpost: self-hosted Go service, or managed by Hookdeck.
    • Convoy: self-hosted Go service, Convoy Cloud, or on-prem on Enterprise.
    • pg-boss plus fetch: a library in your app plus a worker you run.
  • License
    • Good Webhooks: MIT.
    • Svix: MIT for the server and SDKs.
    • Outpost: Apache 2.0.
    • Convoy: Elastic License 2.0, which is source-available.
    • pg-boss plus fetch: MIT.
  • Price
    • Good Webhooks: free.
    • Svix: free to 50k messages a month, then from $20 or $490 a month plus $0.0001 per message.
    • Outpost: free to self-host, managed from $10 per million events after 50k free.
    • Convoy: free to self-host with 1 user and 2 projects, then $999 a month, or $99 or $499 cloud.
    • pg-boss plus fetch: free.

General notes:

  • The pg-boss column means pg-boss plus fetch.
  • The default Good Webhooks retry schedule is the one Svix publishes.
  • Svix's open-source server caps a Retry-After wait at twice the scheduled delay, and the hosted service documents neither Retry-After nor 410.
  • Endpoint management with the Better Auth plugin lives in your Better Auth database, whatever its engine, and delivery stays on PostgreSQL.
  • Good Webhooks encrypts per-endpoint headers at rest and reserves webhook-*, content-type, and user-agent.
  • "Not found" in a note means the feature appears in neither the documentation nor the source on the check date.

What Good Webhooks does not have

  • A dashboard. Svix's hosted service and Convoy ship one, and here you build admin pages on deliveries.list().
  • A receiver portal. Svix's hosted service, Outpost, and Convoy's paid plans give endpoint owners a UI, and here the Better Auth routes give signed-in users endpoint management without a UI.
  • Transformations. Svix runs JavaScript per endpoint and Convoy on broker sources, and here the validated payload is sent as is.
  • mTLS to receivers. Svix and Convoy offer it on Enterprise plans.
  • Rate limiting to receivers. Svix and Convoy accept a per-endpoint rate, and here each endpoint has only a maxInFlight cap of 2 by default.
  • Storage other than PostgreSQL. Delivery needs PostgreSQL 16, 17, or 18, and nothing else is supported.
  • A hosted service. Svix, Outpost, and Convoy each run one.
  • Ordering guarantees. Svix sells FIFO endpoints on Enterprise and pg-boss has a strict FIFO policy per key, and here delivery is at least once with no order, so receivers compare versions.
  • Senders in other languages. The sender is TypeScript on Node.js 24 or later, while receivers in any language verify with any Standard Webhooks library.

The roadmap marks the dashboard, portal, transformations, mTLS, other delivery databases, and a hosted service as not planned, and a per-endpoint rate limit as a candidate after 0.6.0.

When to pick which

  • Svix when you want a hosted service with a receiver portal, an SLA, and SDKs in nine languages, and you accept a per-message bill and an outbox of your own for atomicity.
    • Its open-source server is the choice when you want that API on your own PostgreSQL without the portal.
  • Outpost or Convoy when several services in different languages publish events, or you need queue destinations (Outpost) or broker ingestion with a dashboard (Convoy), and you can run a Go service with Redis and more.
    • Convoy is Elastic License 2.0, and its community edition allows 1 user and 2 projects.
  • pg-boss plus fetch when you send to a few endpoints you control, nobody registers their own, and the last attempt is all the history you need.
    • The 50 lines grow with the Standard Webhooks checklist: SSRF checks, 410, Retry-After, secret rotation, attempt history, and replay by event ID.
  • Good Webhooks when a TypeScript app on PostgreSQL lets users or organizations register endpoints, you want each event committed with your data and no new service, and you can run a worker and build any UI yourself.

Sources

All checked on 27 October 2026.

On this page