Webhooker CLI · whk

Real webhooks on localhost, no tunnel.

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.

sh
curl -fsSL https://webhooker.eu/install.sh | sh

Picks the build for your OS and CPU · verifies the SHA-256 checksum · no root needed

Quick start

How do I receive webhooks on localhost?

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.

  1. STEP 01

    Log in with an API key

    Create a key in the dashboard. whk reads it without echo and saves it to a file only your user can read.

    whk login
  2. STEP 02

    Create a source

    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
  3. STEP 03

    Forward to localhost

    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

What it does

What can you do with whk?

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

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.

whk tail

Live 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

Terminal UI

Browse sources and events, inspect payloads, relay to localhost and watch delivery stats without leaving the terminal.

whk events replay

Event log and 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

Sources, destinations, routes

Create sources, rotate ingest tokens, add destinations with HMAC signing and connect them with filters and transformations.

--json

Built for scripts and CI

--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

Which platforms does whk run on?

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.

  • Linux x86_64 and ARM64 static musl build, any distribution, Alpine included
  • macOS Intel and Apple Silicon native build for each CPU
  • Windows x86_64 whk.exe, added to your user PATH

Pin a version and choose the directory

curl -fsSL https://webhooker.eu/install.sh | sh -s -- --version v0.1.1 --dir /usr/local/bin

Pin a version in PowerShell

$env:WHK_VERSION = "v0.1.1"; irm https://webhooker.eu/install.ps1 | iex

Build from source with Cargo

cargo install --git https://github.com/webhooker-eu/webhooker-cli

FAQ

Questions about the Webhooker CLI

How do I install the Webhooker CLI?

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.

Install options in the CLI docs

How do I install a specific version of whk?

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.

How do I receive webhooks on localhost without ngrok?

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.

ngrok alternatives for webhooks compared

Will my handler's signature check pass on a forwarded webhook?

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.

Why webhook signature verification fails

Do I miss events while whk listen is not running?

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.

How webhook retries and replay work

Is the Webhooker CLI free?

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.

Can I use whk in CI?

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.

Install it, then point Stripe at your laptop.

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.