┌─[ relay v2.4.1 ]── webhook debugging & replay ──┐

Webhooks fail silently.
relay doesn't

Capture every webhook your app receives, inspect the full payload with headers and signatures intact, then relay replay it against localhost until your handler behaves.

12k+ GitHub stars 38M requests replayed MIT-licensed CLI

## installation

One command. Zero config files.

Relay ships as a single static binary with first-class package-manager support. Pick your poison, paste, done.

$ npm install -g @relaydev/cli

# macOS · Linux · Windows (WSL & native) — 6.2 MB, no runtime deps

## features

man relay — everything, documented

Six subcommands that cover the whole miserable lifecycle of a webhook, from "did it even arrive?" to "ship it".

Capture

relay listen [--port 4040]

Puts a recording proxy in front of your endpoint. Every incoming webhook is stored with full headers, raw body, timing and TLS details — even the ones your app 500'd on.

Replay

relay replay <id> [--to URL]

Re-sends any captured request, byte-for-byte, to localhost or any target. Loop it with --times 50 to hammer a fix, or --speed 0.5 to slow-motion a race condition.

Verify

relay verify --provider stripe

Checks HMAC signatures against 40+ known provider schemes. Tells you whether a failing signature is your secret, your clock, or a body that got re-encoded in transit.

Diff

relay diff <id> <id>

Structural diff between two captures. Instantly see which field the provider renamed in their "non-breaking" API update last Tuesday.

Mock

relay mock --provider github

Generates realistic signed payloads for CI. Test your handler against push, pull_request and 200 other event shapes without touching a real repo.

Share

relay share <id>

Creates an expiring, secret-redacted link to a capture. Attach the exact failing request to a bug report instead of a screenshot of half a JSON blob.

## the inspector

See exactly what hit the wire

The Relay inspector shows every capture the way your server saw it — not a prettified approximation. Raw bytes, exact header casing, signature material and all.

  • Syntax-highlighted body with the raw view one keystroke away
  • Signature verdict inline: valid, expired, or wrong secret
  • Timing waterfall from TCP open to your handler's response
  • One keypress (r) to replay against localhost

## comparison

Tunnels forward. Logs describe. relay reproduces.

Tunnelling tools and log tailing both leave you refreshing a dashboard and begging the provider to "send it again". Relay makes the request itself the artifact.

Feature comparison between Relay, tunnelling tools and log tailing
capability relay tunnels log tailing
Replay a request on demand yes — byte-exact no no
Capture survives your app crashing yes partial no — no app, no log
Signature verification built in yes — 40+ providers no no
Diff two payloads structurally yes no grep, if you're lucky
Works offline / in CI yes — mock + replay no — needs live traffic fixtures you hand-rolled
Share an exact failing request yes — redacted link no copy-paste screenshot

## pricing

Free for the fix. Paid for the team.

The CLI is open source and free forever. Paid plans add hosted capture history, shared workspaces and longer retention.

free

$0 /forever

The full CLI plus a hosted inbox for solo debugging.

  • unlimited local captures
  • replay + verify + diff
  • 1 hosted endpoint
  • 24h capture retention
  • shared workspaces
  • SSO & audit log
$ relay init

team

$39 /user/mo

Shared visibility for platform and integrations teams.

  • everything in pro
  • unlimited endpoints
  • 90-day retention
  • shared workspaces + RBAC
  • SSO, SCIM & audit log
  • priority support (4h SLA)
$ talk to us

The next webhook bug is already in flight.

Install Relay before it lands. Two minutes now saves the 2 a.m. session where you add console.log(JSON.stringify(req.body)) and redeploy to production.