DEV Community

WebhookLab
WebhookLab

Posted on

I built an open-source webhook debugger, shipped it 55 days ago, and here's what happened

Every developer has lost hours to the same problem.

Stripe sends a webhook. Your app logs nothing. You add a console.log. Redeploy. Wait for the next event. Still nothing. Two hours later you realize the URL you copy-pasted had a trailing space.

I got so annoyed by this loop that I spent 3 days building a tool to fix it. That was 55 days ago. Here's what happened.

What is WebhookLab?

WebhookLab is an open-source webhook testing and debugging platform. You get:

  • An instant webhook URL — no setup, no config, works in seconds
  • A real-time inspector showing full headers, body (pretty-printed JSON), method, IP, and timestamp
  • Replay — resend any captured webhook to any URL (localhost, staging, prod)
  • Project organization — group your webhooks by integration (Stripe, GitHub, Shopify, whatever)
  • One-click copy — as cURL, raw body, or headers

Hosted version: webhooklab.drivensolutions.xyz (free, no credit card)
Self-host: github.com/kuni-chan-driven/webhooklab (MIT license)

Why another webhook tool?

Webhook.site exists. Beeceptor exists. ngrok exists in this space.

The gaps I kept hitting:

  • Replay to different environments: I want to capture from prod, replay to localhost:3000. Most tools don't let you target an arbitrary URL cleanly.
  • Team sharing: Shared debug sessions without exposing API keys in the URL.
  • Pricing makes no sense: Webhook.site's free tier is 50 requests. 50. That's enough for one test run.
  • Open source for compliance reasons: If you're debugging production webhook payloads, you might not be allowed to send them to a third-party SaaS. MIT license, self-host it, done.

The technical build

Backend: Go + Gin

  • 19 API endpoints
  • 32MB RAM under load (for context: a basic Express.js app hits 50-100MB before you add anything)
  • 50 req/s sustained throughput on a 4-core VPS
  • 40+ automated tests, 100% pass rate

Frontend: HTML + Alpine.js + Tailwind

  • Zero build step — no Webpack, no Vite, no npm install ritual
  • Real-time updates via polling
  • Mobile responsive

Infrastructure: Docker + Nginx + Let's Encrypt on a $15/month VPS

Self-hostable with:

git clone https://github.com/kuni-chan-driven/webhooklab
cd webhooklab
cp .env.example .env
docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

That's it. Frontend at localhost:8080, API at localhost:8080/api/.

55 days in production: what I actually learned

Shipping is one thing. Keeping it running is another.

1. Scope discipline saved the launch

Original plan included a CLI tool. Cut it on day 2. Saved 2-3 days and the product launched with a tighter, better core. CLI can be v1.1. The temptation to add "just one more thing" is real — resist it.

2. 100% test coverage pays off immediately

We wrote 40+ tests before the first deploy. Found 4 real bugs during testing that would have hit production. Running tests before every deploy takes 8 seconds. Completely worth it.

3. Replay is the killer feature

Of everything we built, replay gets the most "oh that's useful" reactions. Once you can capture a real Stripe webhook from production and replay it to localhost:3000/webhook, the debugging loop gets dramatically tighter. No more triggering test payments to see what the payload looks like.

4. 32MB Go backend in production is genuinely impressive

After 55 days, our backend process is sitting at ~35MB RSS with actual traffic. This matters for self-hosting — you can run WebhookLab alongside your other services without dedicating a server to it.

5. Nginx config is always the weird bit

Everything else was smooth. Getting Nginx to correctly proxy both the frontend and API on the same domain with proper headers? That's where I lost an afternoon. Now it's documented in DEPLOYMENT.md.

6. People actually use free tiers

Free tier is 5,000 webhooks/month, 7-day retention. That's enough for serious development work. We're not here to bait-and-switch.

Quick start (under 5 minutes)

Option 1 — Use the hosted version:

  1. Sign up at webhooklab.drivensolutions.xyz
  2. Create a project (e.g., "Stripe Integration")
  3. Copy your webhook URL
  4. Paste it wherever you're sending webhooks
  5. Watch requests appear in real-time

Option 2 — Self-host:

git clone https://github.com/kuni-chan-driven/webhooklab
cd webhooklab
cp .env.example .env
# Edit .env with your DB credentials and JWT secret
docker-compose up -d
# Done. Access at http://localhost:8080
Enter fullscreen mode Exit fullscreen mode

What I want feedback on

We're 55 days in. The core product works. But I'm building the v1.1 feature list and genuinely want to know:

  • What's missing from your webhook debugging workflow?
  • Would you use the CLI tool? (capture to a URL, replay locally via command line)
  • What integrations matter most? (Stripe, GitHub Actions, Slack, etc.)
  • Is the pricing right? Free → Pro at $12/mo

Drop a comment below. I read every one.


WebhookLab is MIT licensed. The managed service is self-funded, 55 days old, and built by a small team. No VC money, no growth hacks — just a tool we needed and figured others did too.

Try it: webhooklab.drivensolutions.xyz
Star it: github.com/kuni-chan-driven/webhooklab


webhooks #webdev #go #opensource #devtools #debugging #api #productivity

Top comments (0)