Your localhost. One link away.
Share a local app, test a webhook, or connect your phone to your desktop.
Get started · Website · SDK docs · Webhook tester
HTTP · WebSockets · Server-Sent Events
# macOS / Linux with Homebrew
brew install tunnelite
tunnelite http://localhost:3000You can also install the .NET tool or download a standalone binary.
On macOS and Linux, install from Homebrew Core:
brew install tunneliteHomebrew installs the required .NET dependency automatically. No additional tap is needed.
To update an existing installation:
brew update
brew upgrade tunneliteRequires the .NET 10 SDK. To install Tunnelite as a global tool, use the following command:
dotnet tool install --global TunneliteTo update an existing installation:
dotnet tool update --global TunneliteEvery release also ships a single self-contained executable, built with NativeAOT, that needs no .NET runtime installed:
| Platform | Archive |
|---|---|
| Linux x64 | tunnelite-linux-x64.tar.gz |
| Linux arm64 | tunnelite-linux-arm64.tar.gz |
| macOS Intel | tunnelite-osx-x64.tar.gz |
| macOS Apple Silicon | tunnelite-osx-arm64.tar.gz |
| Windows x64 | tunnelite-win-x64.zip |
A SHA256SUMS file is attached to each release for verification.
Once installed, you can use the tunnelite command to create a tunnel to your local application:
tunnelite http://localhost:3000This command returns a public URL with an auto-generated subdomain and automatically shows a QR code in your terminal to open it on your phone.
| Argument / option | Description |
|---|---|
<localUrl> |
The local URL to tunnel to. Use http:// or https:// for web applications, or tcp://host:port for raw TCP (self-hosted servers only). |
--publicUrl <url> |
The tunnel server to connect to. Defaults to https://tunnelite.com. |
--log <level> |
Client log verbosity: Trace, Debug, Information, Warning, Error or Critical. |
--name <name> |
Optional label for a saved paired-tunnel setup on your computer (default: default). Does not choose the public hostname. |
--identity-file <path> |
Use an explicit desktop profile file in paired mode. |
--insecure-local |
Explicitly allow an untrusted HTTPS development certificate on a loopback target. Relay certificates are always verified. |
Interactive terminals show a live dashboard: requests update one activity entry instead of scrolling past. Press c to reset activity or q to quit. See CLI controls for device management and plain-text output.
tunnelite http://localhost:3000Start your website on your computer, then run the command above, replacing 3000 with your website's port. Scan the QR code with your phone's camera and open the link. Your website opens in the phone's browser. Keep your website and Tunnelite running on your computer.
Your phone doesn't need Tunnelite installed or the same Wi-Fi connection. Anyone with the public URL can open the site.
If your dev server rejects the tunnel's hostname, see dev-server host settings.
If you want access restricted to paired browsers, run this instead:
tunnelite serve http://localhost:3000Scan the QR code to authorize your phone's browser and open the website. Other browsers cannot access it without pairing.
While Tunnelite is running:
- Press
pto create a fresh QR code for another browser. - Press
dto see paired devices. - Press
rto remove a device's access.
Tunnelite automatically saves the address and paired devices on your computer. To keep separate setups for different projects, give each one a name:
tunnelite serve http://localhost:3000 --name my-websitemy-website is just a local profile label. It does not name your website or choose its public URL. Use that same name next time to reuse its address and paired devices.
See paired access for profile options and device management.
Bridge your local Claude Code, OpenAI Codex, Grok, and Google Antigravity sessions to a paired mobile browser using Acplite:
# Optional one-time setup: wrap terminal agent tabs so mobile prompts and tool approvals run inside your open terminal
tunnelite acp --install-hooks
# Connect all installed local coding agents (claude, codex, grok, agy)
tunnelite acp
# Or scope to a specific coding agent
tunnelite acp claude
tunnelite acp codex
tunnelite acp grok
tunnelite acp agyScan the pairing QR code on your phone to live-tail active desktop sessions, take over a session, steer active turns in real time, queue follow-up prompts for the next turn, interrupt turns, and approve or deny tool calls. With --install-hooks, prompts and tool approvals from your phone are injected directly into your open terminal tabs (--hooks-status / --uninstall-hooks), falling back to background session resume when hooks are not installed.
Tunnelite allows you to self-host the server, giving you full control over your tunneling infrastructure. To set up your own Tunnelite server, you'll need:
- Wildcard SSL certificate for your domain
- Wildcard DNS record pointing to your server's IP address
These allow Tunnelite to create secure subdomains for your tunnels and properly route traffic to your self-hosted server. The server project is src/Tunnelite.Server; the deploy workflow shows how the managed instance is published to Azure App Service.
Once your server is up, point the client at it:
tunnelite http://localhost:3000 --publicUrl https://your-server-domain| Package | Description |
|---|---|
| Tunnelite | The tunnelite command-line tool. |
| Tunnelite.Sdk | HttpTunnelClient and TcpTunnelClient for opening tunnels from your own .NET code. |
| Tunnelite.AspNetCore | app.UseTunnelite() middleware that tunnels an ASP.NET Core app as soon as it starts. |
var app = builder.Build();
app.UseTunnelite(); // prints the public URL once the tunnel is connected
app.Run();See SDK integration to embed paired access in a desktop or ASP.NET Core application.
Build and run the integration suite:
dotnet build -c Release
dotnet test test/Tunnelite.Tests -c Release --no-buildSee cross-platform validation for native CLI checks and how it works for the transport diagrams.
This project is licensed under the MIT License.
