Gareth Wilson Gareth Wilson

Best Webhook Testing Tools for Local Development

Published


Testing webhooks locally is one of the most common friction points in backend development. Webhook providers like Stripe, GitHub, Shopify, and Twilio need to send HTTP requests to a publicly accessible URL — but your development server is running on localhost. Bridging that gap requires tooling, and the options range from simple SSH tunnels to purpose-built webhook development platforms.

In this guide, we're comparing five tools that solve the local webhook development problem. Each takes a different approach — from lightweight tunneling to webhook-specific infrastructure — so the right choice depends on whether you need a quick tunnel or a complete development workflow.

What to look for in a webhook testing tool

Before comparing tools, it's worth defining what actually matters when you're testing webhooks against a local server. The basic requirement — forwarding HTTP requests from a public URL to localhost — is table stakes. The differences emerge in everything around that:

Stable URLs: Webhook providers require you to register a URL. If that URL changes every time you restart your tunnel, you're reconfiguring provider settings constantly. Stable or persistent URLs reduce friction during active development.

Event inspection: Seeing the raw request — headers, body, query parameters — is essential for debugging. Some tools provide a web dashboard or terminal UI for this; others give you nothing beyond what hits your server.

Replay: When a webhook arrives and your handler has a bug, you want to fix the code and replay the same event without triggering a new one from the provider. Replay support turns a multi-step debugging cycle into a single iteration.

Filtering: If you're working on a specific event type (e.g., checkout.session.completed), filtering out irrelevant events reduces noise and lets you focus on the events that matter.

Team workflows: On larger teams, multiple developers may need to receive webhooks from shared sources simultaneously, each working on different features. Tools that support per-developer filtering or independent connections simplify parallel development.

Free tier viability: Many webhook tools restrict free tiers with session timeouts, bandwidth caps, or rate limits that make sustained development impractical. A viable free tier means you can actually use the tool day-to-day without hitting walls.

Here's how the five tools compare across these capabilities:

CapabilityHookdeck CLIngroklocaltunnelCloudflare Tunnellocalhost.run
Stable URLs✅ Freeℹ️ Paid only❌ Changes on restartℹ️ With custom domain setup❌ Paid only
Event inspection✅ Terminal UI + Console✅ Web dashboard
Replayℹ️ With modification
Filtering✅ Header, body, path, query
Team workflows✅ Per-developer connections
No account required
Free tier✅ 10,000 events/moℹ️ 1 GB/mo, 1 endpoint✅ Unlimited✅ Unlimitedℹ️ Speed throttled

Hookdeck CLI

Best for: Webhook-specific local development with event inspection, replay, and filtering.

Hookdeck CLI is purpose-built for local webhook development. Rather than providing a generic tunnel, it creates a webhook-aware connection between external providers and your local server — with a terminal UI for inspecting events, replay for debugging, and filtering to focus on the events you care about.

How it works

Install via npm (npm install -g hookdeck-cli) or Homebrew (brew install hookdeck/hookdeck/hookdeck) and run hookdeck listen 3000. No account is required — the CLI works out of the box. It creates a stable public URL, receives webhooks from providers, and forwards them to your local server. Events are captured and displayed in a terminal UI that shows the request payload, headers, and response — and every event can be replayed.

Hookdeck CLI works standalone for local development, but also integrates with the broader Hookdeck platform. You can use it with Hookdeck Console (a web-based event viewer with search and filtering) and the Event Gateway adds queueing, routing, and delivery management for production webhook workloads. You can start with just the CLI for local testing and adopt the platform incrementally as your webhook infrastructure matures.

Features and benefits

Event inspection and replay are Hookdeck CLI's primary differentiators. Every webhook that arrives is captured and can be inspected (headers, body, query parameters) in the terminal UI or the Hookdeck Console. When your handler has a bug, fix the code and replay the event instantly. No need to re-trigger events from the provider, no need to reconfigure anything.

Filtering lets you focus on specific events during development. Filter by header values, body content, path, or query parameters with CLI flags (--filter-body, --filter-headers, --filter-path, --filter-query). If you're working on checkout events, filter out everything else.

Team workflows are supported natively. Multiple developers can connect to the same webhook source independently, each with their own filters and local server. This eliminates the "one developer gets the webhooks, everyone else waits" problem that arises with shared tunnels.

Stable URLs are included by default. Your webhook URL doesn't change between sessions, so you configure your provider once and it works across restarts.

Limitations

The free tier without an account provides core functionality (local forwarding, inspection, and replay) but is limited to 10,000 events per month. Advanced features like full-text search, and team management require a free Hookdeck account. And while the CLI works standalone, the full value of the platform is best realized when paired with the Console and Event Gateway.

How much does Hookdeck CLI cost?

Hookdeck CLI is free to use with no account required. Creating a free Hookdeck account unlocks the 10,000 events per month with 3-day retention. Paid plans start at $39/month with pay-as-you-go pricing.

