Quickstart

From zero to a public URL in about five minutes. You need a machine running macOS, Linux, or Windows, and a local service to expose (we'll assume a web app on port 3000).

1. Create an account

Sign up at https://router.direct/signup with an email and password (8+ characters). You'll be logged in immediately.

2. Create a tunnel

  1. Open the dashboard at https://dashboard.router.direct.
  2. Click Create Tunnel and choose a type:
    • HTTP — pick a subdomain, e.g. myapp (lowercase letters, numbers, and hyphens only).
    • TCP — a public port in the 10000–20000 range is assigned automatically.
  3. Copy the generated API key — it looks like sk_live_… and is shown once in the tunnel details.

3. Install the CLI

One command. The script downloads the right binary for your OS/arch to /usr/local/bin/router.

macOS & Linux
curl -fsSL https://router.direct/install.sh | sh
Windows (PowerShell)
iwr https://router.direct/install.ps1 -UseBasicParsing | iex

Verify it works:

terminal
router --version

4. Start your tunnel

Try it in the foreground first. --server and --token are required; --local defaults to 127.0.0.1:3000.

HTTP tunnel
router run \
  --server 77.42.121.237:2333 \
  --token sk_live_yourkey \
  --subdomain myapp \
  --local 127.0.0.1:3000

You should see output like this:

terminal
🔵 Connecting to relay 77.42.121.237:2333 (TLS)...
✅ Authenticated!
════════════════════════════════════════════════════
🌐 Public URL:  https://myapp.router.direct
🏠 Forwarding:  127.0.0.1:3000 (TCP)
════════════════════════════════════════════════════

🔄 Awaiting incoming connections...

Open https://myapp.router.direct in a browser — you're live.

Important--local must be a full host:port address. Passing just a port (e.g. --local 3000) will fail to connect.

5. Make it permanent

run lives in your terminal. install registers a native system service instead, so the tunnel keeps running after reboots and reconnects automatically:

persistent service
router install \
  --server 77.42.121.237:2333 \
  --token sk_live_yourkey \
  --subdomain myapp \
  --local 127.0.0.1:3000
  • Linux: systemd unit (system-wide with root, user unit otherwise; OpenRC on Alpine).
  • macOS: launchd agent with KeepAlive.
  • Windows: scheduled task that restarts on logon.

6. Manage the service

check status
router status
view logs (Linux, system service)
journalctl --unit router-direct --follow
remove the service
router uninstall

The default service name is router-direct; pass --service-name myapp to install, status, and uninstall to run several tunnels side by side.

Next steps