Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,127 @@
# Changelog

## [6.0.0](https://github.com/jdx/usage/compare/v5.1.0..v6.0.0) - 2026-08-17

### πŸš€ Features

- **(argv)** add a zero-allocation argv parser by [@jdx](https://github.com/jdx) in [#798](https://github.com/jdx/usage/pull/798)
- **(argv)** emit a usage spec from static metadata by [@jdx](https://github.com/jdx) in [#801](https://github.com/jdx/usage/pull/801)
- **(argv)** a bound stops a variadic by [@jdx](https://github.com/jdx) in [#826](https://github.com/jdx/usage/pull/826)
- **(argv)** route a word that names nothing to the default subcommand by [@jdx](https://github.com/jdx) in [#848](https://github.com/jdx/usage/pull/848)
- **(argv)** join static tables at compile time by [@jdx](https://github.com/jdx) in [#851](https://github.com/jdx/usage/pull/851)
- **(argv)** render the usage line, byte-identical to usage-lib's by [@jdx](https://github.com/jdx) in [#854](https://github.com/jdx/usage/pull/854)
- **(argv)** render `-h`, byte-identical to usage-lib's by [@jdx](https://github.com/jdx) in [#860](https://github.com/jdx/usage/pull/860)
- **(argv)** render `--help` too, byte-identical to usage-lib's by [@jdx](https://github.com/jdx) in [#866](https://github.com/jdx/usage/pull/866)
- **(argv)** answer `--help` and `-h` by [@jdx](https://github.com/jdx) in [#870](https://github.com/jdx/usage/pull/870)
- **(argv)** answer the `help` subcommand by [@jdx](https://github.com/jdx) in [#872](https://github.com/jdx/usage/pull/872)
- **(argv)** split a command line the way the shell that typed it would by [@jdx](https://github.com/jdx) in [#874](https://github.com/jdx/usage/pull/874)
- **(argv)** read the cursor's position off a real parse by [@jdx](https://github.com/jdx) in [#876](https://github.com/jdx/usage/pull/876)
- **(argv)** offer what the reference offers, from compiled tables by [@jdx](https://github.com/jdx) in [#877](https://github.com/jdx/usage/pull/877)
- **(argv)** generate the shell script each shell wants by [@jdx](https://github.com/jdx) in [#887](https://github.com/jdx/usage/pull/887)
- **(argv)** let a Rust function answer for a value by [@jdx](https://github.com/jdx) in [#888](https://github.com/jdx/usage/pull/888)
- **(argv)** write the `run=` a declared completer answers by [@jdx](https://github.com/jdx) in [#890](https://github.com/jdx/usage/pull/890)
- **(argv)** say what went wrong the way clap says it by [@jdx](https://github.com/jdx) in [#895](https://github.com/jdx/usage/pull/895)
- **(argv)** suggest what was probably meant by [@jdx](https://github.com/jdx) in [#897](https://github.com/jdx/usage/pull/897)
- **(argv)** answer `--version`, which an adopter loses on the way from clap by [@jdx](https://github.com/jdx) in [#909](https://github.com/jdx/usage/pull/909)
- **(argv)** a flag whose value may be left off by [@jdx](https://github.com/jdx) in [#969](https://github.com/jdx/usage/pull/969)
- **(bench)** count what a parse allocates, and stop allocating for commands nobody ran by [@jdx](https://github.com/jdx) in [#829](https://github.com/jdx/usage/pull/829)
- **(cli)** hold a spec's declaration order, the way clap-sort holds a clap CLI's by [@jdx](https://github.com/jdx) in [#915](https://github.com/jdx/usage/pull/915)
- **(cli)** parse usage's own command line with the parser usage ships by [@jdx](https://github.com/jdx) in [#965](https://github.com/jdx/usage/pull/965)
- **(complete)** complete config keys and values from the spec by [@jdx](https://github.com/jdx) in [#840](https://github.com/jdx/usage/pull/840)
- **(config)** generate the settings registry from the spec by [@jdx](https://github.com/jdx) in [#864](https://github.com/jdx/usage/pull/864)
- **(config)** carry a setting's choices into the generated registry by [@jdx](https://github.com/jdx) in [#869](https://github.com/jdx/usage/pull/869)
- **(derive)** compile a struct into parse tables and a spec by [@jdx](https://github.com/jdx) in [#803](https://github.com/jdx/usage/pull/803)
- **(derive)** compile subcommands from an enum by [@jdx](https://github.com/jdx) in [#816](https://github.com/jdx/usage/pull/816)
- **(derive)** check what a parse cannot decide on its own by [@jdx](https://github.com/jdx) in [#817](https://github.com/jdx/usage/pull/817)
- **(derive)** nest commands to any depth by [@jdx](https://github.com/jdx) in [#818](https://github.com/jdx/usage/pull/818)
- **(derive)** declare which flags conflict and which require each other by [@jdx](https://github.com/jdx) in [#820](https://github.com/jdx/usage/pull/820)
- **(derive)** let a flag displace another, the last one given winning by [@jdx](https://github.com/jdx) in [#821](https://github.com/jdx/usage/pull/821)
- **(derive)** let a command answer to more than one name by [@jdx](https://github.com/jdx) in [#827](https://github.com/jdx/usage/pull/827)
- **(derive)** let a variant hold its command in a `Box` by [@jdx](https://github.com/jdx) in [#828](https://github.com/jdx/usage/pull/828)
- **(derive)** let a field be the type it means by [@jdx](https://github.com/jdx) in [#833](https://github.com/jdx/usage/pull/833)
- **(derive)** declare the words a value may be by [@jdx](https://github.com/jdx) in [#838](https://github.com/jdx/usage/pull/838)
- **(derive)** hold the bytes a word arrived as by [@jdx](https://github.com/jdx) in [#841](https://github.com/jdx/usage/pull/841)
- **(derive)** declare the properties mise patches in by hand by [@jdx](https://github.com/jdx) in [#842](https://github.com/jdx/usage/pull/842)
- **(derive)** accept a value the OS accepts and UTF-8 does not by [@jdx](https://github.com/jdx) in [#844](https://github.com/jdx/usage/pull/844)
- **(derive)** share declarations between commands with flatten by [@jdx](https://github.com/jdx) in [#852](https://github.com/jdx/usage/pull/852)
- **(derive)** say three things about a CLI the spec could and the derive could not by [@jdx](https://github.com/jdx) in [#853](https://github.com/jdx/usage/pull/853)
- **(derive)** answer a completion request from the binary itself by [@jdx](https://github.com/jdx) in [#885](https://github.com/jdx/usage/pull/885)
- **(derive)** bind a flag to a setting, from what the parser saw by [@jdx](https://github.com/jdx) in [#889](https://github.com/jdx/usage/pull/889)
- **(derive)** a setting can be declared wherever a flag is by [@jdx](https://github.com/jdx) in [#896](https://github.com/jdx/usage/pull/896)
- **(derive)** let a field name the function that completes it by [@jdx](https://github.com/jdx) in [#892](https://github.com/jdx/usage/pull/892)
- **(derive)** say how an argument relates to `--`, all four ways by [@jdx](https://github.com/jdx) in [#900](https://github.com/jdx/usage/pull/900)
- **(derive)** a default a collecting field can hold by [@jdx](https://github.com/jdx) in [#902](https://github.com/jdx/usage/pull/902)
- **(derive)** say what a command does to the world by [@jdx](https://github.com/jdx) in [#905](https://github.com/jdx/usage/pull/905)
- **(derive)** name a value the way clap names it, and say which usage can read the spec by [@jdx](https://github.com/jdx) in [#907](https://github.com/jdx/usage/pull/907)
- **(derive)** let `parse()` answer a failure the way a program does by [@jdx](https://github.com/jdx) in [#910](https://github.com/jdx/usage/pull/910)
- **(derive)** read the package's version, and be called what the binary is called by [@jdx](https://github.com/jdx) in [#917](https://github.com/jdx/usage/pull/917)
- **(derive)** a command that takes nothing can be written that way by [@jdx](https://github.com/jdx) in [#923](https://github.com/jdx/usage/pull/923)
- **(derive)** say that a command cannot be run alone, which it knew and did not write by [@jdx](https://github.com/jdx) in [#937](https://github.com/jdx/usage/pull/937)
- **(derive)** keep command aliases on their args by [@jdx](https://github.com/jdx) in [#946](https://github.com/jdx/usage/pull/946)
- **(derive)** preserve verbatim doc comments by [@jdx](https://github.com/jdx) in [#949](https://github.com/jdx/usage/pull/949)
- **(derive)** support path value hints by [@jdx](https://github.com/jdx) in [#951](https://github.com/jdx/usage/pull/951)
- **(generate)** add json-schema for a CLI's config file by [@jdx](https://github.com/jdx) in [#839](https://github.com/jdx/usage/pull/839)
- **(go)** emit Go parse tables from a spec, which is what Go has instead of a derive by [@jdx](https://github.com/jdx) in [#931](https://github.com/jdx/usage/pull/931)
- **(go)** emit the cold table too, so generated code can apply the rules by [@jdx](https://github.com/jdx) in [#959](https://github.com/jdx/usage/pull/959)
- **(go)** render the usage line, from a third table that costs nothing unused by [@jdx](https://github.com/jdx) in [#964](https://github.com/jdx/usage/pull/964)
- **(help)** line the flag column up, and give the short page a column at all by [@jdx](https://github.com/jdx) in [#912](https://github.com/jdx/usage/pull/912)
- **(help)** list the flags a command inherits by [@jdx](https://github.com/jdx) in [#913](https://github.com/jdx/usage/pull/913)
- **(help)** list `--help` and `--version`, which every page answers by [@jdx](https://github.com/jdx) in [#914](https://github.com/jdx/usage/pull/914)
- **(lib)** add usage-rs facade by [@jdx](https://github.com/jdx) in [#963](https://github.com/jdx/usage/pull/963)
- **(spec)** support flag relationships by [@jdx](https://github.com/jdx) in [#793](https://github.com/jdx/usage/pull/793)
- **(spec)** add help_heading, and render it by [@jdx](https://github.com/jdx) in [#802](https://github.com/jdx/usage/pull/802)
- **(spec)** allow a mount at the top level by [@jdx](https://github.com/jdx) in [#806](https://github.com/jdx/usage/pull/806)
- **(spec)** make unknown flags configurable, and keep them as values by [@jdx](https://github.com/jdx) in [#810](https://github.com/jdx/usage/pull/810)
- **(spec)** add `conflicts` to flags by [@jdx](https://github.com/jdx) in [#819](https://github.com/jdx/usage/pull/819)
- **(spec)** say that one flag needs another, which nothing here could by [@jdx](https://github.com/jdx) in [#925](https://github.com/jdx/usage/pull/925)
- **(spec)** **breaking** a group, for the rule that no single flag can state by [@jdx](https://github.com/jdx) in [#927](https://github.com/jdx/usage/pull/927)

### πŸ› Bug Fixes

- **(argv)** stop a repeatable flag from eating a positional by [@jdx](https://github.com/jdx) in [#799](https://github.com/jdx/usage/pull/799)
- **(argv)** inherit `unknown_flags`, which reached one command out of a tree by [@jdx](https://github.com/jdx) in [#939](https://github.com/jdx/usage/pull/939)
- **(argv)** reject duplicate flags by [@jdx](https://github.com/jdx) in [#945](https://github.com/jdx/usage/pull/945)
- **(argv)** show choices when a subcommand is required by [@jdx](https://github.com/jdx) in [#947](https://github.com/jdx/usage/pull/947)
- **(ci)** unblock releases by cutting usage-derive's dev-dependency by [@jdx](https://github.com/jdx) in [#811](https://github.com/jdx/usage/pull/811)
- **(ci)** check the version the crates promise, and promise one that is true by [@jdx](https://github.com/jdx) in [#918](https://github.com/jdx/usage/pull/918)
- **(clap)** say what clap would do with an unknown flag by [@jdx](https://github.com/jdx) in [#899](https://github.com/jdx/usage/pull/899)
- **(cli)** recognize about as root command help by [@jdx](https://github.com/jdx) in [#794](https://github.com/jdx/usage/pull/794)
- **(derive)** let a `--`-only argument follow a variadic by [@jdx](https://github.com/jdx) in [#823](https://github.com/jdx/usage/pull/823)
- **(derive)** three more descriptions a spec keeps and the derive lost by [@jdx](https://github.com/jdx) in [#861](https://github.com/jdx/usage/pull/861)
- **(derive)** name the mistake when `settings` has nothing to collect by [@jdx](https://github.com/jdx) in [#904](https://github.com/jdx/usage/pull/904)
- **(derive)** emit the tables beside the user's types, not in a module above them by [@jdx](https://github.com/jdx) in [#938](https://github.com/jdx/usage/pull/938)
- **(docs)** link multi-word commands to their real source files by [@jdx](https://github.com/jdx) in [#845](https://github.com/jdx/usage/pull/845)
- **(docs)** link every command to the file that implements it by [@jdx](https://github.com/jdx) in [#846](https://github.com/jdx/usage/pull/846)
- **(docs)** keep hidden entries out of help by [@jdx](https://github.com/jdx) in [#859](https://github.com/jdx/usage/pull/859)
- **(help)** a command's page should say what that command does by [@jdx](https://github.com/jdx) in [#911](https://github.com/jdx/usage/pull/911)
- **(help)** a declared name is not a short form, and blank help is no help by [@jdx](https://github.com/jdx) in [#916](https://github.com/jdx/usage/pull/916)
- **(help)** render the page for the mount the words reached by [@jdx](https://github.com/jdx) in [#928](https://github.com/jdx/usage/pull/928)
- **(help)** a description ending in a break adds no blank line by [@jdx](https://github.com/jdx) in [#970](https://github.com/jdx/usage/pull/970)
- **(parse)** keep every `--` after the first by [@jdx](https://github.com/jdx) in [#809](https://github.com/jdx/usage/pull/809)
- **(parse)** stop losing a flag that is missing its value by [@jdx](https://github.com/jdx) in [#807](https://github.com/jdx/usage/pull/807)
- **(parse)** answer the five vectors the reference implementation was failing by [@jdx](https://github.com/jdx) in [#930](https://github.com/jdx/usage/pull/930)
- **(spec)** make the config block survive being written out by [@jdx](https://github.com/jdx) in [#832](https://github.com/jdx/usage/pull/832)
- **(spec)** apply default_subcommand only at the root by [@jdx](https://github.com/jdx) in [#850](https://github.com/jdx/usage/pull/850)
- **(spec)** split a clap default by the delimiter clap splits it by by [@jdx](https://github.com/jdx) in [#901](https://github.com/jdx/usage/pull/901)
- **(spec)** rank a subcommand name above another command's alias by [@jdx](https://github.com/jdx) in [#967](https://github.com/jdx/usage/pull/967)

### πŸ§ͺ Testing

- **(spec)** import the argv questions clap's suite answers and ours did not by [@jdx](https://github.com/jdx) in [#926](https://github.com/jdx/usage/pull/926)

### πŸ›‘οΈ Security

- **(docs)** render the config block by [@jdx](https://github.com/jdx) in [#837](https://github.com/jdx/usage/pull/837)
- **(spec)** the config vocabulary by [@jdx](https://github.com/jdx) in [#835](https://github.com/jdx/usage/pull/835)

### πŸ” Other Changes

- agent/complete files by [@jdx](https://github.com/jdx) in [#883](https://github.com/jdx/usage/pull/883)

### πŸ“¦οΈ Dependency Updates

- update rust crate syn to v3 by [@renovate[bot]](https://github.com/renovate[bot]) in [#808](https://github.com/jdx/usage/pull/808)

## [5.1.0](https://github.com/jdx/usage/compare/v5.0.0..v5.1.0) - 2026-08-09

### πŸš€ Features
Expand Down
Loading
Loading