| name | tunelo |
| description | Expose local services and files to the internet through a public HTTPS URL. Designed for AI agents — when you need to let a user preview files remotely, share a dev server, demo an app, or give temporary access to localhost. Use this whenever the user says "share this", "let me see it on my phone", "send me the link", or needs to access something running locally from another device/network. |
When to use tunelo
Use tunelo when the user needs to:
- Preview files remotely — "show me that PDF", "let me browse those files on my phone"
- Share a local dev server — "give me a link to your React app"
- Demo something to a colleague — "send me the URL so I can test it"
- Access localhost from another device — mobile testing, remote debugging
- Share a directory — project files, documents, media, datasets
Do NOT use tunelo when:
- The user only needs local access (use
python3 -m http.server or tunelo serve . --local)
- The files are already hosted somewhere public
Install
curl -fsSL https://tunelo.net/install.sh | sh
If tunelo is not found after install, the binary is at /usr/local/bin/tunelo.
Commands
Expose a local port
tunelo port 3000
tunelo port 5173
tunelo port 8080
tunelo port 3000 --password
tunelo port 3000 --password mysecret
Run a command and tunnel it
tunelo port 3000 -- pnpm dev
tunelo port 3000 -- next start
tunelo port 5173 -- vite
The child process gets PORT set in its environment. Tunelo waits for the port to accept connections before creating the tunnel. When either the command or the tunnel stops, the other is cleaned up.
Serve files with web explorer
tunelo serve .
tunelo serve ./dist
tunelo serve README.md
tunelo serve index.html
tunelo serve . --local
tunelo serve . -l -p 8000
The file explorer runs in the browser — directory browsing, code syntax highlighting, markdown rendering, PDF viewer, image/video/audio playback, CSV/Excel tables. Everything is embedded in the binary, no dependencies.
Options
tunelo port <PORT> --relay my.server:4433
tunelo port <PORT> -H 192.168.1.100
tunelo port <PORT> --password
tunelo port <PORT> --password mysecret
Default relay is tunelo.net:4433 (free public relay). Use --relay for self-hosted.
Typical agent workflows
User says "share these files with me"
tunelo serve /path/to/files
User says "I want to see this on my phone"
tunelo port 3000
tunelo serve .
User says "let my colleague test the API"
tunelo port 8080 --password
User says "start the dev server and share it"
tunelo port 3000 -- pnpm dev
User says "preview this locally first"
tunelo serve ./dist --local
How it works
Browser → HTTPS → Relay → QUIC tunnel → Client → localhost / file server
- Public HTTPS URL assigned automatically (random subdomain like
swift-fox-3847.tunelo.net)
- QUIC transport — encrypted, multiplexed, low latency
- Auto-reconnects if connection drops
- Session limit: tunnels expire after ~2 hours on the public relay