Originally published at devtoolpicks.com
ngrok is still the name everyone types. It's also $20 a month before you're allowed to use your own domain, the free tier puts an interstitial page in front of every visitor, and it caps you at 3 endpoints, 1 GB and 20,000 requests. For a webhook test that's fine. For a client demo with a warning page on it, or a home server you want reachable all month, it isn't.
Cloudflare's Quick Tunnels hit the Hacker News front page again this week, and the thread doubled as a live comparison of everything below. Prices and limits here were checked on September 19, 2026.
Quick Verdict
| Tool | Best for | Price | Rating |
|---|---|---|---|
| Cloudflare Tunnel | Anything on your own domain, permanent | Free on Zero Trust Free | 4.5/5 |
| Tailscale Funnel | One service on a home box | Free on Personal, up to 6 users | 4/5 |
| Pinggy | Cheapest persistent URL, TCP and UDP | Free, Pro $2.50/month billed annually | 4/5 |
| LocalXpose | UDP and many tunnels, flat price | Free, Pro $8/month | 3.5/5 |
| zrok | Open source, self-host with no limits | Free hosted tier, Apache 2.0 | 4/5 |
What Are You Actually Tunnelling?
Three jobs hide behind "I need an ngrok alternative". A one-off webhook test wants zero setup and doesn't care if the URL dies in an hour. A client demo wants a clean URL with no warning page. A home server wants a permanent address on a domain you own, with no timeout. Pick the job first.
Cloudflare Tunnel
Cloudflare Tunnel comes in two flavours. Quick Tunnels run with one cloudflared command, need no account, and hand you a random trycloudflare.com URL. A named tunnel needs your domain on Cloudflare DNS and a Zero Trust account, which is $0 forever for teams under 50 users, and then it's a permanent hostname with Cloudflare's edge in front of it and no timeout.
Quick Tunnels have limits Cloudflare states plainly. Testing and development only, 200 in-flight requests before you get a 429, and no Server-Sent Events. The ngrok founder said in the HN thread that ngrok dropped anonymous tunnels because they were its biggest abuse source. Cloudflare's anonymous URLs carry the same risk.
Who shouldn't use it: anyone whose domain isn't on Cloudflare and doesn't want it there. And anyone who needs raw TCP or UDP without installing a client on the other end.
Pick this if you own a domain and want the permanent, free answer.
Tailscale Funnel
Tailscale Funnel takes a service on a machine in your tailnet and puts it on the public internet at your-tailnet.ts.net, with HTTPS certificates created for you. It's on every plan, including the free Personal plan for up to 6 users, and the next tier is $8 per user a month.
The constraints are specific. Funnel only listens on ports 443, 8443 and 10000, the hostname has to be on your ts.net domain, and Tailscale applies a bandwidth cap it doesn't publish. So it's a way to expose one or two things, not a hosting layer.
Who shouldn't use it: anyone who needs a custom domain or expects real traffic. The Tailscale alternatives post covers what to run instead if the mesh itself isn't a fit.
Pick this if you already use Tailscale and want to share one service from a home box without touching DNS.
Pinggy
Pinggy is the zero-install option. It runs over SSH, so ssh -p 443 -R0:localhost:3000 free.pinggy.io gets you a public URL with no binary to download. The free tier has HTTP, TCP, UDP and TLS tunnels, request inspection and unlimited data transfer, with a 60 minute timeout and a random subdomain. Pro is $2.50 a month billed annually for one persistent tunnel, one custom domain and one persistent TCP or UDP port.
Who shouldn't use it: anyone who needs several persistent tunnels. Pro is priced per seat with one persistent tunnel each, and unlimited tunnels sit on the enterprise plan.
Pick this if you test webhooks often and want the cheapest URL that never changes.
LocalXpose
LocalXpose is the one to look at when Pinggy's single-tunnel Pro plan runs out. The free Starter tier gives you 2 HTTP tunnels with time limits and an interstitial page. Pro is $8 a month, or $96 a year, for 10 tunnels covering HTTP, TCP, TLS and UDP, custom domains, wildcard tunnels with automatic certificates, and unlimited bandwidth.
Who shouldn't use it: anyone who only needs one tunnel, because Pinggy does that for less, and anyone with a domain already on Cloudflare, where the named tunnel is free.
Pick this if you run several services and want them all on your domains for one flat price.
zrok
zrok is the open source pick, built on OpenZiti and licensed Apache 2.0. The hosted free tier is $0 with 5 GB a day of bandwidth, 25 environments and 50 share backends, with an interstitial on unverified accounts that disappears once you add a payment method. Self-hosting has no limits at all. It also does private shares, where only another zrok user can reach the service.
Who shouldn't use it: anyone who wants a polished dashboard and a one-line install. There's more to learn than with Pinggy, and the paid hosted tiers are a sales conversation rather than a price on a page.
Pick this if you'd rather own the tunnel server than rent one.
How Should You Choose?
For a one-off webhook or a quick "look at this" link, run a Cloudflare Quick Tunnel or Pinggy and don't create an account for anything. For daily webhook testing, Pinggy Pro. For a permanent public address on your own domain, put the domain on Cloudflare and use a named tunnel. If you already run Coolify or another self-hosted panel, that tunnel is how you skip opening ports. For one service on a home machine you already have on Tailscale, Funnel. For a stack you want to own end to end, zrok on your own server, or bore and frp if you want something smaller.
Final Recommendation
Cloudflare Tunnel for anyone with a domain, because free with no timeout on your own hostname is the thing ngrok charges $20 a month for. Pinggy when you want that without moving DNS, for $2.50 a month.
Found a better option? Let me know on Twitter @devtoolpicks.
Top comments (0)