Binboi Docs/Core/HTTP Tunnels

HTTP Tunnels

Binboi only exposes HTTP. The CLI forwards a public HTTPS URL at https://<subdomain>.binboi.com to a local plain-HTTP port. TLS terminates at the Binboi edge in Frankfurt — your local server speaks plain HTTP.

How tunnels work

When you run binboi http <port>, the CLI dials the relay at api.binboi.com:8081 and opens a yamux-multiplexed connection over TCP. The control plane claims <subdomain>.binboi.com for that connection. Inbound HTTPS requests are decrypted at the edge, framed over the yamux session, and forwarded to the CLI, which proxies them to http://localhost:<port>.

Subdomain assignment

| Plan | Subdomain | |---|---| | Free | Random per session, rotates every time you start the tunnel | | Pro | Reserved subdomains — persist across sessions | | Max | Reserved subdomains + custom domains |

Random subdomains look like wispy-otter-7421.binboi.com and are released back to the pool when the tunnel closes. Reserved subdomains stay attached to your account until you release them from the dashboard.

code
# Random subdomain (Free)
binboi http 3000
 
# Reserved subdomain (Pro / Max)
binboi http 3000 my-app

CLI dashboard

Once the tunnel is up, the CLI replaces its startup output with a live, ngrok-style dashboard:

  • Tunnel URL (https://<sub>.binboi.com → localhost:<port>)
  • Relay address and ping latency
  • Uptime counter
  • Request and error counters, downstream / upstream bytes
  • p50 / p90 latency
  • A scrolling recent-requests table (method, path, status, RTT, time)

Press Ctrl+C to close the tunnel. For full request bodies and headers, see binboi.com/dashboard/requests.

Request lifecycle

  1. Client sends a request to https://<subdomain>.binboi.com.
  2. DNS resolves to the Binboi edge.
  3. Caddy terminates TLS at the edge.
  4. The control plane looks up the active tunnel bound to <subdomain>.
  5. The request is forwarded over the yamux session to the CLI.
  6. The CLI proxies it to http://localhost:<port> and streams the response back along the same path.

If no tunnel is active for the subdomain, the edge returns 502 Bad Gateway.

Request retention

Every request is recorded and inspectable at binboi.com/dashboard/requests.

| Plan | Retention | |---|---| | Free | 24 hours | | Pro | 7 days | | Max | 30 days |

After the retention window, requests are purged.

Limits per plan

| Plan | Active tunnels | Active tokens | Reserved subdomains | Custom domains | |---|---|---|---|---| | Free | 1 | 2 | — | — | | Pro | 10 | 25 | ✅ | — | | Max | 50 | 100 | ✅ | ✅ |

Active token quota frees up when you revoke a token.

Reserved subdomains

Pro and Max can reserve subdomains so they persist across CLI sessions. Reserve one of two ways:

code
binboi http 3000 my-app

The first successful reservation locks the subdomain to your account. Free accounts cannot reserve — pass no subdomain and accept the random one.

Custom domains

Max only. Bring your own domain by pointing it at the Binboi edge:

  1. In your DNS provider, add a CNAME record: your-domain.com → cname.binboi.com.
  2. Add the domain at binboi.com/dashboard and click Verify.
  3. The edge auto-provisions a TLS certificate. Traffic to https://your-domain.com is now routed to your active tunnel.

Next