Hey HN! I built Relay after getting frustrated with existing tunnel tools.
I've used ngrok for like decade - great tool, but custom domains cost money. I tried ~10 open source alternatives to self-host.
Every one had issues:
- No authentication (if you expose tunnel.example.com publicly, anyone can use your bandwidth/domain)
- Random unmemorable names (tunnel.com:43891 or abc123def.tunnel.com)
- No way to request persistent subdomains
- Missing Docker images or requiring complex config files
I just wanted: self-hosted, private (only I control who connects), simple setup, readable URLs.
So I built Relay:
- 3-word subdomains: quiet-snow-lamp.tunnel.example.com
- Optional custom names: myapp.tunnel.example.com (persistent!)
- Secret-based auth (only people with the secret can connect)
- Single Docker image, two env vars: HOSTNAME + SECRET
That's it. No config files, no database, no bullshit.
Built with TypeScript, native Node.js APIs, only 1 dependency.
talyuk•1h ago
I've used ngrok for like decade - great tool, but custom domains cost money. I tried ~10 open source alternatives to self-host.
Every one had issues: - No authentication (if you expose tunnel.example.com publicly, anyone can use your bandwidth/domain) - Random unmemorable names (tunnel.com:43891 or abc123def.tunnel.com) - No way to request persistent subdomains - Missing Docker images or requiring complex config files
I just wanted: self-hosted, private (only I control who connects), simple setup, readable URLs.
So I built Relay: - 3-word subdomains: quiet-snow-lamp.tunnel.example.com - Optional custom names: myapp.tunnel.example.com (persistent!) - Secret-based auth (only people with the secret can connect) - Single Docker image, two env vars: HOSTNAME + SECRET
That's it. No config files, no database, no bullshit.
Built with TypeScript, native Node.js APIs, only 1 dependency.
Would love your feedback!