Debug Stripe webhooks, GitHub hooks, Slack events, Shopify callbacks, and any HTTP webhook integration. Self-host on Cloudflare Workers with 90-day history and full-text search.
The webhook inspector that keeps your data in your own hands.
Capture, inspect, and replay webhooks with 90-day history. Self-host on Cloudflare Workers + D1 in 5 minutes.
🚀 Quick Deploy • 📖 Full Docs • 🌐 Live Demo
# 1. Clone and install
git clone https://github.com/brancogao/webhook-debugger.git
cd webhook-debugger && npm install
# 2. Set up Cloudflare (free tier works)
npx wrangler login
npx wrangler d1 create webhook-debugger-db
# 3. Deploy
npm run deploy
# Done! Your webhook debugger is live.- ✨ NEW: Signature Verification - Verify webhooks are really from Stripe, GitHub, Slack, etc.
- Debug webhooks locally and in production - See exactly what's being sent
- 90-day history - Never lose a webhook again (free: 7 days)
- One-click replay - Forward webhooks to any URL
- Full-text search - Find webhooks by content instantly
- Auto source detection - Automatically identifies Stripe, GitHub, Shopify, Slack, etc.
- Self-hostable - Deploy to your own Cloudflare account in 5 minutes
| Feature | Webhook Debugger | Webhook.site | RequestBin | Ngrok |
|---|---|---|---|---|
| Self-hostable | ✅ Yes | ❌ No | ❌ Deprecated | |
| Data privacy | ✅ Your DB | ❌ Their server | ❌ Public | |
| Signature verification | ✅ Yes | ❌ No | ❌ No | ❌ No |
| History retention | 90 days | 7 days (paid) | 48 hours | Session only |
| Full-text search | ✅ FTS5 | ❌ No | ❌ No | ❌ No |
| One-click replay | ✅ Yes | ✅ Yes | ❌ No | ❌ No |
| Edge deployment | ✅ Global | ❌ Single region | ❌ No | ❌ No |
| Free tier | ✅ 1 endpoint | ✅ 1 endpoint | ❌ Gone | ✅ Limited |
| Cost at scale | ~$5/mo | $9-49/mo | - | $8-200/mo |
- Unique Webhook URLs - Generate unique endpoints instantly
- 90-Day History - Pro users retain webhooks for 90 days (free: 7 days)
- One-Click Replay - Replay webhooks to any target URL
- Full-Text Search - Search across all webhook payloads
- Auto Source Detection - Automatically identifies Stripe, GitHub, Shopify, Slack, etc.
- 🔐 Signature Verification (v1.1) - Verify webhook authenticity with HMAC signatures
- GitHub OAuth - No passwords required
| Service | Signature Format | Header |
|---|---|---|
| Stripe | HMAC-SHA256 + timestamp | Stripe-Signature |
| GitHub | HMAC-SHA256 (sha256=) | X-Hub-Signature-256 |
| Slack | HMAC-SHA256 (v0=) | X-Slack-Signature |
| Shopify | HMAC-SHA256 (base64) | X-Shopify-Hmac-SHA256 |
| Generic | HMAC-SHA256 | X-Hub-Signature / X-Webhook-Signature |
- Runtime: Cloudflare Workers (Edge)
- Database: Cloudflare D1 (SQLite)
- Language: TypeScript
- Authentication: GitHub OAuth + HMAC-signed session tokens
- Search: SQLite FTS5 full-text search
📖 Quick Start Guide (3 minutes)
- Node.js 18+
- Wrangler CLI (
npm install -g wrangler)
-
Clone and install dependencies:
npm install
-
Create GitHub OAuth App:
- Go to https://github.com/settings/developers
- Create a new OAuth App
- Set Authorization callback URL to:
http://localhost:8787/api/auth/callback - Copy Client ID and Client Secret
-
Configure environment variables:
cp .dev.vars.example .dev.vars # Edit .dev.vars and fill in: # - GITHUB_CLIENT_ID # - GITHUB_CLIENT_SECRET # - COOKIE_SECRET (generate with: openssl rand -base64 32)
-
Initialize database (first time only):
wrangler d1 execute webhook-debugger-db --file=./schema.sql --local
-
Build frontend:
npm run build
-
Start dev server:
npm run dev
-
Open browser:
- Visit http://localhost:8787
- Click "Login with GitHub"
To work on the frontend separately:
cd frontend
npm install
npm run devThis will start a Vite dev server on port 3000 with hot reload and proxy to the backend.
GET /api/auth/github- Start GitHub OAuth flowGET /api/auth/callback- OAuth callbackPOST /api/auth/logout- LogoutGET /api/auth/me- Get current user
GET /api/endpoints- List user's endpointsPOST /api/endpoints- Create new endpointGET /api/endpoints/:id- Get endpoint detailsPUT /api/endpoints/:id- Update endpointDELETE /api/endpoints/:id- Delete endpoint
GET/POST /hook/:path- Receive webhooks (public endpoint)GET /api/endpoints/:id/webhooks- List webhooks for endpointGET /api/endpoints/:id/webhooks/search?q=term- Search webhooksGET /api/webhooks/:id- Get webhook detailsPOST /api/webhooks/:id/replay- Replay webhook
Deploy your own instance to Cloudflare. You'll need:
- A free Cloudflare account
- A GitHub account for OAuth
Step-by-step:
-
Fork this repository
-
Clone your fork:
git clone https://github.com/YOUR_USERNAME/webhook-debugger.git cd webhook-debugger npm install -
Login to Cloudflare:
npx wrangler login
-
Create D1 database:
npx wrangler d1 create webhook-debugger-db
Copy the
database_idfrom the output. -
Update
wrangler.jsonc:- Replace
database_idwith your database ID - Change
nameto something unique (e.g.,webhook-debugger-YOUR_USERNAME)
- Replace
-
Initialize database:
npx wrangler d1 execute webhook-debugger-db --file=./schema.sql --remote
-
Create GitHub OAuth App:
- Go to https://github.com/settings/developers
- Click "New OAuth App"
- Set Homepage URL to:
https://webhook-debugger-YOUR_USERNAME.workers.dev - Set Callback URL to:
https://webhook-debugger-YOUR_USERNAME.workers.dev/api/auth/callback - Copy Client ID and Client Secret
-
Configure environment:
# Set the Client ID in wrangler.jsonc under vars.GITHUB_CLIENT_ID # Set secrets: echo "YOUR_GITHUB_CLIENT_SECRET" | npx wrangler secret put GITHUB_CLIENT_SECRET openssl rand -base64 32 | npx wrangler secret put COOKIE_SECRET
-
Build and deploy:
npm run build npm run deploy
-
Done! Visit
https://webhook-debugger-YOUR_USERNAME.workers.dev
For detailed instructions, see DEPLOY.md.
-
Create remote D1 database:
wrangler d1 create webhook-debugger-db # Update wrangler.jsonc with the database_id -
Run migrations:
wrangler d1 execute webhook-debugger-db --file=./schema.sql --remote
-
Set secrets:
wrangler secret put GITHUB_CLIENT_SECRET wrangler secret put COOKIE_SECRET
-
Update wrangler.jsonc:
- Set
GITHUB_CLIENT_IDinvars - Update
database_idfrom step 1
- Set
-
Build and deploy:
npm run deploy
This will build the frontend and deploy everything to Cloudflare Workers.
| Plan | Endpoints | Webhook History | Price |
|---|---|---|---|
| Free | 1 | 7 days | $0 |
| Pro | 10 | 90 days | $9/mo |
| Team | 50 | 90 days | $29/mo |
id(TEXT, PRIMARY KEY) - CUID2github_id(INTEGER, UNIQUE) - GitHub OAuth IDgithub_login(TEXT) - GitHub usernameemail(TEXT) - Optional emailavatar_url(TEXT) - Profile avatarplan(TEXT) - free | pro | teamcreated_at,updated_at(DATETIME)
id(TEXT, PRIMARY KEY) - CUID2user_id(TEXT, FK) - Reference to usersname(TEXT) - User-defined namepath(TEXT, UNIQUE) -/hook/{uuid}is_active(BOOLEAN)created_at(DATETIME)
id(TEXT, PRIMARY KEY) - CUID2endpoint_id(TEXT, FK) - Reference to endpointsmethod(TEXT) - HTTP methodsource(TEXT) - auto-detected: stripe, github, etc.source_verified(BOOLEAN) - signature verificationheaders(TEXT) - JSON string of headersbody(TEXT) - raw body (max 1MB)query_params(TEXT) - JSON string of query paramscontent_type(TEXT) - Content-Type headerreplay_count(INTEGER) - Number of replayslast_replay_at(DATETIME)last_replay_status(INTEGER)last_replay_response(TEXT) - Last replay response (truncated)received_at,created_at(DATETIME)
npm test┌─────────────────────────────────────┐
│ Cloudflare Edge │
│ │
│ Webhook Receiver (Workers) │
│ • POST /hook/{path} │
│ • Auto-detect source │
│ • Store to D1 │
│ │
│ Dashboard API (Workers) │
│ • Auth (GitHub OAuth) │
│ • Endpoints CRUD │
│ • Webhooks list/detail/replay │
│ • Full-text search │
│ │
│ D1 Database (SQLite) │
│ • users / endpoints / webhooks │
│ • FTS5 full-text search │
│ │
└─────────────────────────────────────┘
Issues and feature requests welcome! Feel free to open an issue or submit a pull request.
- Issues: https://github.com/brancogao/webhook-debugger/issues
- Discussions: https://github.com/brancogao/webhook-debugger/discussions
MIT
Webhook Debugger is designed for developers who need:
- Stripe webhook debugging - Test and inspect Stripe payment webhooks locally
- GitHub webhook testing - Debug GitHub App and OAuth App webhooks
- Shopify webhook inspector - Monitor Shopify store events and order webhooks
- Slack event debugging - Test Slack bot events and slash commands
- Twilio webhook testing - Debug SMS and voice call callbacks
- Generic HTTP webhook inspection - Capture any POST/GET webhook payload
Alternatives compared:
- webhook.site - Similar but not self-hostable, data on third-party servers
- RequestBin - Deprecated, no longer maintained
- ngrok - Tunnel tool, not a webhook inspector
- Beeceptor - Mock API, different use case
Related searches:
- self-hosted webhook inspector
- webhook debugger cloudflare workers
- stripe webhook testing tool
- github webhook debug
- webhook inspector open source
- webhook viewer self-hosted
Built with ❤️ by Auto Company