Tunr v1.0 is now live for macOS, Linux, and Windows

Expose your local server
in 3 seconds.

Secure tunnels, automatic HTTPS, and zero configuration. The developer-first alternative to ngrok, packed with superpowers for client demos.

bash — tunr
~ tunr share --port 3000

Connecting to edge relay...
Requesting wildcard certificate...

Tunnel established successfully

Traffic to https://ax2b3.tunr.sh is now forwarding to localhost:3000
Hit Ctrl+C to quit.
~ tunr share -p 3000 --demo --freeze --inject-widget

Connecting to edge relay...
Tunnel established

https://demo.tunr.sh → localhost:3000

Proxy features active:
Read-only demo mode (POST/PUT/DELETE blocked)
Freeze cache enabled (crash protection)
Feedback widget injected into HTML
~ tunr logs --follow

Streaming live request logs...

GET /api/products 200 12ms
POST /api/orders 201 45ms
GET /dashboard 200 8ms
DELETE /api/users/42 403 2ms (demo blocked)

More Superpowers for Vibecoders

We built tunr specifically for freelancers and AI-assisted developers demoing web apps to clients. Stop apologizing for crashes and database wipes.

❄️

Freeze Mode (Anti-Crash)

If your local server crashes mid-demo (Node exception, database drops), the tunnel serves the last successful HTML response from proxy memory. The client never sees an error page.

tunr share -p 3000 --freeze
🛡️

Read-Only Demos

Prevent destructive actions during client demos. The proxy blocks all state-mutating requests (POST, PUT, DELETE) from reaching your local server, returning simulated success codes instead.

tunr share -p 3000 --demo
🤖

AI Native (MCP Support)

Tunr fully supports the Model Context Protocol. Give Claude Desktop or Cursor direct agentic control to spin up tunnels, inspect traffic, and debug request payloads for you.

tunr mcp
🔒

Password Protected

Add Basic Authentication to your public URL instantly. Keep your development environments secure from unauthorized access while sharing with clients.

tunr share -p 3000 --password "secret"
🔑

Auto-Login Bypass

Inject an auth cookie or JWT header so your client lands on the demo account automatically. No signup flow, no password emails — just the dashboard.

tunr share -p 3000 --auto-login "Cookie: session=demo"
🌐

Custom Domains

Use your own domain instead of the default *.tunr.sh subdomain. Point your CNAME and share professional-looking URLs with clients.

tunr share -p 3000 --domain demo.myapp.com

Auto-Expiring Tunnels

Set a Time-To-Live (TTL) so your tunnels close automatically. Never worry about forgetting to shut down a tunnel exposing your local machine.

tunr share -p 3000 --ttl 2h30m
🔀

Path Routing

Route different URL paths to different upstream ports on your machine. Perfect for testing microservices or serving your frontend and API from a single tunnel.

tunr share --route /=3000 --route /api=8080
🔄

Request Replay

Captured an interesting request in the inspector? Replay it against your local server with one command. Debug webhooks, reproduce bugs, or test idempotency.

tunr replay abc-123-xyz
📋

Machine-Readable Output

Use the --json flag to get structured JSON output from any command. Perfect for CI/CD pipelines, scripting, and AI agent integrations.

tunr share -p 3000 --json

Reference

Commands

Everything is one tunr command away.

tunr share <options>
Map a local port to a public URL with various parameters
# Start proxying a domain
$tunr share --subdomain myapp --port 3000
✓ https://myapp.tunr.sh → localhost:3000
# Use a custom domain
$tunr share -p 3000 --domain demo.client.com
✓ https://demo.client.com → localhost:3000
# Route different paths to different upstream ports
$tunr share --subdomain myapp --port 3000 --route /api=8080 --route /ws=9000
✓ https://myapp.tunr.sh → localhost:3000
  https://myapp.tunr.sh/api → localhost:8080
  https://myapp.tunr.sh/ws → localhost:9000
# Full vibecoder demo package
$tunr share -p 3000 --freeze --inject-widget --demo
✓ https://random.tunr.sh → localhost:3000
  anti-crash cache enabled · feedback widget active · read-only mode
# Password protect and auto-expire
$tunr share -p 8080 --password "secret" --ttl 30m
✓ https://secure.tunr.sh → localhost:8080
  password protected · expires in 30m
# Start daemon in background
$tunr start -p 3000 --subdomain myapp
ℹ Running as daemon (PID 12345)
# Inspect running tunnels
$tunr status
● :3000 → https://myapp.tunr.sh
# Open visual dashboard & HTTP request logs
$tunr open
✓ Opening dashboard: http://localhost:19842
tunr login
Authenticate with tunr.sh
tunr open
Open local HTTP inspector
tunr mcp
Start AI Model Context Protocol
tunr doctor
Diagnose setup or proxy issues
tunr logs
Stream live request logs
tunr update
Self-update to latest version
tunr replay <id>
Re-send a captured HTTP request
tunr uninstall
Remove tunr from your system

Under the Hood

How it works

A single Go binary that handles everything under the hood.

  1. 1
    Requests a public HTTPS URL from the Relay server, backed by Cloudflare's global edge network. Your localhost becomes reachable from anywhere with automatic TLS — zero DNS config required.
  2. 2
    Spins up a local reverse proxy with a layered middleware stack — Demo Mode blocks destructive writes, Freeze Mode caches responses for crash protection, widget injection adds a feedback overlay, and Path Routing fans requests to multiple local ports.
  3. 3
    Transparently upgrades WebSocket connections end-to-end, so HMR (Next.js, Vite) and real-time features work completely out of the box without any configuration.
  4. 4
    The built-in HTTP Inspector captures every request and response with millisecond timing in an in-memory ring buffer. Browse them in the web dashboard, stream via tunr logs, or let AI agents query traffic through the Model Context Protocol.

Get started in seconds

Install Tunr and share your first localhost app in under a minute.

✦ Free Forever — Built with Go
macOS / Linux / Windows Shell
curl -sL https://tunr.sh/install.sh | sh