Compare

ngrok alternatives, honestly compared

ngrok is a good product — most people looking for an alternative are reacting to one of two things: per-seat pricing that grows with the team, or endpoint limits that pinch exactly when a project gets busy. Here are the five tools people actually switch to, and who each one is right for.

Bias declared: we make Jetty, and it's on this list. Every entry names what the tool is genuinely best at, including the cases where you should not pick us.

1. Jetty — for showing work to clients and crews

Jetty's difference is the gallery: share every server you're running — the app on :3000, the admin on :8080, the API — as one page with live status, instead of a handful of separate URLs. Pricing is flat per crew ($7/mo Captain, $19/mo Fleet), so adding a collaborator never adds a line item. Request inspection, reserved subdomains, and custom domains come with Captain.

Not for you if: you need an API gateway, in-process SDKs, or self-hosting. See the honest gaps in Jetty vs ngrok.

2. Cloudflare Tunnel — for production origins, free

If your domain already lives on Cloudflare and you're exposing something long-lived, cloudflared is free, production-grade, and sits behind Cloudflare's whole security stack. The tradeoff is ceremony: DNS on Cloudflare, per-hostname config, and a dashboard built for infrastructure rather than for "look at this branch."

Pick it when: the thing you're exposing is closer to production than to work-in-progress. Full comparison.

3. Expose — for self-hosters

Expose is the open-source option: a PHP tunnel server you can run on your own domain and infrastructure, with hosted plans if you'd rather not. If owning the entire stack matters — audit, fork, white-label — this is the genuinely different answer on the list.

Pick it when: self-hosting is a requirement, not a preference. Full comparison.

4. Tailscale Funnel — for teams already on Tailscale

If everyone who needs to see your work is already in your tailnet, Tailscale Serve shares privately with zero extra product, and Funnel opens a service to the public internet on your machine's ts.net hostname. It's a networking layer first; the sharing features stop at the URL.

Pick it when: the audience is internal and Tailscale is already installed everywhere. Full comparison.

5. localhost.run — for one-off shares with zero install

One SSH command, no install, no account for the basics. For a quick "check this out" from any machine with an SSH client, it's the least-friction option in existence. There's no dashboard, no persistence, and no team anything — by design.

Pick it when: you'll use the URL once and never think about it again. Full comparison.

The 30-second decision

  • Showing WIP to clients or a crew, more than one server — Jetty.
  • Production service, domain already on Cloudflare — Cloudflare Tunnel.
  • Must self-host — Expose.
  • Audience is inside your tailnet — Tailscale Serve/Funnel.
  • One-off share, zero install — localhost.run.
  • API gateway, SDKs, enterprise scale — stay on ngrok.

Reflects publicly documented behavior as of August 2026. Corrections welcome: support@usejetty.online.

Judge the gallery for yourself

The live demo shows what visitors see. Dinghy is free — no card, no clock.