Parsing |
Async |
Sync |
Sync |
Custom parsing |
✅ |
❌ |
❌ |
Validation |
Async |
Sync |
Sync |
Custom validation |
✅ |
✅ |
❌ |
Command execution |
Async, awaits completion |
Sync, fire-and-forget |
Sync, fire-and-forget |
Commands inline |
✅ |
✅ |
✅ |
Commands via file/module |
✅ |
✅ |
✅ |
Commands via directory |
✅ |
✅ |
❌ |
Arbitrary levels of nested commands |
✅ |
✅ |
❌ |
Default command |
✅ |
✅ |
✅ |
Command aliases |
✅ |
✅ |
✅ |
Commands with positional arguments |
✅ |
✅ |
✅ |
Positional arguments without a command |
✅ |
❌ |
✅ |
Positional argument aliases |
✅ |
✅ |
❌ |
Positional arguments with optional flags |
✅ |
❌ |
❌ |
Define types for positional arguments |
✅ |
❌ |
❌ |
Variadic positional arguments |
Anywhere |
Last positional only |
Last positional only |
Descriptions for positional arguments in help text |
✅ |
❌ |
❌ |
Auto-generated help text |
✅ |
✅ |
✅ |
Override auto-generated help text |
✅ |
❌ |
❌ |
Customize auto-generated help text piece-meal |
✅ |
❌ |
❌ |
Style help text differently for errors |
✅ |
❌ |
❌ |
Placeholders for flagged options in help text |
✅ |
❌ |
✅ |
Built-in support for i18n |
❌ |
✅ |
❌ |
Built-in support for showing help text by default (i.e. no args) |
✅ |
Only via validation |
❌ |
Custom grouping of options in help text |
✅ |
✅ |
❌ |
Custom grouping of commands in help text |
✅ |
❌ |
❌ |
Custom coercion of argument/option values |
✅ |
✅ |
✅ |
Validate user input before applying coercion |
✅ |
❌ |
❌ |
Array options |
✅ |
✅ |
Only via custom coercion |
Define subtype for array option |
✅ |
❌ |
❌ |
Array parsing supports comma (or other delimiter) separated values |
✅ |
❌ |
❌ |
Number options |
✅ |
✅ |
Only via custom coercion |
Path/file/directory options |
✅ |
❌ |
❌ |
Count options |
Only via custom type |
✅ |
Only via custom coercion |
Enum/choices options |
✅ |
✅ |
Via RegExp or custom coercion |
Config file options |
Only via custom type |
✅ |
Only via custom coercion |
Customize special --help option |
✅ |
✅ |
❌ |
Customize special --version option |
✅ |
✅ |
❌ |
Auto package version lookup |
✅ |
✅ |
❌ |
Ability to plug in customized components |
✅ |
❌ |
❌ |
Support for ignorables in positional argument DSL |
✅ |
❌ |
❌ |
Parsing result provides details of where argument/option value came from |
✅ |
❌ |
❌ |
Implies/conflicts option validation |
Only via custom check |
✅ |
❌ |
Converts multi-word aliases to camelCase |
❌ |
✅ |
✅ |
Parses environment variables |
On roadmap |
✅ |
❌ |
Lookup program config in package.json |
❌ |
✅ |
❌ |
Parsing supports dot-notation for object properties |
❌ |
✅ |
❌ |
Parsing supports --no- prefix for boolean negation |
On roadmap |
✅ |
✅ |
Ability to recommend commands on no command match |
❌ |
✅ |
❌ |
Support for generating bash completion script |
❌ |
✅ |
❌ |
Parsing of undeclared options |
✅ |
✅ |
❌ |
Parses process.argv by default |
✅ |
✅ |
❌ |
Parsing accepts strings |
✅ |
✅ |
❌ |
Populates parsing result with all aliases |
✅ |
✅ |
❌ |
Number of packages installed during npm install |
1 |
69 |
1 |
Compatible with Node.js versions |
4+ |
4+ |
All |