Commands
Every command accepts
--json. Cluster and Node arguments are numeric IDs. The CLI refuses another Cluster value with cluster.id_invalid. Human lists use uppercase table headers, and one Cluster uses a detail tree. TLDs display with a leading dot; missing values display an em dash. Requests show progress while waiting and retain their Gateway request ID.
Destructive Cluster commands take --force as consent. The confirmation names the resolved Cluster and the affected Node when detaching a member. Interactive confirmation starts at No. Declining, Ctrl-C or EOF stops before mutation. A pipe or --json never supplies consent and requires --force.
A new Cluster is inactive. Membership, name, and TLD can be prepared while it is inactive without changing any traffic. Activating a Cluster that has a TLD, or giving an active Cluster a TLD, is the routing cutover: it requires exactly one active Router and reconciles every affected Route before the change becomes authoritative.
Placement and TLDs
A Node belongs to at most one Cluster. A standalone Node is a full placement, not a step toward a Cluster. An Instance never selects a Cluster: its routing scope follows its Node. Joining a Cluster adds no role. Leaving it removes only arouter assignment of the Node that never became active, as cluster:node:remove describes.
A Node keeps its own TLD while it belongs to a Cluster, and membership never changes it. While the Cluster is active and has a TLD, that TLD wins for generated domains. Otherwise the Node TLD applies. Routes owns domain generation.
An inactive Cluster owns no TLD, so it can share one with any Node. Prepare a Cluster with the TLD of a Node that joins it later, and activate it after the Node joins. A member Node can keep the same TLD as its active Cluster, because both name one routing scope.
orbit cluster:create
Create a Cluster in theinactive state.
cluster.tld_invalid before it sends a request. Placement and TLDs lists the ownership rules.
orbit cluster:list
List every Cluster with its state, TLD, Router, and member Nodes.orbit cluster:show
Show one Cluster.orbit cluster:update
Change the name, TLD, or state of a Cluster. At least one option is required.orbit cluster:node:add
Attach an active Node to a Cluster.node:add --cluster=ID attaches a Node during provisioning with the same guards.
orbit cluster:node:remove
Detach a Node from a Cluster. Routes on that Node return to Node scope before membership ends. Generated domains fall back to the Node TLD. The Gateway deletes the Node’srouter assignments that never became active. Any other router assignment blocks the detach with cluster.router_detach_forbidden.
orbit cluster:router:set
Set or replace the Cluster Router. The Router must be an active member Node.cluster.router_busy. A replacement that another Router change left unfinished fails with cluster.router_transition_conflict. A Node that is not an active member fails with cluster.router_node_invalid.
orbit cluster:router:unset
Clear the Router from a Cluster that is inactive or has no TLD.orbit cluster:destroy
Remove an empty Cluster.cluster.not_empty) or still scopes Routes (cluster.has_routes).