Auto Usage Generation ​
Gunshi automatically generates comprehensive usage information for your commands, ensuring your CLI is self-documenting and user-friendly without additional effort.
How Auto Usage Works ​
When you define a command with Gunshi, the library automatically:
- Adds
--helpand-hflags to every command - Adds
--versionand-vflags when you provide a version in the CLI options - Generates formatted usage text based on your command configuration
- Displays usage information when users request help or provide invalid arguments
- Includes descriptions, examples, and type information you provide
The generated usage follows standard CLI conventions, making your application immediately familiar to users.
Understanding Bracket Notation ​
Gunshi uses consistent bracket notation throughout the generated usage to indicate whether elements are required or optional:
Angle Brackets <> - Required Elements ​
Angle brackets indicate required elements or parameters without default values:
<OPTIONS>- The command has required options (at least one option without a default value)<name>- An option parameter that must be provided (no default value)<positional>- A required positional argument
Example:
USAGE:
app <OPTIONS>
OPTIONS:
-n, --name <name> Name to use (required)Square Brackets [] - Optional Elements ​
Square brackets indicate optional elements or parameters with default values:
[name]- An option parameter with a default value[COMMANDS]- Sub-command selection (when multiple commands exist)[commandName]- A default command that runs when no sub-command is specified
Example:
USAGE:
app [COMMANDS]
COMMANDS:
[manage] Default command for managing resources
OPTIONS:
-t, --type [type] Resource type (default: standard)This notation provides immediate visual feedback about what users must provide versus what they can omit, making your CLI more intuitive to use.
TIP
Auto-usage generation is powered by the @gunshi/plugin-renderer plugin, which is automatically included when you use the standard cli() function. This plugin handles all help text rendering and formatting.
Generated Help Output ​
Gunshi transforms your command definitions into professional help documentation.
Here's what users see when they request help.
Basic Command Help ​
For a simple command with basic configuration (see Getting Started for implementation details), running with --help displays:
A greeting CLI (greet-cli v1.0.0)
USAGE:
greet-cli <OPTIONS>
OPTIONS:
-h, --help Display this help message
-v, --version Display this version
-n, --name <name> Name to greet
-u, --uppercase Convert greeting to uppercaseNOTE
The --help flag is automatically added - you never need to define it manually.
Help with Arguments and Examples ​
When your command includes argument definitions and examples (see Declarative Configuration for how to define these), the generated help becomes more comprehensive:
app (app v1.0.0)
USAGE:
app <OPTIONS>
OPTIONS:
-p, --path <path> File or directory path to operate on
-r, --recursive Operate recursively on directories
--no-recursive Negatable of -r, --recursive
-o, --operation <operation> Operation to perform: list, copy, move, or delete
-h, --help Display this help message
-v, --version Display this version
EXAMPLES:
# List files in current directory
$ app --operation list
# Copy files recursively
$ app --operation copy --path ./source --recursive
# Delete files
$ app --operation delete --path ./tempIMPORTANT
Boolean options automatically receive a negatable version with the --no- prefix. This allows users to explicitly disable boolean flags.
Customizing Help Output ​
Displaying Option Types ​
Enable type display in the usage output to help users understand what value each option expects:
await cli(process.argv.slice(2), command, {
name: 'app',
version: '1.0.0',
usageOptionType: true // Enable type display
})This adds type information to each option:
OPTIONS:
-p, --path <path> [string] File or directory path to operate on
-r, --recursive [boolean] Operate recursively on directories
--no-recursive [boolean] Negatable of -r, --recursive
-o, --operation <operation> [string] Operation to perform: list, copy, move, or delete
-h, --help [boolean] Display this help message
-v, --version [boolean] Display this versionSub-command Help Generation ​
For CLIs with sub-commands (see Composable Sub-commands for implementation), Gunshi generates hierarchical help documentation.
Main Command Help ​
When users run the main command with --help:
resource-manager (resource-manager v1.0.0)
USAGE:
resource-manager [COMMANDS] <OPTIONS>
COMMANDS:
[manage] <OPTIONS> Manage resources
create <OPTIONS> Create a new resource
list <OPTIONS> List all resources
For more info, run any command with the `--help` flag:
resource-manager --help
resource-manager create --help
resource-manager list --help
OPTIONS:
-h, --help Display this help message
-v, --version Display this versionNOTE
The brackets in [manage] indicate it's the default command that runs when no sub-command is specified.
Sub-command Specific Help ​
Each sub-command has its own help, accessible via command --help. The below create --help:
resource-manager (resource-manager v1.0.0)
Create a new resource
USAGE:
resource-manager create <OPTIONS>
OPTIONS:
-h, --help Display this help message
-v, --version Display this version
-n, --name <name> Name of the resource
-t, --type [type] Type of resource (default: default)Positional Arguments Display ​
When commands accept positional arguments (arguments without flags), they appear in the ARGUMENTS line:
resource-manager (resource-manager v1.0.0)
Manage resources
USAGE:
resource-manager manage <OPTIONS> <resource>
ARGUMENTS:
resource Type of resource to manage (e.g., user, project)
OPTIONS:
-h, --help Display this help message
-v, --version Display this versionPositional arguments are displayed with clear, descriptive names that indicate their purpose. Currently, all positional arguments are shown as required using angle brackets (e.g., <resource>).
Automatic Features ​
Gunshi provides several automatic features without requiring any configuration:
Help Flag (--help, -h) ​
- Automatically added to all commands
- Displays usage information and exits
- Works at every command level (main and sub-commands)
Version Flag (--version, -v) ​
- Automatically added when you provide a
versionin CLI options - Displays the version and exits
- Available at all command levels
Negatable Boolean Options ​
- Boolean options automatically get
--no-prefixed versions - Allows explicit disabling of boolean flags
- Example:
--recursiveautomatically creates--no-recursive
Invalid Argument Handling ​
- Usage is automatically displayed when users provide invalid arguments
- Helps users understand what went wrong
- Provides immediate guidance for correct usage
Key Points ​
When working with auto-generated usage:
- The
--helpflag is automatically added to all commands - you don't need to define it - Usage is displayed when users provide invalid arguments or explicitly request help
- Descriptions in your
argsconfiguration become the help text for each option - The
examplesfield accepts both single strings and multi-line strings for multiple examples - Sub-command help is accessible both from the main help and individually via
command --help - Required options are shown with angle brackets
<option>in the USAGE line - Boolean options automatically get negatable versions (
--no-prefix) when not required - The
usageOptionTypeCLI option adds type annotations to help output
Next Steps ​
Learn about the Plugin System to extend functionality.
