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.
Local conflicts
Section titled “Local conflicts”Two processes on one machine claiming the same route:
default: fail closed; the CLI prints the owning pid and cwdorphans: the agent reaps stale claims when the owning pid is goneFor 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.
Public conflicts
Section titled “Public conflicts”Two clients claiming the same route through the same server:
default: 409 Conflict; generic message, owner identity not disclosedgrace window: 30s after a disconnect the same token may resume the claimcross-token: a held route cannot be reclaimed by a different tokenpublic namespace: session-only, no grace window, first-come-first-servedOwner 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.
Why a grace window
Section titled “Why a grace window”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.