Commands and Namespaces

Commands and Namespaces

A command name is a simple identifier or a dot-separated path. When dots are present, the final segment is the command and the leading segments form its namespace path:

guid --format D                       # no namespace
netsh.wlan.connect --name MyNetwork   # two namespaces, one command

Namespaces are registered separately via NamespaceDefinition and require a name and help text. The full dotted string is the command identifier — there is no positional subcommand chaining.

POSIX-style CLIs often chain subcommands as separate tokens (netsh wlan connect). This library has no subcommand chaining — namespaces are part of the dotted command name (netsh.wlan.connect), not separate arguments.

Naming rules

Names are dot-separated segments of letters, digits, and -, where - may only appear inside a segment — no segment may start or end with - — and no segment may be empty (..). Namespace names must begin with a letter and cannot start or end with .; command names may also begin with a digit. Namespace names are capped at 62 characters, command names at 64.

Registering namespaces is optional for commands. A dotted command name registers and executes whether or not its leading segments exist as namespaces — unregistered segments simply have no namespace entry in help output. Registering a nested namespace auto-creates any missing ancestors as placeholders: adding netsh.wlan before netsh exists creates a netsh namespace automatically, carrying no help text until you register it explicitly.

Command and namespace names are case-sensitive. Connect and connect are distinct commands.