Quickstart
Authenticate, expose a local port, and pin a stable subdomain in under a minute.
Go from nothing to a live public URL in three steps. You'll need a local service listening on some port — a dev server, an API, an LLM runtime, anything that speaks HTTP.
Install the client
The CLI is a single static binary. On macOS or Linux:
curl -fsSL https://osmrouter.com/install.sh | shConfirm it's on your PATH:
osmrouter versionCreate an agent token
Sign in at app.osmrouter.com, open Tokens, and
create one. It looks like osm_xxxxx. Export it so the CLI can read it:
export OSM_TOKEN=osm_xxxxxOSM_TOKEN is the only required variable. Add the export to your shell profile
(~/.zshrc, ~/.bashrc) to persist it across terminals.
Open a tunnel
Point osmRouter at the local port you want to expose:
osmrouter http 8080
# -> Forwarding https://happy-tiger.osmrouter.com -> localhost:8080That URL is live on the public internet, over HTTPS, immediately. Share it, point a webhook at it, or open it in a browser.
Pin a stable subdomain
By default every run gets a random name. Set OSM_SUBDOMAIN to request a fixed
hostname that survives restarts:
OSM_SUBDOMAIN=my-app osmrouter http 8080
# -> https://my-app.osmrouter.comCommon first tunnels
Expose a framework dev server so a teammate or a device on another network can load it:
osmrouter http 3000
# -> https://<random-name>.osmrouter.comPin a subdomain so a provider can keep posting to the same address across restarts:
OSM_SUBDOMAIN=stripe-hooks osmrouter http 4242
# -> https://stripe-hooks.osmrouter.comPut an OpenAI-compatible server (Ollama, vLLM, llama-server) on the public internet. Streaming and long requests work with no timeout:
# Ollama listens on 11434
OSM_SUBDOMAIN=llm osmrouter http 11434
# -> https://llm.osmrouter.com/v1/chat/completionsNext steps
- HTTP tunnels — how routing works and what passes through.
- Custom domains — serve tunnels on your own hostname.
- Traffic Inspector — watch every request in real time.