If you've needed a public URL for a local server, you've probably run ngrok http 3000 at some point. It works. It gets the job done. But "it works for the moment" and "it's the right tool for your use case" are different things.
In 2026, developers have three serious options: ngrok, Cloudflare Tunnel, and DomainDock. Each solves a related but distinct problem. This post breaks down exactly when to use each one.
The Core Question: What Are You Actually Trying to Do?
Before comparing features, get clear on your goal:
- Exposing a local dev server temporarily: you want a URL that works for the next hour while you demo or test
- Routing a deployed server with a permanent domain: you want a stable URL for a project that's actually running somewhere
- Sharing a project that's live on a VPS: you need real DNS, real SSL, and real uptime monitoring
The answer to that question will immediately tell you which tool to reach for.
ngrok
ngrok is the original "localhost tunnel" tool. You install a binary, run ngrok http 3000, and get a URL like https://3f8d2c.ngrok-free.app that proxies to your local machine.
What ngrok is good for
- Webhook testing: Stripe, GitHub, and other services need a real HTTPS URL to POST to. ngrok works immediately
- Rapid demos: show a local prototype to a colleague in another building or another country without deploying anything
- One-off debugging: reproduce a production issue locally and let a teammate view it live
ngrok's real limitations
URLs are ephemeral by default. Every time you restart the ngrok process, you get a new random URL. You'll update the webhook URL in your Stripe dashboard, Slack app config, or OAuth settings again.
Free plan limits are painful. On the free tier, you get one tunnel, rate limiting, and the random URL. Stable domain names require a paid plan. The personal paid plan starts at $8/month and only gives you one static domain.
It doesn't replace real infrastructure. ngrok is a tunnel; your laptop has to be on for it to work. It's not designed for anything that needs to stay up when you close your lid.
No server-side hosting. ngrok has no concept of a VPS or a server. It only proxies to whatever is running on your local machine.
ngrok verdict
Perfect for local development and webhook testing. A poor fit for anything that needs to be available when your laptop is off or anything that needs a stable, persistent URL.
Cloudflare Tunnel
Cloudflare Tunnel (formerly Argo Tunnel) is a different beast. You install the cloudflared daemon on a server, authenticate it with your Cloudflare account, and it creates an outbound connection to Cloudflare's edge. No inbound ports needed.
What Cloudflare Tunnel is good for
- Exposing servers behind strict firewalls: if your server can't accept inbound connections (corporate NAT, cloud provider restrictions), Cloudflare Tunnel gets around this cleanly
- Zero-trust access: Cloudflare Access integrates with Tunnel to gate your apps behind SSO, email OTP, or identity providers
- Production-grade traffic: Cloudflare's global network handles DDoS, caching, and routing at scale
Cloudflare Tunnel's real limitations
You need your own domain. Cloudflare Tunnel requires you to already own a domain registered with Cloudflare. If you're a student with a fresh VPS and no registered domain, you can't use it without spending money first.
The setup is not trivial. You need a Cloudflare account, a registered domain, DNS records pointed to Cloudflare, cloudflared installed and authenticated, a tunnel created, and routes configured. It's manageable, but it's several steps.
Overkill for side projects. The zero-trust features, access policies, and enterprise integrations are excellent, but completely unnecessary if you're building a personal project.
No health monitoring built in. Cloudflare Tunnel routes traffic but doesn't tell you when your backend goes down. You need a separate monitoring setup.
Cloudflare Tunnel verdict
Excellent for teams and enterprises that need secure, inbound-connection-free access to internal services. Too much configuration overhead for indie developers who just want a clean domain on a VPS.
DomainDock
DomainDock sits in a different position: it's built for developers who have a server (VPS, home lab, cloud instance) and want a clean, permanent domain with real SSL and no configuration overhead.
What DomainDock is good for
- Custom domains for deployed projects: your server is already running; you want
yourproject.digitalweb.hostto resolve to it with a valid HTTPS certificate - Multiple projects on one server: DomainDock's Traefik integration routes different domains to different ports on the same IP
- Stable staging environments: one URL per project that doesn't change between deploys
- Client demos: share
clientname.digitalweb.hostinstead of a random deployment URL. It looks professional. It doesn't expire.
What DomainDock doesn't do
DomainDock is not a tunnel. It doesn't proxy traffic through its own servers. It creates real DNS records that point directly to your server. Your server must be publicly reachable.
If your development machine is behind NAT and you need to expose localhost, ngrok is still the right tool for that.
DomainDock's advantages over the others
Free, no credit card. You get unlimited domains under digitalweb.host on the free tier. No per-domain fees, no tunnel seat pricing.
No binary to install. DomainDock is fully managed via a dashboard. You give it an IP and a port; it handles DNS, routing, and SSL.
Permanent URLs. Once you create a domain, it stays. It doesn't expire when you close a terminal window.
Built-in health monitoring. DomainDock runs health checks against your domains on a regular schedule. You can see status history, response times, and uptime directly in the dashboard.
Branded error pages. If your server goes down, visitors see a clean DomainDock-branded status page instead of a browser error screen. The page shows the domain name, last known health status, and response time.
Traefik integration. If you're running Traefik, DomainDock writes routing configs automatically. No manual YAML editing.
Side-by-Side Comparison
| ngrok | Cloudflare Tunnel | DomainDock | |
|---|---|---|---|
| Exposes local server | Yes | Yes | No (server must be public) |
| Permanent domain | Paid only | Yes (own domain required) | Free |
| Own domain required | No | Yes | No |
| SSL | Yes | Yes | Yes (auto) |
| Health monitoring | No | No | Yes |
| Setup complexity | Very low | Medium–High | Low |
| Cost | Free / $8+/month | Free (need domain ~$10/yr) | Free |
| Multiple domains | Paid | Yes | Yes |
| Works for deployed servers | Rarely | Yes | Yes |
The Decision Tree
Your server is your laptop and you need a URL right now: Use ngrok.
You're behind a strict firewall and need zero-trust access control: Use Cloudflare Tunnel.
You have a VPS or cloud server and want a clean, permanent domain with real SSL: Use DomainDock.
You're a student building a side project with no budget: Use DomainDock. It's the only option that gives you all of this for free without needing to own a domain first.
DomainDock is free to start. Create your account and have your first domain live in under a minute.