Skip to content

Conflict resolution

routeup prefers loud failure over silent last-wins. A surprise “last writer takes the route” is a common source of “why isn’t my dev server responding” debugging, so conflicts are explicit.

Two processes on one machine claiming the same route:

default: fail closed; the CLI prints the owning pid and cwd
orphans: the agent reaps stale claims when the owning pid is gone

For foreground or detached routeup serve, run routeup stop [name]. Runner and standalone exposure owners must be stopped from their owning terminal. You can also choose a different route name.

Routes are owned by a live CLI process, which may be foreground or a detached serve owner. When that process exits, owner-conditional cleanup releases its claims and tears down matching tunnels; other claims are untouched.

Two clients claiming the same route through the same server:

default: 409 Conflict; generic message, owner identity not disclosed
grace window: 30s after a disconnect the same token may resume the claim
cross-token: a held route cannot be reclaimed by a different token
public namespace: session-only, no grace window, first-come-first-served

Owner identity is never leaked to a non-owning client. A scoped token can only claim within its allow pattern, so conflicts across namespaces are impossible by construction.

A brief network drop or a quick restart should not lose your public name to someone else. The 30-second grace lets the same token resume its claim after a disconnect. The public namespace deliberately skips this, its claims are session-only by design. See Public namespace.