Tunr Documentation
Tunr exposes your local development server to the internet in < 3 seconds with automatic HTTPS, WebSocket support, and zero configuration. It's a developer-first alternative to ngrok and Cloudflare Tunnel.
Note: tunr is a single static Go binary. It doesn't rely on Node.js or Python to run, and the CLI is fully open-source.
Quickstart
Install via Homebrew or curl, then start sharing immediately.
brew install ahmetvural79/tap/tunr
tunr share --port 3000
CLI Reference
tunr share -p [port]: Create a public HTTPS tunnel.tunr share -p [port] -s [subdomain]: Use a custom.tunr.shsubdomain (Pro feature).tunr logs: Stream HTTP request logs in your terminal.tunr open: Open the embedded local HTTP inspector dashboard in your browser.
❄️ Freeze / Snapshot Mode
If your app crashes (e.g., Node throws an exception, Database disconnects) while demoing to a client, the freeze mode will intercept the 500 error and serve the last working HTML/CSS/JS response from memory.
tunr share --port 3000 --freeze
🛡️ Read-Only Demo Mode
Prevents destructive actions. Whenever a client submits a form (POST) or clicks a delete button (DELETE), the tunr proxy safely intercepts the request, blocks it from hitting your actual local backend, and returns a simulated success response.
tunr share --port 3000 --demo
💬 Feedback Widget Injection
Every HTML page that passes through the tunnel gets a transparent feedback widget injected via proxy middleware (no code changes required on your end). Both visual UI feedback and background JavaScript exceptions are captured.
- Visual Comments: Clients can click anywhere on your webpage to drop a pin and leave a comment about the design or functionality.
- JS Error Catching: Whenever the client's browser throws a JavaScript error
(e.g.
Uncaught TypeError), it is silently caught and streamed back to the server. - Dashboard Viewer: You can read all aggregated feedback, complete with timestamps and browser info, in the Tunr Dashboard Feedback page.
tunr share --port 3000 --inject-widget
🔒 Password Protection
Add Basic Authentication to your public URL instantly without writing any code. Keep your development environments secure from unauthorized access while sharing with clients or third parties.
tunr share -p 8080 --password "secret"
⏳ Auto-Expiring Tunnels
Forget to stop a tunnel exposing your local machine? Use a Time-To-Live (TTL). Once the duration expires, the tunnel daemon safely terminates the connection and shuts down the proxy.
tunr share -p 3000 --ttl 1h30m
🔀 Path Routing
Map different incoming URL paths to different upstream ports on your machine. This is perfect for testing microservices or serving your frontend and API from a single public proxy domain.
tunr share --route /=3000 --route /api=8080
🤖 Model Context Protocol
Tunr supports MCP out of the box. Add it to Claude Desktop or Cursor so your AI can manage tunnels locally.
// .cursor/mcp.json
{
"mcpServers": {
"tunr": {
"command": "tunr",
"args": ["mcp"]
}
}
}