share-local-site

Share a local development server with anyone via a public URL. Use when you need to demo a site to a client, let a colleague preview your work, test on mobile, or share localhost over the internet. Supports ngrok (recommended), localhost.run (zero-install), and cloudflared. Handles common issues like Vue CLI Invalid Host Header automatically.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "share-local-site" with this command: npx skills add darwin7381/share-local-site

Share Local Site

Expose a local development server to the internet so anyone can access it via a public URL. No deployment needed.

When to use

  • Demo a work-in-progress site to a client or colleague
  • Test a local site on a mobile device
  • Share localhost for pair programming or review
  • Quick external access without deploying

Methods comparison

MethodSignupInstallStabilityBest for
localhost.runNoNo⭐⭐Quickest start. Zero setup, perfect for first-time use
ngrokYesYes⭐⭐⭐⭐Most stable. Dashboard, multi-tunnel, longer sessions
cloudflaredNoYes⭐⭐⭐Already installed; quick tunnels

Quick start

localhost.run (zero-install, fastest to start)

Nothing to install, nothing to sign up for. Just run:

ssh -o StrictHostKeyChecking=no -R 80:localhost:3000 nokey@localhost.run

Look for the URL in the output (e.g. https://xxxxx.lhr.life). Share it immediately.

ngrok (most stable, recommended for longer sessions)

# First time only
brew install ngrok        # or: npm i -g ngrok, or download from ngrok.com
ngrok config add-authtoken YOUR_TOKEN   # get token from dashboard.ngrok.com

# Start tunnel
ngrok http 3000           # replace 3000 with your port

Get the public URL:

curl -s http://127.0.0.1:4040/api/tunnels | jq -r '.tunnels[0].public_url'

Web dashboard: http://127.0.0.1:4040

cloudflared

brew install cloudflared   # first time only
cloudflared tunnel --url http://localhost:3000

Pre-send checklist

Before sharing any tunnel URL, always verify:

  1. Confirm the tunnel points to the correct port:

    curl -s http://localhost:4040/api/tunnels | python3 -c "
    import sys,json; d=json.load(sys.stdin)
    for t in d['tunnels']:
        print(t['config']['addr'], t['public_url'])"
    
  2. Verify the page loads correctly:

    curl -sI <TUNNEL_URL>                        # check HTTP 200
    curl -s <TUNNEL_URL> | grep -i '<title>'     # confirm correct site
    

    Watch for: Invalid Host header, wrong project, blank page, 502.

  3. Only send the URL after both checks pass.

Multiple tunnels (ngrok)

ngrok free tier supports up to 3 simultaneous tunnels. Run each in a separate terminal or tmux session:

# Terminal 1: frontend on port 5173
ngrok http 5173

# Terminal 2: backend on port 3001
ngrok http 3001

List all active tunnels:

curl -s http://localhost:4040/api/tunnels | python3 -c "
import sys,json; d=json.load(sys.stdin)
for t in d['tunnels']:
    print(f\"{t['name']:20s} {t['config']['addr']:30s} {t['public_url']}\")"

Framework-specific fixes

Vue CLI: "Invalid Host header"

Vue CLI's webpack-dev-server blocks non-localhost hosts by default.

Vue CLI 2/3 (webpack-dev-server v3):

// vue.config.js
module.exports = {
  devServer: { disableHostCheck: true }
}

Vue CLI 5+ (webpack-dev-server v4+):

// vue.config.js
module.exports = {
  devServer: { allowedHosts: 'all' }
}

Vite / Next.js / Nuxt: No config needed — tunnels work out of the box.

Create React App

DANGEROUSLY_DISABLE_HOST_CHECK=true npm start

Or in .env:

DANGEROUSLY_DISABLE_HOST_CHECK=true

FAQ

Q: Do I need to restart the tunnel after code changes? No. The tunnel just forwards traffic. Hot reload works normally — just refresh the page.

Q: How long does the URL last? As long as the tunnel process is running. Close it and the URL dies.

Q: Can multiple people access the same URL? Yes. Share the URL with anyone — it's a public endpoint.

Q: ngrok says "too many tunnels"? Free tier allows 3 tunnels. Close unused ones or upgrade.

Recommended: pair with persistent-process

OpenClaw's exec sessions have automatic cleanup — idle timeout, context compaction, or gateway restart will silently kill any background process, including your tunnel. Your client is mid-demo and the URL just stops working.

To prevent this, install the openclaw-tmux-persistent-process skill. It runs your tunnel inside a tmux session that is completely independent of OpenClaw's exec lifecycle:

clawhub install openclaw-tmux-persistent-process

With both skills installed, tell your agent: "share port 3000 with tmux so it stays up" — it will start the tunnel in a persistent tmux session that survives gateway restarts.

Troubleshooting

ProblemFix
Invalid Host headerSee framework-specific fixes above
ngrok token invalidRe-copy from dashboard.ngrok.com
localhost.run hangsSwitch to ngrok
Blank page / 502Make sure your local dev server is running
Wrong project showingCheck curl localhost:4040/api/tunnels for port mapping
cloudflared 404Quick tunnels can be flaky — switch to ngrok

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

DOOMSCROLLR

Manage DOOMSCROLLR audience hubs by publishing posts, handling subscribers, creating products, connecting feeds, and retrieving embed codes securely.

Registry SourceRecently Updated
Coding

API Documentation Builder

Generate comprehensive API documentation from code with examples, types, and OpenAPI specs

Registry SourceRecently Updated
Coding

TestSkills

Interact with the Fibek B2B collections platform API — manage invoices, clients, payment agreements, campaigns, and financial metrics

Registry SourceRecently Updated
Coding

last30days-surf

Research what people actually said about any topic over the last 30 days across Reddit, X/Twitter, YouTube, GitHub, Hacker News, Polymarket, Bluesky, TikTok,...

Registry SourceRecently Updated