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
- Open the dashboard at https://dashboard.router.direct.
- 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.
- HTTP — pick a subdomain, e.g.
- 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.
curl -fsSL https://router.direct/install.sh | shiwr https://router.direct/install.ps1 -UseBasicParsing | iexVerify it works:
router --version4. Start your tunnel
Try it in the foreground first. --server and --token are required; --local defaults to 127.0.0.1:3000.
router run \
--server 77.42.121.237:2333 \
--token sk_live_yourkey \
--subdomain myapp \
--local 127.0.0.1:3000You should see output like this:
🔵 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.
--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:
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
router statusjournalctl --unit router-direct --followrouter uninstallThe default service name is router-direct; pass --service-name myapp to install, status, and uninstall to run several tunnels side by side.
Next steps
- Tunnel types — TCP for SSH, UDP for WireGuard.
- CLI reference — every command and flag.
- HTTP API — automate tunnel creation.