Opening Tunnels
Basic usage
# Expose a local port
nullbore open --port 3000
# ✓ https://a7f3bc.tunnel.nullbore.com → localhost:3000
This creates a tunnel with a random URL and a 1-hour TTL.
Named tunnels
On Hobby plans and above, you can choose your URL:
nullbore open --port 3000 --name myapp
# ✓ https://myapp.tunnel.nullbore.com → localhost:3000
Names must be 2-63 characters, lowercase alphanumeric and hyphens only. Names are first-come-first-served and tied to your account while the tunnel is active.
TTL (time to live)
Every tunnel has a TTL — the maximum time it stays open.
# 30 minutes
nullbore open --port 3000 --ttl 30m
# 4 hours
nullbore open --port 3000 --ttl 4h
# 7 days (Hobby plan max)
nullbore open --port 3000 --ttl 168h
TTL limits depend on your plan:
| Plan | Max TTL |
|---|---|
| Free | 2 hours |
| Hobby | 7 days |
| Pro | Unlimited (persistent) |
Idle TTL mode
With --idle, the TTL becomes an inactivity timeout instead of a hard deadline. The tunnel stays alive as long as there's traffic, and only expires after the TTL period of silence.
# Stay alive while there's traffic, close after 30 min of silence
nullbore open --port 3000 --ttl 30m --idle
This is useful for:
- Dev servers you want up while you're working
- MCP servers that should be available while an agent session is active
- Demo environments that clean themselves up
Multiple tunnels
Open several tunnels at once with the -p flag:
nullbore open -p 3000:api -p 8080:web -p 5432:db
# ✓ https://api.tunnel.nullbore.com → localhost:3000
# ✓ https://web.tunnel.nullbore.com → localhost:8080
# ✓ https://db.tunnel.nullbore.com → localhost:5432
Via the API
curl -X POST https://tunnel.nullbore.com/v1/tunnels \
-H "Authorization: Bearer nbk_your_key" \
-H "Content-Type: application/json" \
-d '{"local_port": 3000, "ttl": "30m", "idle_ttl": true}'
See API: Tunnels for full details.