← All articles

ngrok vs tailscale

ngrok vs Tailscale: public tunnel or private mesh?

ngrok and Tailscale solve different network problems. This guide compares their architecture, protocols, free tiers, Funnel, remote network access, and the local review use case.

By wiremaven teamPublished May 22, 2026Updated November 12, 20268 min read
In this article

The ngrok vs Tailscale comparison gets confusing because the two tools start from different network models. ngrok exposes services through public endpoints. Tailscale connects devices into a private WireGuard-based mesh, called a tailnet, then uses Serve or Funnel to share services.

Both can reach something running on a machine behind NAT. They don’t solve the same default job.

This guide compares architecture, protocols, free tiers, public access, remote network access, and the local review workflow where a temporary link matters more than a permanent network. The vendor facts below were checked against the ngrok and Tailscale docs on November 12, 2026.

ngrok vs Tailscale: the short version

Use ngrok when you need a public endpoint for a local service, a webhook callback, or an API test.

Use Tailscale when you want devices, servers, and users inside a private network. Use Tailscale Serve to share a local service inside the tailnet. Use Tailscale Funnel to expose a local service to the public internet.

Use wiremaven when the job is a short local review session. It’s a Chrome extension that creates temporary encrypted links with 15, 30, or 60 minute TTLs, uses an outbound WebSocket relay, and shows viewer, request, and failure signals during the review.

Architecture: endpoint tunnel vs mesh network

ngrok starts with an agent and an endpoint. You run a command such as:

ngrok http 3000

ngrok creates a public HTTPS endpoint, handles the TLS certificate and termination, and forwards traffic to your local port. Its Traffic Inspector records each HTTP request and response that passes through the endpoint.

Tailscale starts with a tailnet. Each device that joins gets a stable 100.x.y.z address that stays the same wherever the device moves, and devices talk to each other over encrypted WireGuard connections. That model fits remote access, private admin tools, internal services, SSH, and team device access.

Tailscale Serve and Funnel sit on top of that mesh. Serve shares a local service inside the tailnet. Funnel exposes it to the internet.

The key difference: ngrok gives you a public service endpoint first. Tailscale gives you a private network first.

Protocols

ngrok has three endpoint types: HTTP/S for webhooks, APIs, and apps; TCP for raw streams such as SSH; and TLS for workloads you encrypt yourself. On the free plan, TCP endpoints need a payment method on the account. Raw TLS endpoints need the Pay-as-you-go plan (ngrok pricing); Hobbyist covers HTTP and TCP only.

Tailscale works at the network layer. In its default kernel mode, all IP protocols are supported between devices on the tailnet. Funnel is narrower: it only works over TLS-encrypted connections and only listens on ports 443, 8443, and 10000.

Public sharing with Tailscale Funnel

Tailscale Funnel exposes a local service to the public internet for people who don’t use Tailscale. The Funnel docs describe an encrypted tunnel from the internet to a specific resource on your device. Funnel relay servers pass the traffic through a TCP proxy without decrypting it, and your device’s IP address stays hidden.

The setup has requirements. Tailscale lists Funnel as beta, available on all plans, and requiring Tailscale v1.38.3 or later, MagicDNS, HTTPS certificates for the tailnet, and a funnel node attribute in the tailnet policy file. Funnel can only use DNS names in your tailnet’s domain, so the public URL looks like machine-name.tailnet-name.ts.net, and it only listens on ports 443, 8443, and 10000 (Funnel CLI reference). Funnel traffic is also subject to bandwidth limits you can’t configure.

The command looks simple once the account and tailnet pieces are in place:

tailscale funnel 3000

Use Funnel when your team already uses Tailscale and the public exposure model fits your policy. It’s heavier than a throwaway review URL for someone who doesn’t have a tailnet.

Free tiers and pricing

Limits and prices as listed on November 12, 2026:

  • ngrok free: 1 GB of data transfer, 20,000 HTTP requests, and 5,000 TCP connections a month, plus one dev domain tied to your account (free plan limits). ngrok shows an interstitial warning page in front of all HTML browser traffic on the free tier. A visitor clicks through once, and a cookie hides it for that domain for 7 days.
  • ngrok paid: Hobbyist is $10 a month (ngrok pricing). Pay-as-you-go starts at $20 a month and adds TLS endpoints.
  • Tailscale free: the Personal plan is $0 for up to 6 users, for non-commercial use only (Tailscale pricing).
  • Tailscale paid: Standard is $8 per user per month.

The warning page matters for reviews: a client who opens a free ngrok link sees an ngrok warning before your app.

Webhooks and API testing

