10 Best ngrok Alternatives for Webhook Testing (2026)
10 Best ngrok Alternatives for Webhook Testing
ngrok is the default recommendation for exposing localhost to the internet. It works, it's well-documented, and the free tier is functional.
But it's not the only option, and depending on your needs, it might not be the best one.
Why Look for Alternatives?
A few common pain points with ngrok:
- Free tier URLs change every restart. Annoying when you're constantly updating webhook configs.
- Pricing jumps from free to $8/month for basic features, $20/month for custom domains.
- Rate limits on the free tier can interrupt development.
- No request history unless you pay. Debugging is harder without seeing what was sent.
Let's look at what else is out there.
1. Cloudflare Tunnel (Free)
If you already use Cloudflare, this is a no-brainer. Cloudflare Tunnel (formerly Argo Tunnel) is free and well-maintained.
cloudflared tunnel --url http://localhost:3000
Pros:
- Free with no artificial limits
- Backed by Cloudflare's infrastructure
- Can connect to your own domain
Cons:
- Requires Cloudflare account
- Setup is more involved than ngrok
- No built-in request inspection
Best for: Teams already using Cloudflare.
Get started with Cloudflare Tunnel
2. localhost.run (Free)
Dead simple. No installation required—just SSH. Check out localhost.run.
ssh -R 80:localhost:3000 nokey@localhost.run
Pros:
- No signup, no installation
- Works anywhere with SSH
Cons:
- URLs change on reconnect
- Limited features
- Reliability varies
Best for: Quick one-off testing when you don't want to install anything.
3. Tailscale Funnel (Free)
Tailscale's Funnel feature exposes local services to the internet through their network.
tailscale funnel 3000
Pros:
- Free tier is generous
- Integrates with Tailscale VPN
- Stable URLs with your Tailscale domain
Cons:
- Requires Tailscale setup
- Overkill if you only need tunneling
Best for: Teams already using Tailscale for networking.
4. localtunnel (Free, Open Source)
localtunnel is open source and npm-installable.
npx localtunnel --port 3000
Pros:
- Free and open source
- Easy to use
- Can request specific subdomain
Cons:
- Reliability issues (shared infrastructure)
- URLs can be slow to connect
- No request logging
Best for: Quick tests when reliability isn't critical.
5. Expose (Self-Hosted)
Expose is a PHP-based tunnel server you can self-host.
Pros:
- Self-hosted = full control
- Free (you pay for hosting)
- Custom domains
Cons:
- Requires server setup
- PHP dependency
- Maintenance overhead
Best for: Teams with ops capacity who want full control.
6. bore (Open Source)
bore is a minimal Rust-based tunnel. Fast and simple.
bore local 3000 --to bore.pub
Pros:
- Lightweight and fast
- Open source
- Can self-host the server
Cons:
- Fewer features than ngrok
- Smaller community
Best for: Developers who want something minimal.
7. Pagekite (Paid, Self-Hostable)
Pagekite has been around longer than ngrok. Reliable and battle-tested.
Pros:
- Stable and mature
- Self-hosting option
- Pay-what-you-want pricing
Cons:
- Interface feels dated
- Less popular means fewer resources
Best for: Long-running tunnels where stability matters.
8. Telebit (Free, Open Source)
Telebit is a Node.js-based tunnel with Let's Encrypt integration.
Pros:
- Free and open source
- Automatic HTTPS
- Can self-host
Cons:
- Smaller community
- Documentation could be better
Best for: Node.js developers comfortable with self-hosting.
9. Webhook Capture Services (Different Approach)
This is a fundamentally different approach. Instead of tunneling traffic in real-time, services like ThunderHooks capture webhooks and store them for later inspection and replay.
The workflow:
Stripe → ThunderHooks (captures & stores) → You inspect when ready → Replay to your tunnel
Why developers switch to this:
- Your laptop can be closed. Webhook arrives at 3am? It's waiting in your dashboard tomorrow.
- Set the URL once, forever. No more updating Stripe/GitHub every time ngrok restarts. Configure
thunderhooks.com/h/my-projectand forget it. - Replay the same webhook 50 times. Debugging a tricky handler? Replay until it works. No need to trigger real Stripe payments repeatedly.
- See what's coming before you code. Inspect the exact headers and payload Stripe sends before writing your handler.
- 30-day history. "What did that webhook look like last week?" You can find out.
Pros:
- Permanent URLs that never change
- Full request history with headers, body, timing
- Replay and edit payloads before sending
- Works offline—webhooks queue up like email
- Debug production issues by capturing real traffic
Cons:
- Two-step process (capture → replay) instead of direct forwarding
- Need a tunnel running when you replay (but not 24/7)
Best for: Teams tired of babysitting tunnels. Debugging webhook handlers. Inspecting payloads before coding. Testing edge cases by editing payloads.
10. Provider-Specific CLIs
Stripe, Twilio, and other providers have their own CLI tools with webhook forwarding.
stripe listen --forward-to localhost:3000/webhooks/stripe
Pros:
- Deep integration with the provider
- Can trigger test events
- Handles signature verification
Cons:
- Only works for that specific provider
- Need multiple tools for multiple providers
Best for: Development focused on a single provider.
Comparison Table
| Tool | Free Tier | Stable URLs | Request History | Self-Host |
|---|---|---|---|---|
| ngrok | Yes (limited) | Paid only | Paid only | No |
| Cloudflare Tunnel | Yes | Yes | No | No |
| localhost.run | Yes | No | No | No |
| Tailscale Funnel | Yes | Yes | No | No |
| localtunnel | Yes | Partial | No | Yes |
| bore | Yes | No | No | Yes |
| Webhook capture | Varies | Yes | Yes | Some |
Which Should You Choose?
Already using Cloudflare? Use Cloudflare Tunnel.
Already using Tailscale? Use Tailscale Funnel.
Need to inspect payloads and debug? Use a webhook capture service.
Just need a quick tunnel? localhost.run or localtunnel.
Want full control? Self-host bore or Expose.
Working with Stripe specifically? Stripe CLI.
There's no single best answer. The right tool depends on what you're building and how you work. Most teams end up using a combination—tunneling for real-time testing, capture services for debugging.