build(deps): update dependency jdx/usage to v6 - #309
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate
Bot
force-pushed
the
renovate/jdx-usage-6.x
branch
from
September 19, 2026 17:16
da593c1 to
c22fc08
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v5.1.0→v6.9.0v6.10.0(+1)Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
jdx/usage (jdx/usage)
v6.9.0: : Default-subcommand flag routing, standalone Args parsing, and smaller help buildsCompare Source
Flags belonging to a default subcommand can now select it without typing its name, a derived
Argstype can be parsed on its own, help colours can be remapped, and a series of help-rendering changes trims binary size for usage-rs adopters. Bash completion also stops mangling colon-separated candidates.Added
(parse) Opt-in default-subcommand flag routing (#1413, @jdx). With
default_subcommand_flags, leading flags that belong only to the configured default subcommand route to it, soem -ua @worldparses asem install -ua @world. Explicit command names and aliases still win, parent-only flags and bare invocations stay on the parent, a mixed short bundle such as-puakeeps the parent's-p, and--or an unknown flag stops the lookahead. Completion also offers the default command's flags at the root. Supported in KDL specs, the Rust derive, and the Go runtime; existing routing is unchanged without the opt-in.usage lintreportsdefault_subcommand_flagsdeclared without adefault_subcommand.#[usage(default_subcommand = "install", default_subcommand_flags)](parse) Parse a derived
Argstype without an enclosing CLI (#1419, @jdx).usage::parse_args_from::<T>treats the slice as that command's words;usage::parse_args_from_argv::<T>strips argv0 first. Both reuse the command's compiled flags, positionals, defaults, validation, and nested subcommands, and return the ordinary parse errors, including help and version requests. Available behind thespecfeature.(help) Remap semantic help colours with a
Palette(#1414, @lu-zero). Theheading,option,metavar, andcommandroles were previously fixed SGR colours.help::Paletteremaps any of them using the existing{$…}tag vocabulary (for example"cyan+bold"), andStyle::paletteapplies it; role names expand once, so mappingmetavarto"heading"uses the built-in heading colour. Hosts that own the exit path getembedded_outcome_paletted/embedded_outcome_into_paletted(andembedded::outcome_paletted);parse()and plain rendering are unchanged.Changed
(cli) Smaller binaries and faster help rendering (#1396, #1399, #1400, #1401, @jdx). Help sorting and rendering do less work and share more code, plain (uncoloured) help skips colour-span analysis, and the flag diagnostics share one formatter. Help output is byte-identical; on the oxc binaries used for measurement this removed roughly 360 KiB combined, and plain
--helprendered about 18% faster locally. Two new opt-ins let CLIs trim further:Flattened subcommand pages,
HelpAll, and recursiverender_allnow live behind ahelp-advancedfeature (enabled by default inusage-rsandusage-argv). A CLI that uses none of them can disable defaults and omit it:#[usage(spec_endpoint_file = "cli.usage.kdl")]answers__usage_spec__from a KDL file included at compile time, keeping the endpoint without linking the runtime serializer.to_kdl()still generates from live metadata, so regenerate the file after CLI changes and test the two for drift.Compatibility note: dependents that already set
default-features = falseand declareflatten_helpor aHelpAllflag must addhelp-advanced; the derive now rejects those declarations at compile time, and hand-written metadata requesting advanced help panics when rendered instead of being silently ignored.Fixed
:is inCOMP_WORDBREAKS, Readline replaces only the fragment after the last colon, so candidates such asupdate:deps:no-cooldownwere inserted with a duplicatedupdate:deps:prefix. The generated Bash script now forwards the current Readline word andCOMP_WORDBREAKSto the__complete_word__request, and the binary reports the prefix Readline keeps so the script can trim it; escaped colons, consecutive colons, and a cursor on a colon are handled. Path candidates are unaffected. Regenerate Bash completion scripts to pick up the fix (reported in jdx/mise#12970).New Contributors
Full Changelog: jdx/usage@v6.8.0...v6.9.0
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.v6.8.0: : Native completions and sharper docs outputCompare Source
This release gives the
usageCLI native shell completions (including PowerShell), adds a configurable link extension for Markdown docs, and fixes a batch of synopsis and Markdown rendering issues across docs and man pages.Added
(cli) Native shell completions (#1388, @jdx).
usage --completions <shell>now emits native scripts that call the installed binary's compiled completion handler instead of caching a spec and relying on the bash-completion helpers. Bash, Zsh, Fish, and a new PowerShell script are all supported, and scripts usecommand usageso a shell function or alias can no longer shadow the executable. All four scripts are published alongside the CLI spec as signed Packslip resources. Generalusage generate completionbehavior is unchanged.(docs) Configurable Markdown link extension (#1394, @jdx). Generated Markdown links previously always ended in
.md, forcing consumers who serve HTML or extensionless pages to rewrite links after generation. A new--link-extensionflag (andMarkdownRenderer::with_link_extension, default.md) controls the suffix on command and configuration links without changing output filenames:Custom templates now also receive
link_extensionandconfig_linkin their context.Fixed
<SUBCOMMAND>even when a command could run without one; the shared usage string now honorssubcommand_required(using[SUBCOMMAND]when optional) and custom placeholder names, keeping terminal help, Markdown, man pages, JSON, and SDK docs consistent. Unresolved mounts can also declare a display-onlysynopsis(for examplemount run="mycli tasks --usage" synopsis="[TASK] [ARGS]…") to document dynamic arguments without running discovery; parsing and completion are unchanged.<COMMAND>/[COMMAND]), includes mount fragments in root and subcommand synopses without running discovery, and emits a detail section for a command whose only documentation is a mount synopsis.Changed
Full Changelog: jdx/usage@v6.7.1...v6.8.0
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.v6.7.1: : macOS Release Build FixCompare Source
This is a small maintenance release with no user-facing changes. It fixes the release automation and macOS build pipeline so that v6.7.1 could be published; there are no library, CLI behavior, or output changes for end users.
Changed
MBX_DISABLEis now set for the universal target so Cargo runs directly; other release targets are unaffected.Full Changelog: jdx/usage@v6.7.0...v6.7.1
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.v6.7.0: : Semantic command styling and sharper CLI docsCompare Source
This release adds a new semantic style for subcommand names in help output, fixes several help and parsing edge cases, and notarizes the macOS binary so browser downloads pass Gatekeeper.
Added
helprow with a newcommandsemantic style (bold green by default), matching the palette family used for options. Plain output is unchanged, so stripping ANSI still yields byte-identical pages. The{$command}…{/$}tag is now recognized across the derive, KDL, Go, and shared help-template vocabularies alongsideheading,option, andmetavar.Fixed
execcommand (#1361, @jdx).usage exec --help(and thexalias, with-hor--help) now prints theexeccommand page instead of failing with a missing<COMMAND>error. Fully specified invocations likeusage exec <COMMAND> <BIN> --helpstill route help to the wrapped script as before.--indented-blocks-to-code-fenceswork on single-file markdown (#1367, @jdx). The flag that converts four-space indented blocks into code fences was a no-op for single-fileusage generate markdownoutput because the model was rendered before the option was applied; it now takes effect. The flag was also renamed from the misleading--replace-pre-with-code-fences(kept as a hidden alias for compatibility).Changed
--usage-cmdno longer documents a nonexistent default,<SCRIPT>and--shellnow have help, per-shell commands explain that-h/--helpprint the wrapped script's page, and commands likelint,mcp,generate completion, and the root command gained long help. The CLI guide pages were rewritten around task-to-command tables. Adopters with snapshot tests overusage's help output will see diffs.New Contributors
Full Changelog: jdx/usage@v6.6.1...v6.7.0
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.v6.6.1: : Cleaner plain help and smarter flag completionCompare Source
A small bugfix release focused on help rendering and shell completion. Plain help output no longer leaks embedded ANSI escapes, root-only help metadata stays on the root page, and completion now handles attached
--flag=valuesyntax.Fixed
--flag=value: the fragment after=is used to narrow suggested values, the full--flag=prefix is reattached to each candidate (since shells replace the whole word), and file-path fallback still applies when a flag has no explicit choices. Fixes #999.Style::PLAINnow removes ANSI CSI/SGR sequences that were already baked into command metadata (common when migrating from clap'scolor_print::cstr!help), keeping plain terminal help and generated Markdown escape-free while colored output is unchanged.mise self-update --help), aligning with clap's command-local help behavior. Applied consistently across the Rust renderer, documentation templates, and the Go renderer.New Contributors
Full Changelog: jdx/usage@v6.6.0...v6.6.1
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.v6.6.0: : Scoped flags and implicit clausesCompare Source
This small release extends the repeatable clause groups introduced in v6.5.0 with per-instance scoped flags and separator-free (implicit) clauses, and completes their integration across the compiled parser, portable KDL, help, completions, and generated documentation.
Added
Scoped flags and implicit clauses. Clauses can now carry
flagnodes that are scoped to a single repeatable instance and reset at each boundary. Theseparatoris now optional: when omitted, a clause with exactly one required, non-variadic positional ends each instance implicitly as soon as that terminal positional is consumed. Scoped flags precede and apply to the next terminal positional, and the parser rejects ambiguous implicit layouts, conflicting flag spellings, duplicate scalar flags within an instance, and trailing scoped flags that never complete an instance. Threaded through the interpreted parser, the compiled argv parser, Rust derive, portable KDL emission, help/completion,usage diff, and the generated Go bindings (#1343, @jdx). Requiresmin_usage_version "6.6".use --postinstall A a --postinstall B bproduces twotoolsinstances:postinstall="A",tool="a"andpostinstall="B",tool="b". In Rust derive, omitseparatorand place the scoped fields on the nestedArgstype.Fixed
requires,conflicts, etc.) can now target arguments inside typed clauses in the compiled parser, so e.g.--forcecan require a clause's terminal positional.TOOL,--postinstall) for clause relationship fields instead of Rust field selectors, keeping reference-parser round-trips valid.[…]) in compiled help, manpage synopsis, and Markdown, and clause-scoped flags and arguments now appear in generated documentation. Empty clauses no longer fail to render.Full Changelog: jdx/usage@v6.5.0...v6.6.0
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider sponsoring at jdx.dev. Every sponsorship helps the project stay independent and moving.v6.5.0: : Sigils, clauses, and Cobra examplesCompare Source
This release introduces two new positional-argument primitives — sigil-classified arguments and repeatable clause groups — plus support for Cobra's
Examplefield when generating specs, and a zsh completion fix for aliases.Added
Sigil-classified positional arguments. Positionals can now be declared with a leading
sigilprefix so they are matched by that prefix rather than by slot order. The prefix is treated as syntax and stripped before the value is stored, validated, or completed, and a sigil argument never advances the ordinary positional cursor — so classified values can interleave with flags and normal positionals. Completion, canonical KDL, argv tables, derive metadata, the Python/TypeScript SDKs, and the conformance corpus all carry sigils through the same contract, and tab completion strips/restores the prefix on every candidate (#1322, #1319, @jdx). Requiresmin_usage_version "6.5".With that spec,
ex +node@24 node -vbindstool=["node@24"],command="node", andargs=["-v"]. In Rust derive, annotate the field with#[usage(sigil = "+")].Repeatable clause groups. A command can declare one separator-delimited group of positionals that repeats: each separator ends the current instance and starts a new one instead of overwriting it, and every instance is stored independently in parse output. Flag and positional state reset at each boundary, an explicit
--protects a literal separator, and completion treats the separator like a restart. Clauses are wired through the interpreted parser, the zero-allocation compiled argv parser, Rust derive (#[usage(clause, separator = "…")]onVec<T>), the Go parser, andusage diff(which reports clause add/remove/separator changes as breaking) (#1321, #1320, @jdx). Requiresmin_usage_version "6.6".run lint --fix ::: test --allproduces twotasksinstances:task="lint",args=["--fix"]andtask="test",args=["--all"].Cobra
Examplefield support. Specs generated with--usage-specnow include Cobra'sExampletext asexamplenodes — a root command's example becomes a top-level node, and a subcommand's becomes a child of itscmdblock. The conventional two-space indent is stripped while multiline formatting and comment lines are preserved (#1333, @thecodesmith).Fixed
gfin="mise run git:finish-branch"). Recursive and cyclic aliases are handled safely (#1330, @halms).Changed
usage-rs) documentation and site no longer carry the experimental label;usage-cliitself is built with it. The separateusage-dynamiccrate remains marked experimental, and Go remains a work in progress (#1334, @jdx).New Contributors
Full Changelog: jdx/usage@v6.4.1...v6.5.0
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider sponsoring at jdx.dev. Every sponsorship helps the project stay independent and moving.v6.4.1: : Colorful Help and Sharper Negative-Value ParsingCompare Source
A focused patch release that adds terminal-aware color to interpreted help output, tightens how negative numbers are parsed as flag values, and lowers the published crates' minimum supported Rust version.
Added
usageCLI,usage bash, andusage execnow render interpreted help with terminal-aware semantic styling (headings, options, metavars, inline markdown, andhelp_template{$…}tags). Coloring is auto-detected from the terminal and honorsNO_COLORandCLICOLOR_FORCE; plain rendering remains available for snapshots and generated artifacts (#1309, @jdx).Fixed
-1are only consumed as a detached flag value whenallow_negative_numbersis set or when the flag's value is truly required (nodefault_missing, not optional). This keeps optional anddefault_missingflags from swallowing negative numbers during subcommand andexternal_subcommanddiscovery, while required flags and explicit opt-ins still bind them correctly. Missing-value errors are also now reported for the awaiting flag even when another recognized option follows (#1317, #1318, @jdx).hide=#true, matching the existing index and flag/arg filtering (#1315, @jdx).required_unlesspredicate logic for arguments and flags with no change in behavior (#1326, @jdx).Changed
usage-lib,usage-dynamic,clap_usage, andusage-clicrates now build on Rust 1.91 (down from 1.95), lettingusage-cliinstall on runner images that ship Rust 1.94 (#1314, @jdx).Dependency Updates
winnowto v1 (#1313, @renovate[bot]).Full Changelog: jdx/usage@v6.4.0...v6.4.1
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider sponsoring at jdx.dev. Every sponsorship helps the project stay independent and moving.v6.4.0: : XDG config layers and terminal-aware help wrappingCompare Source
This release adds XDG-based config file resolution, teaches
--helpto wrap to the terminal width with a smarter column layout, fixes zsh completions at mid-line cursor positions, and slims down the library's dependency tree with an independent Markdown feature.Added
XDG file layers for config resolution.
FileLayer::xdg(XdgBase, path)resolves a relative path under the standard XDG config, data, state, cache, or runtime bases, honoring each base's defaults, absolute-path rules, and precedence with no new dependencies. Config and data bases include system search directories (with the user file winning), while state, cache, and runtime stay user-scoped. TheConfigderive gains matching#[usage(file(path = "…", xdg = "config"))]metadata that expands into the standard precedence chain in the emitted spec (#1303, @jdx).Fixed
CURRENTtocomplete-wordas a zero-based--cword, so completing a word in the middle of a command line (for example--fbefore a trailing argument) resolves against the correct word instead of the last one (#1300, @jdx, fixes #1298).Changed
Independent
markdownandmanpagedoc features. Markdown and manpage rendering are now separate features so consumers who only generate Markdown can drop theroffdependency. The existingdocsandrofffeature names remain as aliases. Internally,heck,shell-words, andstrumwere replaced with focused in-tree implementations andunicode-widthwas bumped to 0.2, shrinking the dependency footprint while keeping the public API and error variants stable (#1301, @jdx).Full Changelog: jdx/usage@v6.3.0...v6.4.0
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider sponsoring at jdx.dev. Every sponsorship helps the project stay independent and moving.v6.3.0: : Colorful help by default and a slimmer dependency treeCompare Source
This release brings semantic colors to
--helpoutput by default, adds a runtime style vocabulary forhelp_template, tightens help-column layout, and removes thekdland defaultmiettedependencies from the library.Added
Semantic colors in help output by default. Coloured
--helpnow renders headings, option literals, and metavariables with distinct semantic colors so pages are easier to scan, while plain and piped output stays untouched (#1297, @jdx).Runtime style tags in
help_template. Templates can now colour and emphasize their own prose with a dependency-free tag vocabulary of 23 named styles (heading,option,metavar, the 8 standard and 8 bright ANSI colors, plusbold,dim,italic,underline). Styles nest and combine,{$$…}/{/$$}escape a literal tag, and substituted section text stays opaque so prose containing{$red}is left alone. Malformed markup falls back safely instead of panicking, and the vocabulary is validated in both Rust derives and KDL specs (#1297, @jdx).Optional
miettefeature. With the library's own error rendering now built in, an opt-inmiettefeature makesUsageErrand KDL parse diagnostics implementmiette::Diagnosticagain, preserving source spans, labels, severity, and help text for callers that already use a miette reporter (#1296, @jdx).Fixed
--report-unused-disable-directives-severity <SEVERITY>) no longer forces every entry on the page into block layout. Oversized entries drop into a wrapped block under their own spelling while shorter neighbors keep a readable two-column layout. Applied consistently across the reference, zero-allocation, and Go renderers (#1293, @jdx).…marker is no longer appended to repeatable flags in help tables,Usage:synopses, Markdown, or generated SDK docs, so options render with ordinary spellings like--env <ENV>. Value-side ellipses (<arg>…) are unchanged, and repeatability is still preserved structurally in the spec viavar(#1295, @jdx).headingsprose field introduced in v6.2.0, so a generated Go CLI renders the same declared section text as the Rust renderer instead of printing the heading alone (#1290, @jdx).Changed
kdland defaultmiettedependencies removed.usage-libnow vendors a trimmed KDL v2 parser and renders diagnostics (source labels, help, and codes) with a small in-process renderer, dropping two dependencies from the default build without changing spec parsing behaviour. Apache-2.0 notices for the vendored code are recorded inNOTICE.md(#1296, @jdx).Breaking Changes
UsageErrno longer derivesmiette::Diagnosticby default. Callers who relied on miette integration should enable the newmiettefeature to restore it (#1296).SpecFlag::usage()no longer round-trips the repeatability marker: parsing--flag…still setsvar, but reprinting yields--flag. Keepvar=#trueas the source of truth in specs rather than relying on the…suffix surviving a reparse (#1295).Full Changelog: jdx/usage@v6.2.0...v6.3.0
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider sponsoring at jdx.dev. Every sponsorship helps the project stay independent and moving.v6.2.0: : Embedded parsing, richer specs, and a redesigned help pageCompare Source
Added
embedded::outcomeand the derive-generatedCli::embedded_outcome/embedded_outcome_intolet N-API, WASM, editor, and test-runner hosts parse without terminating the process, returning a renderedOutcome::Exitwith stream and clap-compatible status (#1250, #1270, #1281).diagnostic::reportreturns a stableCode, subject, and optionalArgvSpan(index plus byte offsets intoOsStr) so hosts can label parse failures without scraping terminal text (#1255).usage::response::expandpre-parses@filearguments with shell-style quoting, nested includes,@@escaping, and cycle detection — kept off the zero-allocation parse path (#1259).#[usage(multiple)]on anArgGroupenum collects related flags like-A/-W/-DintoVec<T>in argv order (#1271).ArgGrouptuple variants now declare one value-taking flag (Migrate(Source),StdinFilepath(PathBuf)), bound throughFromStr, lossless path conversion, orValueEnum(#1253).#[usage(validate_with = …)]runs command-wide invariants after field conversion, and#[usage(try_into = DomainType)]addsparse_into*entry points that finalize throughTryFrom(#1254).default_fnevaluates a typed default at parse time, withdefault_notefor help prose that describes it honestly (#1256).usage-dynamiccrate merges runtime-discovered plugin specs into a derived host's help, completion, and parsing viaCatalog::builder, attaching to a staticexternal_subcommandcatch-all (#1275).help::topicsandhelp::render_topicrender a single standard orhelp_headingsection without inventing fake subcommands (#1257).--helprenders Markdown-style bold, italic, inline-code, and strikethrough spans in prose, leaving plain and piped output unchanged (#1245).kind(Command,Flag,File,Directory,Value) so PowerShell can use nativeCompletionResulttypes, plus adisplaylabel so zsh and PowerShell can show a richer name while insertingvalue(#1239, #1242).type="path:toml,yaml"(or use.extensions("toml", "yaml")onFilePath/AnyPath) and every generated completion script filters accordingly; directories still traverse (#1240).CompletionTracerecords words, prefix, command path, cursor owner, separator state, candidates, and shell path fallback for a Tab answer (#1241).{{grouped_args}},{{ungrouped_args}},{{grouped_flags}}, and{{ungrouped_flags}}let templates interleave namedhelp_headinggroups with default lists (#1251).heading("Ignore Files", help = "…")(andheading "Title" help="…"in KDL) puts a sentence under a named section, next to the entries it explains (#1282).outputblocks with text/JSON/JSONL framing, selectors, defaults, JSON Schemas (includingschema file="…"), an optionalmedia_type, and documentedexitcodes — surfaced through derives, MCP, generated Python/TypeScript SDKs, Markdown, and manpages (#1249, #1274).#[usage(note = "…", warning = "…")](or KDLnote/warningchildren) render as labeled admonitions in long help and portable Markdown blockquotes (#1273).#[usage(surface = "…", available_if(…))]carries descriptive audience labels through KDL, JSON, docs, and conformance tables without changing parse behavior (#1258).MarkdownRenderer::with_templateand theusage generate markdown --template NAME=PATHflag replace individual bundled Tera templates while unchanged ones remain available via{% include %}(#1267).Changed
MarkdownTheme::Compact— dense grouped lists instead of one heading per argument or flag, with title-cased metadata labels, "Output Formats" instead of "Output", and long output catalogs collapsed behind<details>. The previous layout isMarkdownTheme::Detailed(#1272, #1280).-hand--help. Rows now show one aligned column of leaf names plus a short summary; usage syntax and children's fulllong_helpstay on their own pages. mise's root--helpdrops from hundreds of lines to 136 (#1284).[env: …]no longer run off the terminal on-h; they join first and wrap into the description column together, matching what--helphas always done (#1287).[possible values: …],(default: …), and env notes now sit under the description they qualify instead of at a fixed four-space indent (#1291).Fixed
--format=jnow completes as--format=json— static choices, named completers, and runtime overlays route through the attached-value context. Generated specs also materialize the parser-supplied help/version spellings asbuiltin=#trueflags so listings and completions see them (#1277).select, and exit codes declared on flattenedArgstypes survive spec emission (including nested flatten) (#1268).default_fnmay return an empty or non-advertised typed value (#1269).mise --log-level=v --traceused to be accepted by usage-argv (and usage-go) because the post-binding choice check sat inside thegivenguard thatoverridesclears. Both parsers now judge a displaced flag's leftover choice like usage-lib and clap do; Go exports a matchingCheckDisplaced(#1286).write_groupquotes dashed members ("--allow"not--allow),cmdwriteshelp_headingbeforehelp, and rootbefore_help/after_helpmove earlier and into before-then-after order. A maximal fixture now covers every node both writers emit (#1289).#[expect(clippy::pub_underscore_fields)]onPartialstructs keeps internal fields public for cross-module flattening without noisy adopter lints (#1278).str downcaseusage on Windows so case-insensitive command matching keeps working (#1262 by @TheBearodactyl).Performance
New Contributors
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider sponsoring at jdx.dev. Every sponsorship helps the project stay independent and moving.v6.1.1: : Windows path fixes and slimmer derived binariesCompare Source
A patch release focused on making usage a good citizen on Windows and shrinking the code the derive macro generates. Five separator- and prefix-aware fixes across
complete,configandargvland alongside two derive perf passes that trim ~16.5% off a mise-scale stripped binary.Fixed
complete_pathalready accepted/or\on Windows on the way in, but wrote back the platform separator for the middle of the path and a hard-coded/for the trailing directory marker, so typingtarget/de/inccame back astarget\debug\incremental/— a spelling no shell will match. Output now uses the same separator the token already contains (#1230 by @JamBalaya56562).normalizestill canonicalizes for boundary checks, but strips the Windows\\?\/ UNC extended-length prefix before returning, soFileLayer::paths— whichconfig explainreports as provenance — matches what a caller built withcurrent_dir().join(…)(#1232 by @JamBalaya56562).plantakes aPlatformfor a reason: an install plan is made for a machine, not on one. Three places had regressed to using the host's separator (andPath::is_absolute/Path::ends_within tests) — a Linux plan made on Windows was emittingfpath+=('/home/u\.local\share\zsh\site-functions'). All fixed to route throughPlatform::separatorand the crate's own platform-aware helpers (#1233 by @JamBalaya56562).@generated by …marker line instead of the extra "do not edit / no cached spec" preamble (#1226 by @jdx).Aliasesline. Hidden-alias filtering and interactive help are unchanged (#1228 by @jdx).Performance
Two stacked derive-macro passes shrink the code every generated
build()carries, without changing behavior or error messages:#[cold] #[inline(never)]builders inusage-argv(invalid_utf8_value,invalid_parsed_value,invalid_choice_value,invalid_os_value). On a mise-sized shadow binary this drops the stripped size from 1,579 KB to 1,369 KB (−210 KB, −13.3%) and roughly halves generatedbuild()code. Cold parse instructions dip 0.9%; wall time is unchanged within noise (#1235 by @jdx).utf8_values,parsed_values,os_values,spec::choice_values) with an inlinedis_empty()fast path that avoids paying for a call when aVec-shaped field received nothing. Another −51 KB on top, for a cumulative −261 KB (−16.5%) across the stack; instruction counts end up below the pre-stack baseline (#1236 by @jdx).Tests
unused import: WarningKind,enum_variant_namesonShell::PowerShell) socargo clippy --all-targets -- -D warningspasses there (#1234 by @JamBalaya56562).Between them, these three test PRs take a
windows-latestcargo test --all --all-featuresrun from 2,383 pass / 5 fail to 2,393 pass / 0 fail, clearing the way for a real Windows CI job.Full Changelog: jdx/usage@v6.1.0...v6.1.1
💚 Sponsor usage
usage is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Work on usage is funded by sponsorships.
If
usagepowers CLI specs, docs, or completions for a tool you maintain or use, please consider [sponsoring at jdx.dev]Configuration
📅 Schedule: (in timezone Europe/Stockholm)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.