Bottom line

Hookdeck CLI is the strongest choice if you want more than a tunnel. The combination of stable URLs, event inspection, replay, filtering, and team support addresses the full local webhook development workflow, not just the "get a public URL" step. The no-account-required setup means you can get started as quickly as any tunneling tool, but with webhook-specific capabilities that reduce debugging iteration cycles significantly.

ngrok

Best for: Quick, well-documented tunneling with built-in traffic inspection.

ngrok has long been the go-to tool for local webhook testing. It's mature, well-documented, and supported in virtually every webhook provider's integration guide. When Stripe, Twilio, or GitHub explain how to test webhooks locally, they typically point to ngrok.

How it works

Install the CLI, authenticate with your account, and run ngrok http 3000. You get a public HTTPS URL that forwards traffic to your local server. A local web dashboard at http://127.0.0.1:4040 shows every request in real time (headers, body, response) lets you replay requests with one click.

Features and benefits

ngrok's inspection dashboard is its strongest feature for webhook development. Every request is logged with full headers and payload, and you can replay any request — including with modifications to the headers or body. This turns webhook debugging from a multi-step process (trigger event — see error — fix code — re-trigger event) into a tight loop (fix code — replay — verify).

The tool supports HTTPS by default, handles custom domains on paid plans, and has a mature ecosystem of integrations and documentation. If you search for how to test webhooks with any major provider, ngrok will appear in the official docs.

Limitations

ngrok's free tier has become increasingly restrictive. The 1 GB/month bandwidth cap, single active endpoint, and random subdomain assignment (which changes on restart) create friction for sustained development. The 2-hour session timeout on the free tier means your tunnel drops during longer development sessions, requiring you to restart and reconfigure your webhook URL. Paid plans start at $8/month for personal use, scaling to $20/month for Pro features like custom domains and IP restrictions.

How much does ngrok cost?

The free plan includes 1 endpoint and 1 GB/month bandwidth with a random .ngrok-free.app domain. The Personal plan at $8/month adds custom domains and removes the interstitial page. Pro at $20/month adds IP restrictions and additional endpoints. Enterprise plans are available for teams.

Bottom line

ngrok is the most recognized tool in this space, and its inspection and replay capabilities remain strong. The trade-off is an increasingly constrained free tier that pushes you toward paid plans for daily development use. If you need a quick tunnel with good debugging tools and don't mind paying, ngrok delivers.

localtunnel

Best for: Zero-cost, zero-configuration tunneling when you just need a public URL fast.

localtunnel is an open-source npm package that creates a public URL for your local server with minimal setup. No account, no authentication, no payment — just npx localtunnel --port 3000 and you have a working tunnel.

How it works

Install via npm (npm install -g localtunnel) or run directly with npx. The CLI creates a tunnel and assigns a random subdomain on loca.lt. You can request a specific subdomain with --subdomain, though availability isn't guaranteed.

Features and benefits

localtunnel's value is simplicity. It's free, open source (MIT licensed), requires no account or signup, and works with a single command. HTTPS is enabled by default. For developers who need to quickly test a webhook integration and don't need inspection or replay, localtunnel removes every barrier between you and a working public URL.

The tool is well-documented in the community, with tutorials covering integration with Stripe, PayPal, GitHub, and other webhook providers.

Limitations

localtunnel is a tunnel and nothing more. There's no request inspection, no replay, no event logging, and no dashboard. When a webhook arrives and your handler fails, you need to re-trigger the event from the provider to test your fix. The assigned URL changes on restart (custom subdomains help but aren't reliable), and the tunnel must remain active to receive webhooks — if the process stops, events are lost.

For teams, localtunnel doesn't support multiple developers sharing a webhook source or filtering events per developer.

How much does localtunnel cost?

Free. No paid tiers, no usage limits, no account required.

Bottom line

localtunnel is the fastest path from zero to a public URL. If you need a tunnel for a quick test and don't need inspection, replay, or stable URLs, it's hard to beat. The trade-off is that it's purely a tunnel — once you need to debug webhook payloads or replay events, you'll outgrow it.

Cloudflare Tunnel

Best for: Free, persistent tunneling for developers already in the Cloudflare ecosystem.

Cloudflare Tunnel (cloudflared) routes traffic from Cloudflare's edge network to your local server through an outbound-only connection. It supports both quick ephemeral tunnels and persistent named tunnels with custom domains — and both are free.

How it works

For quick testing, run cloudflared tunnel --url http://localhost:3000 to get a random trycloudflare.com subdomain. No account needed. For persistent URLs, create a named tunnel through your Cloudflare account and map it to a custom domain — the URL never changes, even across restarts.

The architecture differs from ngrok and localtunnel: cloudflared creates outbound-only connections to Cloudflare's edge, so your local machine never accepts inbound internet traffic directly. This is a security advantage, though it's largely transparent for webhook testing.

