Manfath / Blog / Free ngrok alternatives

Free ngrok alternatives for localhost tunneling

You need to share a local dev server with a teammate, a client, your phone, or a webhook provider — and ngrok's free tier just bounced you off the random-URL-every-restart hump. Here are four free alternatives that earn their keep, with the tradeoffs that decide which one fits your situation.

The shortlist

The honest one-line summaries:

ToolFreeCustom domainTCP supportAuth required
Cloudflare TunnelYes — unlimitedYes (your domain)LimitedCloudflare account
localhost.runYes — random URLPaid onlyHTTP/HTTPS onlyNone (SSH key)
boreYes — self-hostableIf you self-hostYes (raw TCP)None
tailscale-funnelYes (3 funnels)Tailscale subdomainHTTPS onlyTailscale account
ngrok (free)YesNoYes (with limits)ngrok account

Cloudflare Tunnel — the default for most people

Cloudflare Tunnel (the daemon is cloudflared) is the strongest free option in 2026. It's free, unlimited, supports custom domains if you have one on Cloudflare, and runs as a long-lived daemon you can leave on.

The 30-second sharable URL form (no account, no domain) is one command:

brew install cloudflared
cloudflared tunnel --url http://localhost:3000

Output:

Your quick Tunnel has been created! Visit it at:
  https://random-words-here.trycloudflare.com

The URL changes each restart. If you want a stable URL on your own domain, the named-tunnel flow is a one-time 5-minute setup.

Pick Cloudflare when: you want a free default that scales from "share a link in five seconds" to "production-grade tunnel on my own domain" without changing tools.

localhost.run — zero-install with just SSH

If you don't want to install anything, localhost.run is the answer. It uses SSH, which is preinstalled on macOS:

ssh -R 80:localhost:3000 nokey@localhost.run

You'll get a random *.lhr.life URL. Free tier is HTTP/HTTPS only and the URL is ephemeral.

Pick localhost.run when: you're on someone else's machine, can't install software, and just need the URL once.

bore — minimal and self-hostable

bore is a tiny Rust tunnel server. The hosted instance is free; you can also run your own on a $5 VPS in five minutes.

brew install bore-cli
bore local 3000 --to bore.pub

Unlike the HTTP-only options, bore tunnels raw TCP, which means it works for things like Postgres, Redis, or SSH itself.

Pick bore when: you need TCP (not just HTTP), or you want to run your own tunnel server with no fuss.

tailscale-funnel — the right pick if you're already on Tailscale

If you already have Tailscale set up, tailscale funnel exposes any local HTTPS service to the public internet on your *.ts.net subdomain. It's free (3 funnels per account) and stable across restarts.

tailscale funnel 3000

The URL stays the same forever, which is great for webhook endpoints during dev.

Pick tailscale-funnel when: you're already a Tailscale user and want a stable, no-extra-tool URL.

What about ngrok itself?

ngrok's free tier still works for quick demos. The catches in 2026:

If you need exactly the ngrok feature set (interactive request inspector, replay), it's still worth its tier. For "I just need a URL," any of the four above is simpler.

Tunnel from the menu bar.
Manfath has Cloudflare and ngrok built in. Pick a port, click Tunnel, the public URL lands in your clipboard. Add your own provider command in seconds.

Decision flow

Security caveats — read this once

Every option here exposes a process running on your laptop to the internet. That means:

Manfath shows active tunnels in its menu bar so you can see at a glance what's still exposed.


Read next