whk listen
Webhooks on localhost
whk listen forwards each webhook to a local URL byte for byte, signature headers included, so your handler's own check passes.
Webhooker CLI · whk
whk is the official command-line client for Webhooker. It forwards the
webhooks that reach your ingest URL to http://localhost over an outbound
connection, and manages sources, destinations, events and replays from the terminal.
One static binary, nothing else to install.
curl -fsSL https://webhooker.eu/install.sh | sh irm https://webhooker.eu/install.ps1 | iex Picks the build for your OS and CPU · verifies the SHA-256 checksum · no root needed
Quick start
Three commands after the install. The provider sends to Webhooker's public ingest URL,
Webhooker stores the event, and whk listen replays it against your local
handler. Nothing on your machine is exposed, and events that arrive while you are
offline wait in the event log.
STEP 01
Create a key in the dashboard. whk reads it without echo and saves it to a file only your user can read.
whk login STEP 02
Pass --verify stripe, github or shopify to check signatures on arrival, then give the ingest URL to your provider.
whk sources create stripe-test --verify stripewhk sources url stripe-test STEP 03
Every webhook that reaches the ingest URL is replayed against your handler with the original method, headers and body.
whk listen stripe-test --forward http://localhost:3000/webhooks/stripe $ whk listen stripe-test --forward http://localhost:3000/ Forwarding "stripe-test" → http://webhooks/ stripe localhost:3000/ (Ctrl-C to stop) 2026-09-23T10:15:02Z POST ← evt_9rMz7kQpXa2FbtW (application/webhooks/ stripe json, 2.4 KB) → 200 in 14ms
What it does
Local development is where most people start, and the rest of the commands cover what you would otherwise click through in the dashboard. They work the same in a shell and in CI.
whk listen
whk listen forwards each webhook to a local URL byte for byte, signature headers included, so your handler's own check passes.
whk tail
One line per event as it arrives: method, size, content type and the signature check result. A quick way to see a provider really sends.
whk ui
Browse sources and events, inspect payloads, relay to localhost and watch delivery stats without leaving the terminal.
whk events replay
Inspect a stored event with every delivery attempt, then replay one event or a whole range of failed deliveries after an outage.
whk connect
Create sources, rotate ingest tokens, add destinations with HMAC signing and connect them with filters and transformations.
--json
--json on every command, JSON arguments from a file or stdin, and the API key from WEBHOOKER_API_KEY instead of a login.
Install options
The install script covers all of them. Pin a release or pick the directory with flags, or skip the script and download the archive from the GitHub releases page.
FAQ
On macOS and Linux, run curl -fsSL https://webhooker.eu/install.sh | sh. On Windows, run irm https://webhooker.eu/install.ps1 | iex in PowerShell. The script downloads the build for your OS and CPU from the GitHub release, verifies its SHA-256 checksum and installs whk without root. You can also download the archive yourself or build it with Cargo.
Pass the version to the script: curl -fsSL https://webhooker.eu/install.sh | sh -s -- --version v0.1.1. The --dir flag changes the install directory, and the WHK_VERSION and WHK_INSTALL_DIR environment variables work in place of the flags, which is also how you pin a version in PowerShell.
Create a Webhooker source, set its ingest URL as the webhook endpoint at the provider, and run whk listen <source> --forward http://localhost:3000/your/path. The provider talks to Webhooker's public URL, and whk opens an outbound connection from your machine and replays each request locally, so no port is opened and no tunnel is needed.
Yes. The body is forwarded byte for byte and the provider's signature headers, such as Stripe-Signature, X-Hub-Signature-256 and X-Shopify-Hmac-Sha256, are passed through unchanged. Only transport headers like Host and Content-Length are recomputed. Stripe signs a timestamp, so forward live events while you develop rather than replaying old ones.
No. Webhooker stores every event whether or not anyone is listening. Find the one you need with whk events ls and replay it with whk events replay, or resend it from the event log in the dashboard.
Yes. whk is open source under the MIT license and works on every Webhooker plan, the free plan included. It talks to your workspace through the API, so you need a Webhooker account and an API key.
Yes. Set WEBHOOKER_API_KEY from your CI secret store and skip whk login. Every command accepts --json, so scripts get the raw API response instead of a table.
The free plan covers 10,000 events a month, and whk works on every plan. The local development tutorial walks through the whole loop, and the command reference lists every flag.