Features and benefits

The standout feature is persistent URLs at no cost. If you configure a named tunnel with a custom domain (on Cloudflare's free plan), your webhook URL stays stable indefinitely. This eliminates the URL reconfiguration cycle that plagues free tiers of other tunneling tools.

Cloudflare Tunnel also benefits from Cloudflare's network — DDoS protection, a global edge network, and integration with Cloudflare's broader security stack (WAF, Access). For teams that already use Cloudflare, the tunnel integrates naturally into existing infrastructure.

Limitations

Quick tunnels (the no-account option) have a 200 concurrent request limit, don't support Server-Sent Events, and generate URLs that change on restart — similar limitations to other free tunneling tools. The real value requires a Cloudflare account and a domain on Cloudflare DNS.

More importantly for webhook development: cloudflared is a tunnel, not a webhook tool. There's no request inspection, no replay, no event logging, and no filtering. You get the same debugging experience as localtunnel — whatever hits your server is all you see.

How much does Cloudflare Tunnel cost?

Free for all users, including persistent named tunnels with custom domains. No bandwidth limits, no session timeouts, no paid tiers for the tunnel itself.

Bottom line

Cloudflare Tunnel is the strongest pure tunneling option if you want stable URLs without paying for them. The persistent named tunnel feature solves the URL instability problem that affects every other free tunneling tool. The trade-off is that setup is more involved for persistent tunnels (Cloudflare account + DNS configuration), and like other tunneling tools, it provides no webhook-specific features like inspection or replay.

localhost.run

Best for: The absolute minimum-friction tunnel — no install, no account, just SSH.

localhost.run is an SSH-based tunneling service. It requires no software installation, no account creation, and no configuration. If you have SSH (and you do — it's on every major OS), you can create a tunnel.

How it works

Run ssh -R 80:localhost:3000 nokey@localhost.run and you get a public HTTPS URL pointing to your local port 3000. That's it. No binary to download, no package to install, no account to create. The URL is printed to your terminal, and traffic starts flowing immediately.

Features and benefits

localhost.run wins on simplicity. It is a low-friction path to a public URL — a single SSH command with no prerequisites. This makes it useful for quick one-off tests, especially in environments where you can't install software (restricted corporate machines, CI containers, etc.).

The paid plan ($9/month billed annually) adds custom domains and stable subdomains on lhr.rocks, plus support for up to 5 simultaneous tunnels.

Limitations

The free tier assigns URLs that change regularly and applies speed throttling. There's no request inspection, no replay, no dashboard, and no logging. Like localtunnel and Cloudflare quick tunnels, you're limited to whatever your server logs show you.

localhost.run supports HTTP/HTTPS only — no TCP tunneling. And while the zero-install approach is convenient, the SSH-based architecture means you're limited to SSH's capabilities for configuration and management.

How much does localhost.run cost?

The free tier requires no account and provides basic tunneling with changing URLs and speed limits. The custom domain plan is $9/month (billed annually) and includes stable subdomains, custom domains, and up to 5 tunnels.

Bottom line

localhost.run is the right tool when you need a tunnel in under 10 seconds and can't (or don't want to) install anything. The zero-install, zero-account approach is genuinely useful for quick tests. The trade-off is the same as every other pure tunneling tool: no webhook-specific features, no inspection, and no replay.

Which tool should you use?

The right choice depends on where you are in the spectrum between "I need a quick URL" and "I need a webhook development workflow."

Choose Hookdeck CLI if webhook testing is a meaningful part of your development workflow. No account required, and the combination of stable URLs, inspection, replay, filtering, and team support addresses the full webhook development loop — not just the tunnel. If you're spending time re-triggering events, digging through server logs, or coordinating webhook access across a team, Hookdeck CLI replaces that with purpose-built tooling.

Choose ngrok if you want a well-documented tunnel with built-in traffic inspection and replay. It's the most recognized tool in the space, and its debugging features are strong. Be prepared for free tier limitations that may push you to a paid plan for daily use.

Choose localtunnel if you want the simplest possible free tunnel and don't need inspection or replay. One command, no account, no cost — and you accept that it's purely a tunnel with no debugging features.

Choose Cloudflare Tunnel if you want persistent URLs without paying for them and you're comfortable with a Cloudflare account and DNS setup. The named tunnel feature solves URL instability at no cost. No webhook-specific features, but the strongest free tunneling option for stable endpoints.

Choose localhost.run if you can't install software and need a tunnel in seconds. SSH-based, zero-install, zero-account — the absolute minimum friction path to a public URL.

Try Hookdeck CLI for free — inspect, replay, and filter webhooks locally with the Hookdeck platform.


Gareth Wilson

Gareth Wilson

Product Marketing

Multi-time founding marketer, Gareth is PMM at Hookdeck and author of the newsletter, Community Inc.