The smee.io workflow, with an inspector and replay
smee.io, from the GitHub Probot team, is the classic way to receive GitHub webhooks on localhost: a channel URL plus a small client that forwards each delivery. It does that job well. webhook-toolkit keeps the same one-command flow and adds what you usually end up needing next: the webhooks stay stored, you can replay them, generate signed test events and wait for them in tests.
From smee to webhook-toolkit in one line
npx smee-client -u https://smee.io/aBcD1234 -t http://localhost:3000/api/github/webhooks
npx webhook-toolkit listen --forward http://localhost:3000/api/github/webhooks
Paste the printed URL as the webhook URL of your GitHub App or repository. Each delivery appears in your terminal with the event name (push, pull_request, issues…), is forwarded to your handler with its original X-Hub-Signature-256, and stays visible in the web inspector.
Side by side
| smee.io | webhook-toolkit | |
|---|---|---|
| Public URL that forwards to localhost | ✓ | ✓ |
| No account needed | ✓ | ✓ |
| Webhooks kept when your machine is off | — | ✓ 7–30 days |
| Web inspector (headers, raw body, search) | live only | ✓ stored |
| Sender & event detection (Stripe, GitHub, Shopify…) | — | ✓ |
| Replay a past webhook to localhost | — | ✓ |
| Signed test events (GitHub, Stripe, Slack…) | — | ✓ |
| Wait for a webhook in Vitest / Jest / Playwright | — | ✓ |
| MCP server for AI agents | — | ✓ |
| Open source client | ✓ | ✓ MIT |
Based on the public smee.io site and client in September 2026.
Test a GitHub webhook handler without GitHub
npx webhook-toolkit sign github --secret "$GITHUB_WEBHOOK_SECRET" \
--payload '{"action":"opened","number":42}' \
--send http://localhost:3000/api/github/webhooksMore commands on the CLI page; signature debugging on the GitHub signature validator.
Questions fréquentes
Is webhook-toolkit a drop-in replacement for the smee client?
For the forwarding part, yes: `smee -u https://smee.io/abc -t http://localhost:3000/webhooks` becomes `npx webhook-toolkit listen --forward http://localhost:3000/webhooks`. You get a new public URL to paste in GitHub (or any sender) instead of the smee channel URL.
Are signatures preserved when forwarding?
Yes. The request is re-sent with the same method, headers and raw body, so X-Hub-Signature-256, Stripe-Signature and other HMAC headers still verify against your secret on localhost.
What happens to webhooks sent while my laptop is off?
They are stored on the URL (7 days free, 30 days on paid plans). Open the inspector to see them, or replay any of them to localhost later with `npx webhook-toolkit replay <token> <id> --to http://localhost:3000/webhooks`.
Is it free and open source?
The CLI is MIT-licensed on GitHub and free to use without an account. A free account keeps your URL forever; the 7-day Pass (€5) or Pro (€9/month) add AI explanations, 25 URLs and the Relay tunnel.