FeaturesGuidesBlogDocumentationPricingGet Started
Client Sharing

Share Localhost With a Client Without Deploying to Staging

Send a public HTTPS link to your WIP dev server — no staging deploy, no account signup, no networking lecture.

"Can you send me a link?"

Your client wants to see the feature you built this afternoon. Staging is down, the PR is not merged, and deploying just for a 20-minute review feels wasteful.

You need a public URL that shows exactly what is on your laptop right now.

The fix

npm run dev
npx localtolink

Send the HTTPS URL from your terminal:

https://k7m2x9p4q1.localtolink.com

Your client opens it in their browser. They see your local dev server. When you stop the tunnel, the link dies. No cleanup on a staging server.

Why this beats a staging deploy for quick reviews

ApproachTime to linkShows latest local changesCleanup
Staging deploy10–30+ minutesAfter push + deployLeaves artifacts
Screenshot/video5 minutesStatic snapshot onlyNone
Dev tunnel~10 secondsLive, as you editStop tunnel

For a design review, flow walkthrough, or "does this feel right?" call, a tunnel link wins on speed and fidelity.

Before you share: 30-second checklist

  1. Your app is running — tunnel forwards to localhost; dead app = blank page
  2. Use HTTPS URL — some OAuth and cookie flows break on HTTP public links
  3. No real user data — seed with test accounts; do not demo production DB copies
  4. Warn about the warning page — first-time visitors may see a brief interstitial; click through once
  5. Session limit — free tier runs 2 hours; enough for most calls; restart if needed

Mobile testing for your client

LocalToLink prints a QR code in the terminal. Your client can scan it on their phone during a video call — no typing long URLs.

For your own device testing, see test localhost on phone.

How to send the link (copy that works)

Avoid technical jargon in the message. A template that sets expectations:

Here is a live preview of today's work: https://YOUR-SUB.localtolink.com
First visit may show a brief security notice — click Continue once.
This link works while I am on the call; refresh if I push an update.

That single message prevents three common support interruptions: interstitial confusion, localhost vs HTTPS mix-ups, and "the link died" when the tunnel stops.

Same-day review vs staging deploy

Staging exists for a reason — persistent URLs, environment parity, team access without your laptop. But staging has costs: CI time, merge conflicts blocking deploy, stale data, and "staging is down" on Friday afternoon.

A dev tunnel trades persistence for fidelity to your current branch. The client sees uncommitted work, hot-reloaded changes, and the exact state of your local .env test data. For "does this button placement feel right?" or "walk through the new checkout flow," that fidelity beats a staging build from yesterday's main.

Document internally when your team uses tunnels vs staging so PMs know a tunnel link expires when the developer closes their laptop.

Prepare test data before the call

Seed accounts the client will use:

Five minutes of seeding prevents twenty minutes of "let me fix that real quick" on the call.

What can go wrong (and fixes)

Client sees blank page — your dev server crashed or hot-reload broke. Refresh after fixing locally.

Client sees old version — hard refresh (Cmd+Shift+R) or disable aggressive caching in dev.

Link stopped working mid-call — tunnel session expired (2h) or you closed the terminal. Restart and send the new URL.

Client on corporate VPN blocks tunnel — rare; try mobile hotspot as fallback.

When not to use a dev tunnel for client work

For those cases, staging or a preview deploy is appropriate. For a same-day WIP review, a tunnel is the pragmatic choice.

Honest limits

FAQ

Do clients need to install anything?
No. They open a normal HTTPS link in a browser.

Can multiple clients view at once?
Yes, while the tunnel runs. Rate limit is 10 req/s — fine for a small review audience.

Is it secure?
The URL is public while the tunnel runs. Do not share links in public channels if the app contains sensitive data. Stop the tunnel when done.

Next steps

Try it now

Start a tunnel from your project directory — no account required.

$ npx localtolink

See the full CLI reference for flags and exit codes.

LocalToLink CLI 1.0.1 — verified 2026-09-05