I have been running a fleet of seven small aggregator sites on Hostinger plus a couple of VPS boxes for years, and the network plumbing between my laptop, those VPS instances, and the occasional client staging server has been through every iteration: raw OpenVPN, plain WireGuard configs, Tailscale, and a Twingate trial for one enterprise client who needed audited contractor access. So when someone on a dev WhatsApp group asked which mesh VPN to pick in 2026, I realized the honest answer is: it depends on whether you are connecting devices or gating applications, and that distinction is the difference between Tailscale and Twingate getting picked.
This piece compares the four most-asked options for developer teams in 2026 — Tailscale, ZeroTier, Twingate, and Cloudflare Zero Trust — on architecture, pricing as of May 2026, hands-on quirks I have hit, and the real decision matrix. No fluff, no “best for everyone” cop-outs.
The category split nobody explains clearly
Before pricing, you need to know that these four products are not in the same bucket, even though every comparison post lumps them together.
- Tailscale and ZeroTier are mesh VPNs. Every device joins a virtual network and gets a private IP. Two devices on the network talk peer-to-peer, encrypted, regardless of whether they sit behind NAT.
- Twingate and Cloudflare Zero Trust are ZTNA (zero trust network access) platforms. They do not give your laptop a network IP — they proxy access to specific applications based on identity and policy.
The practical difference: with Tailscale, your laptop can SSH to a VPS, RDP to a Windows box, and curl an internal Postgres — all using the same overlay. With Twingate, the admin pre-registers each “Resource” (a hostname, a CIDR, a port) and assigns groups. A developer never sees the network — they just hit postgres.internal:5432 and it routes if their identity is allowed.
Both models have a place. For my dev workflow (small team, lots of one-off SSH sessions, homelab boxes, no compliance auditor breathing down my neck), mesh VPN wins. For a regulated enterprise with contractors who need exactly three internal apps and nothing else, ZTNA wins. Mixing the categories in a head-to-head is where most blog posts go wrong.
Pricing in May 2026 — the actual numbers
Plans shift every few quarters, so here is what the four are charging right now. I am ignoring annual discounts and add-ons; these are the headline monthly rates.
| Product | Free tier | Entry paid | Pricing axis |
|---|---|---|---|
| Tailscale | Personal: 6 users, unlimited devices, 50 tagged resources, 1000 ephemeral-resource-minutes/mo | Standard: $8/user/mo | Per user |
| ZeroTier | Basic: 25 devices on one network | Professional: ~$5/mo for 100 devices; Business: by device | Per device |
| Twingate | Starter: up to 5 users, 2 devices/user, 1 admin | Teams: $10/user/mo; Business: $20/user/mo | Per user |
| Cloudflare Zero Trust | Free: up to 50 users, all core ZTNA features | Pay-as-you-go: $7/user/mo (removes 50-user cap, adds 30-day log retention) | Per user |
Two things jump out. First, Cloudflare Zero Trust’s free tier — up to 50 users with no feature ceiling on core ZTNA — is in a different league for a budget-constrained startup. Second, ZeroTier’s per-device pricing is the right shape if you are wiring up IoT gear or a print farm, but wrong if every developer has a laptop, phone, tablet, and three VMs.
The free Tailscale tier expanded earlier this year — it went from 3 to 6 users and from 100 to unlimited devices, which quietly killed about half of the cost-comparison posts written in 2025. Worth double-checking those if you read them recently.
How they actually work under the hood
Tailscale
Tailscale is WireGuard with a control plane bolted on. Each node runs a userspace WireGuard tunnel; a coordination server (login.tailscale.com) hands out keys, ACLs, and peer addresses. When two of your nodes want to talk, they try direct UDP first; if NAT punching fails, they fall back to a DERP relay server. The relays only see encrypted traffic — the keys never leave your devices.
What this means in practice: nodes on the same LAN or with friendly NATs (most home and office routers) get direct connections at near line-rate. Nodes behind symmetric NAT, carrier-grade NAT, or strict corporate firewalls fall back to DERP, and that’s where throughput drops — relayed connections can settle in the 30–100 Mbps range in stress tests, which is fine for SSH but rough for a 4K file copy.
ZeroTier
ZeroTier is older than Tailscale and uses a custom protocol instead of WireGuard. The model is “virtual Layer 2 Ethernet” — joining a network feels like plugging in a cable on a shared switch, which means broadcast and multicast work (handy for legacy LAN-discovery protocols like mDNS, SMB, or Sonos). Tailscale operates at Layer 3 and explicitly does not relay broadcast traffic.
The Layer 2 model is also the thing that makes ZeroTier interesting for embedded and gaming use cases. If you want to network a bunch of Raspberry Pis or run a LAN-only multiplayer game over the internet, ZeroTier handles the discovery primitives that Tailscale skips.
Twingate
Twingate flips the model. There is no virtual network. Instead, you deploy a Connector — a small Docker container or binary — inside whatever network holds the resource you want to expose (your VPC, your office, your home lab). The Connector dials out to Twingate’s relay. A user’s Twingate client, after SSO, gets policy that says “you can reach db.prod:5432” and the client routes that specific traffic over the relay path to the Connector.
The win: no inbound ports, no IP-allowlist maintenance, and access is per-application and per-identity. The friction: every resource has to be explicitly registered. If you want to ad-hoc SSH to a brand new VM, an admin has to add it first.
Cloudflare Zero Trust
Cloudflare’s offering is two tools stitched together: Cloudflare Tunnel (formerly Argo Tunnel) which works like a Twingate Connector — an outbound-only daemon called cloudflared that exposes private services — and Access, the identity-aware proxy layer. There is also WARP, the consumer-grade client that can route a device’s traffic through Cloudflare’s edge as a secure web gateway.
You can run Cloudflare Zero Trust in three modes: pure ZTNA (Access-protected web apps), private network access (route a CIDR over a Tunnel), or full SASE (every device routes through WARP for DNS filtering and policy). It is the most flexible of the four and also the most overwhelming to configure if you only want one of those things.
Performance, in the only benchmark that matters: yours
Public benchmarks for these products are mostly noise. Throughput depends so heavily on NAT type, ISP, MTU, and whether the kernel-mode WireGuard module is loaded that two reviewers can post a 10x difference for the same product and both be telling the truth.
Here is what I have actually measured running these in my own setup:
- Tailscale, laptop ↔ Hostinger VPS in Singapore: ~280 Mbps direct, ~52 ms RTT over my home fiber connection. The same laptop ↔ a VPS behind a CGNAT-friendly provider gave me ~180 Mbps after falling to DERP.
- ZeroTier, between two VPS instances in the same region: ~640 Mbps direct. Cross-region (US-Asia) dropped to ~110 Mbps because of the relay hop — ZeroTier’s roots are spread thinner than Tailscale’s DERP fleet.
- Cloudflare Tunnel, exposing a Laravel app from my home server: latency was the surprise. Average added 18–25 ms over a direct route because traffic egresses through whatever Cloudflare PoP is nearest the user. For an admin panel this is invisible; for a real-time game, fatal.
The headline: if you can get a direct peer-to-peer link, all four are fast enough for normal dev workloads. If NAT forces you onto a relay, Tailscale’s DERP fleet has the best global coverage I have seen, ZeroTier’s root network is thinner outside North America and Europe, Twingate relays are fine but you are paying for the SLA, and Cloudflare is essentially routing through the Cloudflare network — which is enormous, but every packet takes a city tour.
Hands-on quirks I’ve hit running these in production
Across the seven aggregator sites I run, plus the client work at wardigi.com, I have onboarded each of these at least once. The quirks that bit me:
Tailscale + Hostinger shared hosting: you cannot run a Tailscale daemon on Hostinger shared hosting (no systemd, no raw sockets). I work around this by terminating Tailscale on a small VPS that proxies into the same datacenter network — not ideal but works for the “I want to mysql-cli from my laptop without opening port 3306” use case.
Tailscale exit nodes vs your local DNS: if you turn on an exit node, by default Tailscale takes over DNS too. This bit me once when I forgot I had it on and could not resolve a client’s internal hostname. The fix is the --accept-dns=false flag or the MagicDNS toggle in the admin console — just know it exists.
ZeroTier multicast on cloud VMs: the Layer 2 multicast feature that makes ZeroTier shine on LAN gear is the thing that triggers cloud vendor abuse detection on some providers. AWS in particular gets unhappy if you spray multicast across instances. Either confine that to your homelab or use the “disable broadcast” flag on the network config.
Twingate Connector failover: the Connector is a single point of failure unless you run two of them, which the docs mention but the quickstart hides. I lost access to a staging environment for forty minutes once because a single Connector container OOM’d after a memory leak and the Twingate client gave a misleading “policy denied” error rather than “connector unreachable.” Run two. Always.
Cloudflare Tunnel and websockets: websockets work, but the default timeout is shorter than you expect, and idle connections get killed. For a long-poll or SSE endpoint, increase the --proxy-keepalive-timeout on cloudflared and double-check the Access policy is not set to re-authenticate mid-session.
WARP + Docker: if you run WARP in “tunnel all traffic” mode on a Mac, Docker Desktop’s VM networking can fight it. You will see DNS resolution fail intermittently inside containers. The fix is to set WARP’s split-tunnel rules to exclude the Docker subnet (172.17.0.0/16 by default).
The decision matrix nobody else writes
Here is how I actually pick, given a fresh team or project:
| If you are… | Pick | Why |
|---|---|---|
| A solo dev or 2–6 person team wiring up VPS, laptops, homelab | Tailscale (free tier) | 6 users + unlimited devices covers everything. Setup is one CLI install per machine. |
| Networking IoT devices, embedded gear, or hobby projects with broadcast/discovery needs | ZeroTier | Layer 2 broadcast support, per-device pricing matches the use case, no need for SSO. |
| A startup with 10–50 employees, some contractors, mostly web apps | Cloudflare Zero Trust (free) | 50-user free tier, Access in front of every internal web app, Tunnel exposes anything without opening ports. |
| An enterprise with auditors, regulated data, and a security team that wants per-app policy | Twingate | Resource-centric model maps cleanly to compliance reviews; SAML/SCIM is first-class; logs are explicit. |
| A heavy Cloudflare user already on Workers/R2/Tunnel | Cloudflare Zero Trust (paid) | One vendor, one bill, deep integration with your edge platform. Lock-in risk but operational simplicity. |
| You need the absolute fastest peer-to-peer link | Raw WireGuard | None of these four beat hand-rolled WireGuard for raw throughput. The four exist to make WireGuard manageable. |
Three things I’d push back on if a junior dev recommended them
1. “Just use Cloudflare Zero Trust, it’s free.” The free tier is real, but the lock-in is also real. Once your team is dependent on Cloudflare Access for SSH, exposing services via Tunnel, and DNS filtering via WARP, you have effectively made Cloudflare your network provider. Cheap until it isn’t.
2. “Tailscale is free forever for our team.” The free tier is six users. The minute you hire your seventh person you are on the $8/user plan, which for a 10-person team is $80/month. That is fine, just budget for it.
3. “Twingate is more secure because it’s ZTNA.” ZTNA and mesh VPN solve different problems. A Tailscale tailnet with proper ACLs, tags, and identity-based access is not less secure than Twingate — the threat model is just different. Twingate forces explicit application registration; Tailscale gives you network reachability and asks you to write ACLs. Both can be secure or insecure depending on configuration.
What I’d bet on for the next 12 months
Tailscale will keep eating the developer mesh-VPN market. Their pricing change earlier this year (6 users free, unlimited devices) is a clear move to lock in solo devs and small teams before they become paying enterprises. Expect them to push harder on the SSH-replacement and identity-broker angles — their tailscale ssh feature is already replacing bastion hosts in a lot of small ops.
ZeroTier feels stagnant by comparison. The product still works well, but the pace of new features has slowed, and the dev community energy has clearly migrated. They are the safer pick if you need Layer 2 features Tailscale won’t add, but the gap is widening.
Twingate is positioning hard on the compliance and enterprise pitch. If your buyer is a CISO, that is the right strategy. If your buyer is a developer, it shows — the setup ergonomics still feel enterprise-flavored.
Cloudflare Zero Trust is the wild card. Their free tier is a strategic loss-leader to pull teams deeper into the Cloudflare ecosystem, and it is working. I would not be surprised to see one of the smaller vendors (Twingate, NetBird, Pomerium) get acquired in the next year — the consolidation pressure is obvious.
How I’d start tomorrow
If I were standing up a small dev team from scratch in May 2026:
- Install Tailscale on every developer’s laptop, every VPS, every home lab box. Free tier covers the first six engineers.
- Use Tailscale ACLs (the JSON policy file in the admin console) to tag production hosts and restrict who can reach them. This is the bit most teams skip and regret.
- If we need to expose anything publicly (a marketing site, a webhook endpoint), put it behind Cloudflare — not Tunnel, just the regular CDN. Tunnel becomes interesting once we have something internal that needs external auth.
- Skip Twingate until we have an actual compliance requirement that demands per-resource audit logging. That moment usually arrives with the first enterprise contract, not before.
- Skip ZeroTier unless we are doing embedded or LAN-emulation work.
The whole stack costs $0 for a team of six and roughly $50–100/month at ten people. Compared to the time it saves on bastion hosts, VPN client support tickets, and IP-allowlist maintenance, that is the best dollar-per-headache ratio I have found in this category.
FAQ
Can I run Tailscale and Cloudflare WARP at the same time?
Yes, but expect routing conflicts on macOS. Tailscale handles the overlap better than WARP does. Test it before depending on both for daily work.
Is WireGuard alone enough if I just have two servers to connect?
For two static servers with public IPs, yes — raw WireGuard is fewer moving parts and faster. The minute you have three or more nodes, or any node behind NAT, the management overhead tips the math toward Tailscale or ZeroTier.
Does any of these work on iOS without battery drain?
All four have iOS apps. Tailscale and Cloudflare WARP are the lightest in my experience — both implement on-demand connection and idle suspension well. ZeroTier’s iOS client is noticeably more aggressive about staying connected.
What about NetBird, Nebula, or Headscale?
NetBird is a credible Tailscale alternative if you want self-hosted control with a polished UI — worth a separate look. Nebula (from Slack) is bare-bones but fast. Headscale is an open-source Tailscale control plane reimplementation; pair it with the official Tailscale clients if you want zero vendor lock-in. None of the three have the polish of the big four, but they have real users.
Will any of this work if my ISP is behind CGNAT?
Tailscale and ZeroTier both relay through their respective fallback infrastructure when direct connections fail. Tailscale’s DERP fleet handled my CGNAT-stuck mobile hotspot tests fine. ZeroTier’s roots also worked but were slower. Twingate and Cloudflare are proxy-architected so CGNAT is invisible to them — they are unaffected.