Usage is a spec and CLI for defining CLI tools. Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like OpenAPI (swagger) for CLIs. Here are some potential reasons for defining your CLI with a Usage spec:
- Generate autocompletion scripts
- Generate markdown documentation
- Generate man pages
- Use an advanced arg parser in any language
- Scaffold one spec into different CLI frameworks—even different languages
- [coming soon] Host your CLI documentation on usage.sh
See more at usage.jdx.dev.
usage is sponsored by entire.io and 37signals.
Usage's design owes a great deal to clap — the derive attribute vocabulary, the help output shape, and the diagnostic conventions all follow it deliberately so clap CLIs can be ported field by field. clap's license is reproduced in NOTICE.md.