Persistent public URLs for localhost: a single-binary Go CLI, protobuf frames over authenticated WebSockets, and request capture with one-click replay.
OpenTunnel gives a service running on your laptop a stable, TLS-protected public address, and records every request that reaches it so you can inspect it and replay it. It runs as a hosted service at opts.ink (opens in a new tab), and anyone can self-host it. I designed and built all of it: the Go tunnel server and CLI, the wire protocol between them, and the dashboard.
Webhooks and OAuth callbacks need a public URL, and most tunnels hand you a random one that changes every time the tunnel restarts. Each restart meant re-pasting the URL into Stripe, GitHub and the OAuth provider, and losing the failed request I was trying to debug. I wanted a tunnel that behaves like infrastructure: a domain that stays mine, TLS without ceremony, and a record of exactly what was sent. I wrote about that itch in Building OpenTunnel.
opentunnel up 3000 --domain my-app exposes a local port at a persistent subdomain. It signs in through the browser, remembers your domain and port between runs, keeps its credentials in the operating system's keychain, and updates itself with verified releases.Each CLI keeps one authenticated WebSocket open, and that single connection carries many requests at once. Requests and responses travel as versioned protobuf messages, with bodies streamed in chunks under per-request flow control, and heartbeats detect dead connections.
OpenTunnel is source-available under the PolyForm Noncommercial licence. Anyone can read the code, run it and self-host it.