ngrok has an advantage for webhooks. Stripe’s webhook docs suggest a tunneling tool such as ngrok when you don’t have a public HTTPS URL, though the Stripe CLI’s stripe listen command forwards events without one. GitHub’s webhook testing guide uses smee.io and lists ngrok as an alternative. Traffic Inspector shows the headers, bodies, and status codes, and can replay a request.

Tailscale can route private service traffic between devices, but webhook providers on the public internet can’t reach a private tailnet address unless you expose a public route through Funnel or another public endpoint.

For webhook testing, start with the tool your provider’s docs support. For an internal service between team devices, Tailscale often fits better.

Remote access to customer networks

Reaching services inside someone else’s network, such as a customer site or a lab behind a firewall, is a different job from sharing localhost.

Tailscale handles it with a subnet router. One device on the remote network runs Tailscale and advertises its routes, so the other devices on that network become reachable from the tailnet without installing the Tailscale client on each one. Subnet routers are available on all plans. A site-to-site setup bridges two or more networks the same way.

ngrok documents site-to-site connectivity for reaching APIs, databases, and other private services in remote networks. The agent connects outbound over TLS on port 443, so the remote side needs no firewall changes or open ports. For SSH and RDP, one ngrok agent on a server inside the remote network acts as the gateway.

The difference follows the architecture. Tailscale extends your private network to the remote site. ngrok connects you to specific services inside it.

Client and stakeholder review

A client review has a different shape. The reviewer does not need access to your full network. They need one link to one local build for a short window.

That review needs:

  • a public HTTPS URL,
  • no reviewer account,
  • a short expiry,
  • a way to see whether the reviewer joined,
  • request and failure signals while the session runs.

ngrok can create the public URL. Tailscale Funnel can expose a local service if your tailnet is configured. wiremaven centers the review itself. Start your dev server, open the wiremaven popup in Chrome, enter the port, pick a 30 minute window, and click Start.

The link expires after the selected TTL. The developer sees live session signals from the relay in the popup. The reviewer does not need a wiremaven account.

For product setup, see the wiremaven docs. For the relay model, read how wiremaven works.

Comparison table

Dimension ngrok Tailscale wiremaven
Core model Public endpoints to services Private mesh network Temporary review link
Protocols HTTP/S, TCP, and TLS endpoints Any IP traffic inside the tailnet; Funnel is TLS only, on ports 443, 8443, and 10000 HTTP to a localhost port, served to reviewers over HTTPS
Public localhost sharing Yes Yes, with Funnel Yes
Internal team access Possible, but not the core model Strong fit Not the core model
Remote network access Site-to-site connectivity; SSH and RDP through an agent Subnet routers and site-to-site No
Webhook testing Strong fit Needs public exposure Possible, review-focused
Developer setup ngrok agent Tailscale client and tailnet Chrome extension, nothing added to the project
Reviewer account No, but free-plan links show browser visitors a warning page first No for Funnel viewers; setup needs a tailnet No
Free tier 1 GB transfer and 20,000 HTTP requests a month Personal plan, up to 6 users, non-commercial use only Free forever; Pro coming soon
Session visibility Traffic Inspector Tailnet and service context Viewer, request, and failure signals
TTL-first workflow Endpoints last while the agent runs Depends on setup 15, 30, or 60 minutes

ngrok and Tailscale facts checked against their docs and pricing pages on November 12, 2026.

Choose by use case

Choose ngrok for webhook testing, API callbacks, and public endpoint workflows where inspection matters.

Choose Tailscale for secure team access to private devices and services. Add Serve for tailnet-only service sharing. Add Funnel when public exposure through Tailscale matches your policy. Add a subnet router for ongoing access to a customer or remote network.

Choose wiremaven for a local review link that should exist for minutes, not as a durable network path.

FAQ

Is Tailscale a replacement for ngrok?

Tailscale can replace ngrok for some access patterns, such as private team access and remote network access. ngrok remains a better fit for public webhook testing and endpoint-centric development workflows.

Is Tailscale Funnel like ngrok?

Tailscale Funnel and ngrok can both expose a local service to the internet. Funnel sits inside the Tailscale tailnet model, only serves TLS traffic on ports 443, 8443, and 10000, and uses your tailnet’s ts.net domain. ngrok starts from public endpoints and supports HTTP/S, TCP, and TLS.

Does ngrok’s free plan work for client reviews?

It works, but ngrok shows an interstitial warning page in front of HTML browser traffic on the free tier, so a client sees an ngrok warning before your app. Paid plans don’t show it.

Which should I use for a client review?

Use a short-lived review link with live session signals. A client needs the app, and you need to know whether they joined and what failed.

Start with one local port

For a scoped review link:

  1. Add the wiremaven Chrome extension.
  2. Start your dev server, open the popup, and enter the port, such as 3000.
  3. Pick a 30 minute window, click Start, and copy the link.

Related: how wiremaven works.