Own your origin.
Expose any local service — a dev server, an on-device LLM, a database — at a public URL on a domain you control. One command, every OS.
macOS & Linux · on Windows use irm https://osmrouter.com/install.ps1 | iex
macOS · Linux · Windows • HTTP & TCP • CLI · SDK · Desktop
Tunnel anything you run locally
Everything ngrok does, on your terms.
Your domain, your brand, your infrastructure — hosted, or self-hosted on a single box.
Your domain, your origin
Random URLs are free; bring a custom domain on any plan. No shared third-party host, no vendor banner, no “powered by” in front of your service — ever.
HTTP and raw TCP
Web apps over HTTPS, or databases, SSH, and game servers over raw TCP — one CLI.
Built for streaming
WebSockets, SSE, and long-running inference survive the tunnel with no timeout.
Secure by default
Protect any endpoint with Basic Auth. No warning interstitial.
Traffic inspector
Every request in real time — method, path, status, latency, size, IP.
Behind any firewall
Your machine dials out — no open ports, works behind NAT and CGNAT.
Live in under a minute.
Install
One static binary — macOS, Linux & Windows. Nothing else to set up.
Authenticate
Create a free agent token in the dashboard and export it once.
Tunnel
Your local port is live at a public https:// URL on your domain.
Why teams switch
The expose-localhost workflow you know — with ownership you don't get elsewhere.
Self-host the whole stack
Relay, control plane, Postgres, Redis, and TLS ship as one Docker Compose deployment you run on a single box. No Cloudflare, no third-party dependency. SSO, audit logs, and an SLA for enterprise.
Generous free tier. No warning pages.
2 domains, 10 tunnels, every feature — free. Upgrade only when you outgrow the limits.
curl -fsSL https://osmrouter.com/install.sh | sh

osmRouter