Your localhost,
on the internet.
Expose any local HTTP or TCP service to a public URL in one command — on your own domain, behind real authentication. No reverse proxies, no port forwarding, no fuss.
Self-hostable · Built in Rust · Up in minutes
Install the CLI
One static binary, no dependencies. Works on macOS and Linux.
curl -fsSL https://tnnl.uz/install.sh | shEverything you need to share localhost
One-command tunnels
Run "tnnl http 3000" and get a public HTTPS URL instantly. That’s the whole setup.
HTTP and raw TCP
Expose web apps over HTTP, or tunnel SSH, Postgres, Redis, and anything else over raw TCP — each on its own port.
Your name, or your domain
Get a friendly auto subdomain (flying-bird-4024.tnnl.uz), pick your own (my-app.tnnl.uz), or bring a custom domain like stiv.uz.
HTTPS by default
Every tunnel is served over TLS. Certificates are handled for you — visitors get a padlock, you do nothing.
Account-controlled access
Tunneling requires login. Sessions are managed, revocable, and tied to real user accounts — not anonymous links.
Self-hostable
Run the whole stack on your own VPS with Docker and Postgres. Your traffic, your domain, your rules.
Public subdomains use a wildcard certificate; custom domains get certs on demand.
From localhost to live in three steps
Log in
Authenticate once. tnnl stores a secure session token on your machine.
Start a tunnel
Point tnnl at any local port. HTTP or TCP.
Share the URL
Send the link to anyone. Requests stream straight to your machine in real time.
Under the hood: a single multiplexed connection (yamux) carries every request — fast, ordered, and efficient.
A CLI that gets out of your way
See all commands →tnnl loginSign in to your accounttnnl http <port>Expose a local HTTP servertnnl tcp <port>Expose a raw TCP service (SSH, DB, …)tnnl http <port> --subdomain my-appClaim a specific subdomaintnnl http <port> --hostname stiv.uzServe on your own domaintnnl logoutRevoke this sessionBring your own domain
Serve a tunnel on a domain you own — stiv.uz, app.yourcompany.com, anything. Point one DNS record at tnnl and you're live — the CLI tells you exactly which record to add and verifies it for you. HTTPS is automatic: the certificate is issued and renewed for you the first time your domain is visited. No cert setup, no renewals.
Run it yourself
tnnl is built to be self-hosted. Spin up the server and a Postgres database with one Docker Compose file, point a wildcard domain at it, and you have your own private tunneling service — with your own users, your own domain, and zero third-party dependency.
Built for control, not anonymity
Tunneling requires a real account, and the auth is hardened end to end — so you decide exactly who can put what online.
Read the security docs →Ship your localhost in one command.
Install the CLI, log in, and you're online.