Open Source · MIT Licensed

Localhost to the world.
On your terms.

Self-hosted tunnel that keeps your data on your infrastructure. No third-party services. No limits. No signup.

Tunnelr on Product Hunt
tunnelr — bash
# Deploy on your VPS (one time)
$ docker compose up -d
✓ Container tunnelr-caddy Started
✓ Container tunnelr-server Started
 
# Connect from your laptop
$ tunnelr connect 3000
Tunnel established!
Public URL: https://yourdomain.com/t/a1b2c3
Forwarding: https://yourdomain.com/t/a1b2c3 → localhost:3000

~500

Lines of Go

4

Files to deploy

0

Dependencies on SaaS

Tunnels allowed

Built for teams who care about where their data goes

We build CRMs, automation systems, and AI agents. That means a lot of webhooks, callbacks, and local services that need to be temporarily public.

Every tunneling service we tried routed our customer data through someone else's servers. So we built our own.

Tunnelr started as an internal tool. We open-sourced it because it solved a real problem.

Your infrastructure

Runs on any $5/mo VPS you control

No third-party eyes

Zero traffic leaves your server to a middleman

Your logs, your rules

Full control over what gets logged and stored

Three steps. That's it.

From zero to tunneling in under 5 minutes.

1

Deploy the server

Clone the repo on any VPS, set your domain in .env, and run Docker Compose.

docker compose up -d
2

Build the CLI

One Go build command gives you the tunnelr binary. Move it to your PATH.

go build -o tunnelr ./cmd/cli
3

Connect

Point the CLI at your server and expose any local port to the internet.

tunnelr connect 3000

Simple architecture

No magic. WebSockets + reverse proxy + a registry.

Your VPS

Caddy

HTTPS termination

Tunnel Server

Go binary

Registry

In-memory mapping

HTTPS ↑↓ WebSocket
Your Machine

Webhook Provider

Stripe, GitHub, etc.

Tunnelr CLI

WebSocket client

localhost:3000

Your app

What you get

Everything you need, nothing you don't.

Self-hosted

Deploy on any VPS you control. Your infrastructure, your rules, your data.

Custom domain

Use your own domain with automatic SSL via Caddy. Path or subdomain routing.

No limits

Unlimited tunnels, unlimited time. No 2-hour expiry, no random URL changes.

Dead simple

~500 lines of Go. No database, no config server, no account system. Just works.

Built for these workflows

Webhook Testing

Stripe, GitHub, Slack callbacks hitting your local dev server

AI Agent Callbacks

Async LLM responses and agent workflow callbacks to localhost

Team Demos

Share dev builds with teammates without deploying to staging

Client Previews

Show work-in-progress to clients from your local machine

How it compares

Tunnelr trades convenience for ownership.

Feature Tunnelr ngrok (free) Cloudflare Tunnel
Self-hosted Yes No No
Unlimited tunnels Yes 1 only Yes
Persistent URLs Yes 2hr expiry Yes
Custom domain Yes Paid only Yes
No account needed Yes No No
Full data privacy Yes No No

Ready to own your tunnels?

Deploy in under 5 minutes. No signup, no credit card.

git clone https://github.com/Aakeeo/tunnelr.git

Stay in the loop

Get notified when new features ship. No spam, just release notes.