← Back to Blog

10 Best ngrok Alternatives for Webhook Testing (2026)

By ThunderHooks Team ·
ngrokwebhookstunnelingtoolscomparison

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.

localhost.run documentation

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.

Tailscale Funnel examples

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.

localtunnel on npm

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-project and 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:

Cons:

  • Only works for that specific provider
  • Need multiple tools for multiple providers

Best for: Development focused on a single provider.

Stripe CLI documentation

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.

Resources

Ready to simplify webhook testing?

Try ThunderHooks free. No credit card required.

Get Started Free