The ngrok tax: why tunneling localhost for client demos breaks at the worst time
You've been there. It's 2:47 PM. The client's CTO, the budget holder, and two senior engineers are on the call. You've prepped for three days. You type ngrok http 3000, drop the URL in chat, and walk them through the feature you've been building for two weeks.
Halfway through the demo, your laptop dims. Then it goes dark. So does the tunnel.
"Uh, one sec — let me just restart this."
The ngrok URL changes. You paste a new link. The CTO clicks it. Blank screen — your local dev server isn't back up yet. The moment is gone. The deal isn't dead, but it's bleeding.
This is the ngrok tax. Not the $20/month. The credibility cost of demoing production work from a laptop that can't stay awake.
What ngrok does well
Let's be fair. ngrok is a genuinely good tool for what it was designed to do: give a solo developer a public URL for a process running on localhost. It takes one command. No config files, no DNS, no certificate management. For debugging webhooks during local development, it's still the best option.
The free tier covers most individual dev workflows. The paid tier adds custom domains and team access. For a single developer shipping code, ngrok solves a real problem.
Where ngrok breaks for teams and agencies
The cracks show the moment you move from "I need to test this webhook" to "I need to show this to a client."
Laptop dependency. Your tunnel lives on your machine. If your machine sleeps, crashes, or loses Wi-Fi, the demo dies. Every agency developer has a story about the laptop that went to sleep 90 seconds into a $50,000 sales call.
URL churn. Free ngrok gives you a random subdomain on every restart. Paid ngrok gives you a reserved domain, but if the tunnel goes down, the URL still points nowhere. There's no graceful degradation — it's just a blank page.
No per-branch isolation. You're working on feature/new-dashboard. Your teammate is on fix/payment-bug. You both need to show your work. ngrok can only tunnel one process per port. You're either sharing a tunnel (hope the features don't collide) or juggling ports.
No database, no context. ngrok tunnels your frontend, but it doesn't tunnel your database, your Redis cache, or your environment variables. If your demo needs seeded data or a specific API state, you're maintaining that on your laptop. Hope you remembered to run the migration.
No team access. When you step away, the tunnel dies. Your teammates can't review the same build. Your client can't revisit it tomorrow. It's a single-player tool in a multiplayer world.
The real cost isn't the subscription
ngrok Pro is $20/month. That's not the problem.
The problem is the rescheduled demo. The 45 minutes of context-switching back into "demo mode" after the tunnel dies. The subtle signal you send when technical infrastructure fails during a sales call — it makes prospects wonder what else will break after they sign.
Agencies bill $100–$200/hour. A single failed demo costs more than a year of proper preview infrastructure. And yet, teams keep paying the ngrok tax because the alternative feels too heavy — until it isn't.
What agencies use instead
The teams that have moved past ngrok share a pattern: they treat preview environments as a platform concern, not a laptop concern.
A preview environment is a live, shareable URL that builds from a Git branch and stays up until you're done with it. It runs on a server, not a laptop. It includes the full stack — frontend, backend, database, environment variables. It gets its own subdomain so branches don't collide. When the PR merges, the environment cleans itself up.
Here's what the workflow actually looks like:
# ngrok: tunnel a local process, pray your laptop stays awake
ngrok http 3000
# → https://a3f2-98-45-67-123.ngrok-free.app
# URL changes on restart, dies when laptop sleeps
# PreviewDrop: push a branch, get a permanent preview
git push origin feature/client-dashboard
# → https://feature-client-dashboard.previewdrop.dev
# Stays live until you close the PR, includes full stack
The difference isn't technical sophistication — it's whether the demo is an afterthought bolted onto your dev environment or a first-class part of your delivery pipeline.
Agencies running 5–10 active client branches at a time need persistent URLs, not tunnels. They need teammates to review without a screenshare. They need the CTO to revisit the demo at 10 PM from her iPad and have it Just Work.
Is ngrok ever the right call?
Yes — for solo developers debugging webhooks, testing OAuth callbacks, or running a quick sanity check. ngrok's value proposition is "zero config." If that's your constraint, you're well served.
But if you're demoing to a client, collaborating with a team, or maintaining multiple branches of work — you've outgrown the tunnel. The tool that saved you time as a solo dev is now costing you trust as an agency.
Preview environments aren't a luxury. They're the difference between "let me restart my laptop" and "here's the link — it'll be live all week." The ngrok tax is optional. You can stop paying it today.
Ready to give every branch a live URL?
Free tier — 2 concurrent previews, no credit card required.
Start free