Open Source · Labs

The ngrok alternative you actually own.

Tunnelr is a self-hosted localhost tunnel built in Go. Unlimited tunnels, persistent URLs, automatic Caddy SSL, two routing modes. Deploy on your VPS in five minutes.

What it ships with.

Unlimited tunnels, persistent URLs

No session timeouts, no rotating URLs. Tunnels stay alive as long as you need — no 2-hour expiry.

Automatic SSL via Caddy

Every tunnel gets HTTPS automatically. Caddy handles Let's Encrypt — HTTP-01 for path mode, DNS-01 via Cloudflare for subdomain mode.

Two routing modes

Path mode (yourdomain.com/t/tunnel-id) with one DNS record, or subdomain mode (tunnel-id.yourdomain.com) for cleaner URLs with a wildcard.

Self-hosted on your infra

Deploy on any VPS with Docker. Your webhook payloads, API traffic and dev data never touch a third-party server. Zero telemetry.

Single Go binary

The client compiles to a single binary for Linux, macOS and Windows. No runtime dependencies. Cross-compile with one command.

MIT-licensed

Full source on GitHub. Fork, audit, extend. No lock-in, no surprise pricing, no ToS traps.

Tunnelr vs ngrok vs Cloudflare Tunnel.

FeatureTunnelrngrokCloudflare Tunnel
Self-hostedYesNoNo
Unlimited tunnelsYesPaidYes
Persistent URLsYesNoYes
Custom domainsYesPaidYes
Automatic SSLYesYesYes
No account neededYesNoNo
Open sourceYesNoNo
Zero telemetryYesNoNo
Data stays on your infraYesNoNo
Free foreverYesNoYes

FAQ

01What is Tunnelr?

A free, open-source, self-hosted localhost tunnel built in Go. Expose local dev servers through your own domain — like ngrok, but you own and control the infrastructure. Uses Caddy for automatic SSL and WebSockets for persistent tunnel connections.

02How is it different from ngrok?

ngrok routes traffic through their servers, limits free users to one tunnel with 2-hour session expiry, and charges for custom domains and persistent URLs. Tunnelr runs on your infrastructure with unlimited tunnels, persistent URLs, custom domains and zero time limits — all free.

03How do I deploy the server?

Docker Compose on any VPS. Clone the repo, copy .env.example to .env, set your domain and SSL email, then `docker compose up -d`. That gives you Caddy (reverse proxy + SSL), the Go tunnel server, and everything wired together. ~5 minutes.

04How do I connect from my local machine?

Build the CLI with `go build -o tunnelr ./cmd/cli` then run `TUNNELR_SERVER=wss://yourdomain.com/ws tunnelr connect 3000` to expose local port 3000. You'll get a public URL like yourdomain.com/t/a1b2c3 immediately.

05What are the routing modes?

Path mode (yourdomain.com/t/tunnel-id/endpoint) — single DNS A record, HTTP-01 SSL. Subdomain mode (tunnel-id.yourdomain.com) — wildcard DNS, DNS-01 via Cloudflare.

06Can I use it for production webhooks?

Yes. Persistent WebSocket connections with no session timeouts make it reliable for webhook development, API testing and staging environments that need stable public URLs.

07System requirements?

Server: any Linux VPS with Docker and a public IP (512MB RAM is enough). Client: Go 1.21+ to build the CLI binary, or pre-built binaries for Linux/macOS/Windows.

08Is it really free?

Yes — MIT-licensed. You only pay for the VPS you host the server on. A $5/month droplet handles most team workloads.

Ship it on your infra.

MIT-licensed. Self-hostable on any VPS. Pull the repo and be serving tunnels in five minutes.