osmRouterosmRouter

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 | sh

Confirm it's on your PATH:

osmrouter version

Create 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_xxxxx

OSM_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:8080

That 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.com

Common 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.com

Pin 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.com

Put 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/completions

Next steps