meshr / meshr vs ngrok
Comparison

meshr vs ngrok: a mesh, not just a tunnel.

ngrok is a fast way to expose one local service through its cloud. meshr gives you a private mesh network — with tunneling as one feature, not the whole product. Here's an honest, feature-by-feature look.

ngrok isn't a mesh VPN.

It's a single-service tunnel/ingress broker. The ngrok agent opens an outbound-only connection to ngrok's cloud edge, which routes public traffic to one local service per tunnel/endpoint — strictly one service at a time, with no mesh, no peer-to-peer connectivity, and no concept of private network membership. meshr is a private mesh network where devices reach each other directly, and exposing a service publicly (tunneling) is one feature of that mesh, not the entire product. The overlap between the two is real for public tunnel exposure, but narrower than "same category."

Diagram comparing ngrok's single-service outbound tunnel to its cloud edge to meshr's private mesh network, where tunneling is one feature among direct device-to-device connectivity
Feature by feature

meshr vs ngrok, side by side.

Grounded in ngrok's own public docs and pricing pages.

ngrokmeshr
Category Single-service tunnel/ingress broker to ngrok’s cloud edge Full private mesh network — tunneling is one feature of it
Agent Closed-source ngrok agent meshr agent
Connectivity Outbound-only tunnel to ngrok’s cloud; one local service per tunnel/endpoint Mesh-wide device-to-device reachability, plus tunneling
Traffic Policy engine YAML + CEL-expression rules for routing/auth/rate-limiting/transformation at ngrok’s edge Zero Trust device/group access policies
WAF Built-in, managed OWASP Top 10 rules Not published
Kubernetes Native Ingress + Gateway API Operator Not published
Custom / wildcard domains Paid tiers only DNS-verified with one TXT record, on any DNS provider — no vendor lock-in
SSO / RBAC $10/user/mo add-on on Pay-as-you-go; included at Enterprise OIDC-based SSO included
Free tier 3 online endpoints, 1GB/mo, 20,000 requests/mo, ngrok-branded domain only, shows visitors an interstitial warning page Free: 5 users, 50 devices, 2 tunnels
Pricing Free → Hobbyist $8-10/mo → Pay-as-you-go from $20/mo base + metered ($0.10/GB, $1/100k requests) → Enterprise custom Free tier, then $7/user/mo Pro, $99/mo flat Team (25 users)

Pricing and feature details as published by ngrok; subject to change on their end.

Honest tradeoffs

Where each one actually wins.

Different scope, different strengths — here's where ngrok genuinely has the edge, and where meshr does.

M

Where meshr wins

  • A meshr tunnel is one feature inside a full private mesh network — the same account also gets device-to-device mesh access, SSH, and Zero Trust device policies, none of which ngrok offers at any tier.
  • No bandwidth or request metering concern for internal mesh traffic, unlike ngrok’s metered public-tunnel model.
  • Custom domains are DNS-verified with one TXT record on any DNS provider — no vendor lock-in and no paid-tier gate.
  • meshr’s free tier has no interstitial warning page and no 1GB/20k-request ceiling for tunnel traffic.
ng

Where ngrok wins — honestly

  • A purpose-built API-gateway feature set — a CEL-based Traffic Policy engine, managed WAF, and a native Kubernetes Ingress/Gateway API operator — more specialized and mature than meshr’s tunneling if your primary need is a public API gateway/ingress layer rather than private network access.
  • A very fast, well-known path for quick one-off demo tunnels, with broad developer mindshare.

Already using ngrok to expose a service?

meshr isn't a full ngrok replacement, so this isn't a rip-and-replace pitch. If your ngrok tunnel is standing in for connectivity you'd rather have on a real private network — reachable by your team without going through a public URL — see how moving that use case to meshr adds mesh-wide access with tunneling included, not metered separately.

curl -fsSL https://get.meshr.to/install.sh | sudo bashmeshr login -t <setup-key>meshr tunnel http 3000 --name my-app
Questions

meshr vs ngrok FAQ.

Is meshr a replacement for ngrok?

For quick one-off public tunnels and API-gateway features (Traffic Policy engine, managed WAF, native Kubernetes Ingress), ngrok is more specialized. Where meshr differs is scope: an ngrok tunnel is the entire product, while a meshr tunnel is one feature of a full private mesh network — the same account also gives you device-to-device connectivity, SSH, and Zero Trust policies that ngrok doesn’t offer at any tier.

Does ngrok do mesh networking?

No. ngrok has no mesh, no peer-to-peer connectivity, and no private network membership concept — the agent opens an outbound-only connection to ngrok’s cloud, which routes public traffic to one local service per tunnel/endpoint. It’s strictly one-service-at-a-time exposure.

Are ngrok’s free-tier limits usable for production traffic?

ngrok’s free tier caps at 3 online endpoints and 1GB of data transfer / 20,000 requests per month, with an ngrok-branded domain and an interstitial warning page shown to visitors — tight limits not viable for continuous production traffic without upgrading. meshr’s free tier includes 2 tunnels with no equivalent bandwidth ceiling on internal mesh traffic.

Do I need a paid ngrok plan for custom domains?

Yes — custom and wildcard domains are gated behind ngrok’s paid tiers (Pay-as-you-go and Enterprise). meshr verifies domain ownership with a single DNS TXT record on any plan, and your DNS can stay with any provider.

Is ngrok’s agent open source?

No — the ngrok agent is closed-source, and there’s no self-hosted control-plane option at any published tier. meshr is cloud-hosted today with a self-hosted build on the roadmap.

Get a mesh, with tunneling included.

Start with a free account. No credit card required.

expose a local service
# Get connected and expose a service in 3 commands
$ curl -fsSL https://get.meshr.to/install.sh | sudo bash
$ meshr login -t <setup-key>
$ meshr tunnel http 3000 --name my-app

 Connected! IP: 10.0.0.5
 DNS: my-server.meshr
 Tunnel active: https://my-app-acme.tunnel.meshr.to