← all SaaS
Self-host Tailscale
Mesh VPN / zero-config networking
Tailscale wraps WireGuard with magic identity + NAT traversal. The leading self-hostable replacement (Headscale) is a drop-in coordination server — your Tailscale clients keep working, just talking to your control plane.
Tailscale pricing anchor: Free for personal (3 users / 100 devices); $6/user/mo for Premium.
- GitHub
- ★ 38.2k · last commit today · 132 open issues
- License
-
BSD-3-Clause - Setup time
- 20min (single Go binary + reverse proxy)
- Monthly cost
- $5 VPS — coordination only, traffic is peer-to-peer.
Migration sketch. Stand up Headscale at a public hostname. On each Tailscale client: `tailscale up --login-server=https://your-headscale.example`. The clients stay the same; only the control server changes. ACL/SSO replacements need to be set up (Headscale supports OIDC).
Good fit forTeams that already love Tailscale UX but don't want a SaaS dependency.
Weak atNo web admin UI in core — third-party UIs (headplane, headscale-ui) fill the gap.
- GitHub
- ★ 25.1k · last commit 1d ago · 1518 open issues
- License
-
BSD-3-Clause - Setup time
- 30min docker-compose (management + signal + relay)
- Monthly cost
- $5-10 VPS for the management plane.
Migration sketch. Different client — install netbird daemon on each device. Identity via OIDC (Authentik, Keycloak). No data to migrate from Tailscale; just add devices.
Good fit forTeams who want a Tailscale-shaped product + web admin UI in one self-hosted package.
Weak atSmaller community than Tailscale/Headscale.
- GitHub
- ★ 5.47k · last commit 7w ago · 92 open issues
- License
-
MIT - Setup time
- 20min (single Rust binary per host)
- Monthly cost
- $5 VPS for the coordination server.
Migration sketch. No client compatibility with Tailscale — you swap the whole stack. Generate invitation tokens per device; clients connect once, then peer-to-peer over WireGuard.
Good fit forStatic, server-to-server meshes (small fleet, infra-only).
Weak atNo mobile client; no MagicDNS-style identity.
In a terminal? npx os-alt tailscale prints this table —
how the CLI works →