Warning
This version is not released yet and is under active development.
- Fix
multipleand variadic (nargs=-1) options typed withEnumChoice: their tuple default was stringified as a whole (str((MyEnum.FOO,))) instead of per member, so the default tripped Click'sValue must be an iterablecheck when the option was left unset. - Fix
decorator_factoryleaking options across reuses of a pre-instantiated decorator: applying the samecommand()orgroup()decorator to several functions accumulated duplicate parameters, because Click extended its sharedparamslist in place on each use.
- Breaking: Rename the
test-plansubcommand totest-suite, its--plan-file/--plan-envvaroptions to--suite-file/--suite-envvar, its[tool.<cli>.test-plan]config section to[tool.<cli>.test-suite], theclick_extra.test_planmodule toclick_extra.test_suite, and theTestPlanConfig/parse_test_plan/run_test_plan/DEFAULT_TEST_PLANAPI toTestSuiteConfig/parse_test_suite/run_test_suite/DEFAULT_TEST_SUITE. TheCLITestCaseclass and the[[cases]]file structure keep their names. - Breaking: Replace the test-suite config's
inlinefield with a nativecasesarray under[tool.<cli>.test-suite.cases](or setfileto a suite path). Adds thecasesfield toTestSuiteConfigand thecases_from_datahelper. - Breaking:
ClickExtraConfig,TestSuiteConfig, andPrebakeConfigare no longer re-exported from the top-levelclick_extranamespace; import them fromclick_extra.config. - Add a Carapace completion exporter: the
click_extra.carapacemodule serializes a Click command tree to carapace-spec YAML for native shell completion, behind a newcarapaceextra. Theto_carapace_spec,dump_carapace_spec,write_carapace_specandinstall_carapace_specAPI answersclick#3188. - Add a
--carapacemode to thewrapcommand:click-extra wrap --carapace SCRIPTprints the target CLI's spec, and--installwrites it into Carapace's user spec directory. Mutually exclusive with--manand--show-params. - The
wrapcommand now accepts a local project directory, reading its console-script entry point frompyproject.tomlorsetup.cfgso a checked-out project can be wrapped without installing it first. - Add the
@sort_by_optiondecorator for the--sort-bytable option, composing with option groups and constraints; it acceptsColumnSpecdefinitions and acolumns=registry so one column tuple drives both--columnsand--sort-by. Closesclick-extra#1777. - Decorators built by
decorator_factorycarry proper signatures: their option class's constructor surfaces inhelp(), the REPL and autodoc, and overloaded type hints let basedpyright, pyright and mypy infer the produced command or decorated callback. Closesclick-extra#1781. @version_optionaccepts an explicit version string as its first positional argument (@version_option("1.2.3")), for drop-in compatibility with Click.- A test-suite file may now be in any list-capable config format detected from its extension: TOML and JSON (built-in), plus YAML, JSON5, JSONC and Hjson (with their extras). Adds the
load_test_suitehelper andSUITE_FORMATSconstant. - Accept a bare integer
timeoutin a test-suite case, coercing it to a float instead of rejecting it. - Default the test-suite config file to
./tests/cli-test-suite.toml, which parses with the built-intomlliband so needs no optional extra. - Add an
allextra that pulls in every optional feature at once. - Centralize config format reading, serialization, and detection in
click_extra.configwith the newserialize_content,read_file, andformat_from_pathhelpers, joining the existingparse_content. - Add
iter_subcommandsandmake_resilient_contexttoclick_extra.parametersfor enumerating a group's visible subcommands and building a parse-free introspection context. - Add the
CONFIG_PATH_METADATA_KEYandNORMALIZE_KEYS_METADATA_KEYnamed constants for the schema field-metadata keys, alongside the existingEXTENSION_METADATA_KEY. - Man pages now render optional-value options like
--coloras--color[=auto|always|never]and drop the spurious value metavar on repeatable count options like-v/--verbose. - When introspection (
--man,--show-params,--carapace) cannot find a Click command in the resolved module, the error now explains that an entry point importing its command lazily must be addressed withmodule:functionnotation. - Unify the "missing optional dependency" error messages behind a shared
missing_extra_messagehelper, pointing at the canonicalpip install click-extra[<extra>]install target. - Restrict pytest collection to the
testsfolder and switch toimportlibimport mode, fixingimport file mismatcherrors when building from a packaged source tree alongside an installed copy. Closesclick-extra#1779. - Show the same configuration across all eight supported formats (TOML, YAML, JSON, JSON5, JSONC, Hjson, INI, XML) in a tabbed block in the configuration docs.
- Silence ambiguous cross-reference warnings in the Sphinx documentation build for the
ColumnSpec,ConfigFormat,ConfigValidatorandLogLevelclasses re-exported at the package root.
- Redo a proper release.
Note
8.0.0 is available on 🐍 PyPI.
Warning
8.0.0 is not available on 🐙 GitHub.
- Breaking: Drop the
Extraprefix from public classes (ExtraCommandtoCommand,ExtraGrouptoGroup,ExtraContexttoContext,ExtraVersionOptiontoVersionOption, and eight more);ExtraOptionkeeps its prefix. - Breaking: Remove the deprecated
extra_command,extra_groupandextra_version_optionaliases; usecommand,groupandversion_optioninstead. - Breaking:
VersionOptionand@version_optionnow takefields={...}andstyles={...}mappings instead of per-field value and*_styleparameters;message/message_styleare unchanged. - Breaking: Replace the
--color/--no-colorboolean with the GNU tri-state--color[=WHEN](auto,always,never), defaulting toauto; a bare--colormeansalways. - Breaking: Remove the
--ansi/--no-ansialiases of--color/--no-color. - Breaking: Remove the
show-paramsandmansubcommands; useclick-extra wrap --show-paramsandclick-extra wrap --maninstead. - Breaking: Rename the
click_extra.wrapmodule toclick_extra.cli_wrapper; update anyfrom click_extra.wrap import ...accordingly. - Breaking: Reorganize the configuration subsystem into a
click_extra.configpackage withschema,formats, andoptionsubmodules; public symbols stay importable fromclick_extra.config. - Breaking: Split
click_extra.colorizeintoclick_extra.highlight(help-screen highlighting) andclick_extra.color(color-mode resolution); root re-exports unchanged, update deeper imports. - Breaking: Split the theme palette and HTML renderer into
click_extra.theme_docsand the spinner preset catalog intoclick_extra.spinner_presets; root re-exports unchanged, update deeper imports. - Breaking: Remove
print_sorted_table;SortByOptionnow bakes the sort key intoctx.print_tablefor use with or without--sort-by. - Breaking: Remove dead
ParamStructureinternals: the unusedflatten_tree_dict/_flatten_tree_dict_genmethods, the__init__, and the redundantSEPattribute (use the module-levelclick_extra.parameters.PARAM_PATH_SEP). - Breaking: Remove the unused
click_extra.styling.cascade_fieldshelper. - Add a
Spinnerwidget for long blocking work as a context manager or decorator, with 90 presets inSPINNERSand TTY auto-disable; includes aspinnerdemo subcommand on theclick-extraCLI. - Add
click_extra.test_planand aclick-extra test-plansubcommand for YAML-driven black-box subprocess testing of any CLI; YAML parsing needs theyamlextra. - Add
--progress/--no-progress(ProgressOption) andclick_extra.progressbar, a drop-in forclick.progressbarthat hides under--no-progressor--accessible. - Add
-q/--quiet(QuietOption), the counterpart to-v/--verbose: each-qlowers the log level towardCRITICAL, the two cancelling out. - Under
--accessible,click_extra.clearis a no-op andclick_extra.echo_via_pagerstreams to stdout instead of spawning a pager. - Add
no_color_option/NoColorOption, a standalone--no-colorflag for plainclick.commandCLIs. - Add
{author},{license},{git_distance}, and{git_dirty}version-string template variables; git ones support pre-baking viaclick-extra prebake all. VersionOptiongit fields fall back to.git_archival.jsonwhen running from agit archiveexport without a.gitdirectory.--jobs(JobsOption) now acceptsautoandmaxkeywords in addition to an integer, with shell completion;run_jobs(func, items)executes items against the resolved count.- Add
make_schema_callable(schema), a callable that coerces a raw config dict into a validated dataclass. - Add
require_sibling_paramandlast_paramhelpers toclick_extra.parametersfor locating sibling and typed parameters at call time. - Re-type
pass_contextfor the enhancedContext, so@pass_context def cmd(ctx: Context)type-checks. - Add
click_extra.prebakehosting build-time version pre-baking helpers (prebake_version,prebake_dunder,discover_package_init_files); still importable fromclick_extra.version. - Speed up
import click_extraby deferring heavy imports, cutting startup time by roughly a third. - Drop
requestsas a runtime dependency; the configuration-from-URL loader now usesurllib.request. click-extra wraphonors the tri-state color resolution, colorizing the wrapped CLI underautoonly when the output is a terminal.--colorand--no-colorcolorize eager--helpand--versionscreens regardless of their position on the command line. Closesclick-extra#137.--color[=WHEN]acceptsyes/force,no/none, andtty/if-ttyas hidden aliases; configuration files also accept native booleans (true/false).- Under
auto, adumborunknownTERMstrips ANSI color even on a terminal; an explicit--colororFORCE_COLORoverrides. - Branded 24-bit themes (
dracula,monokai,nord,solarized_dark) downsample to 256 colors when the terminal does not advertise truecolor. click-extra wrap --show-paramsnow reports the target's environment variables and resolves parameter values and their source from arguments passed after SCRIPT.- Lower the Click floor from
8.4.1to8.3.1, restoring support for Click8.3.1and later. - The
click:runandclick:treeSphinx directives now capture at the file-descriptor level by default (Click8.4+); setclick_extra_run_capture = "sys"to opt out. - Tolerate a missing
click_extra/themes.tomldata file: log a warning and fall back to the no-color theme. - Fix
from click_extra import *raisingAttributeErrordue toVersionOptionmissing from the bound namespace. - Fix the dim bracket styling of an
IntRangeoption's[x>=N]constraint leaking across the next option in colored help. - Fix inconsistent highlighting of the
--jobs [auto|max|INTEGER]metavar in colored help. - Fix the
assert_output_regextesting fixture raisingTypeErroron a failed match under pytest 9. - Fix
context_settings={"show_choices": True}being ignored on aCommandorGroup. - Fix
click-extra manandwrite_manpagesauthor and version resolution when the import name differs from the installed distribution name. --validate-confignow raisesRuntimeErrorinstead ofTypeErrorwhen used on a command with no sibling--configoption, matching--no-config.- Fix broken documentation links for the GNU
--colorreference,click.ParameterAPI anchor, and parameters page cross-references.
- Fix the MkDocs plugin and Sphinx directives leaving Rich-based CLIs (such as
rich-click) colorless in rendered documentation.
- Add
MultiChoicetoclick_extra.types: a ClickParamTypefor comma-separated multi-pick from a fixed set of values, the pick-many counterpart toclick.Choice. - Extend the
--show-paramstable with seven new columns (Is flag,Flag value,Is bool flag,Multiple,Nargs,Prompt,Confirmation prompt). - Add the
--columnsoption (ColumnsOption,@columns_option) for SQLSELECT-style column selection on both--show-paramsand the standaloneclick-extra show-paramssubcommand. - Add a
click:treeSphinx directive that walks a Click command tree and expands into a summary table plus one{click:run}--helpblock per command. MyST-only. - Fix
click-extra show-paramsignoring the top-level--table-formatoption and rendering its default as the enum name instead of the kebab-case ID. - Fix
click-extra show-paramsandclick-extra manresolving auto-generated environment variables as empty; theenvvarscolumn now matches what Click reads at runtime. - Fix the MkDocs plugin stripping ANSI escape codes but rendering no colors: it now generates the ANSI Pygments stylesheet and registers it through
extra_css, so the-Ansi-*classes it emits are styled. - Drop duplicate and dead CSS classes from ANSI HTML rendering: compound tokens like
Token.Ansi.Bold.Cyannow emit-Ansi -Ansi-Bold -Ansi-Cyaninstead of repeating-Ansi-Boldand adding an unstyled-Ansi-Bold-Cyan.
- Add an
--output-dir DIRoption toclick-extra man, writing one.1file per command intoDIRinstead of printing a single page to stdout. - Add a
click_extra_manpagesSphinx config value and aclick-extra-manpagesdirective to emit Click command trees as roff.1files (and browser-viewable.htmlsiblings whenmandocorgroffis available) on every HTML build. - Fix
ExtraVersionOption.package_versionresolving toNonewhen the top-level module name differs from the installed distribution name (PILvsPillow); passpackage_nameexplicitly to disambiguate.
- Breaking: Consolidate
--time,--jobs, and-0/--zero-exitinto a singleclick_extra.executionmodule; theclick_extra.jobsandclick_extra.timersubmodules are removed (their decorators and classes remain importable from theclick_extraroot). - Breaking: Unify configuration-loading errors under
ValidationError. Unknown CLI-parameter keys (strict=True) and unknown schema fields (schema_strict=True) now exit with code 1 instead of raising an uncaughtValueError; catch theSystemExitor use--validate-config/run_config_validation()to inspect errors. - Add a
--manoption to@extra_commandand@extra_group(and the@man_optiondecorator) that prints the command's man page to stdout and exits. - Add an
--accessibleoption (and@accessible_optiondecorator,AccessibleOptionclass) to@extra_commandand@extra_group; it or theACCESSIBLEenvironment variable is equivalent to--no-color --table-format plainfor screen readers. Explicit--coloror--table-formatkeeps precedence. - Add a
mansubcommand to theclick-extraCLI:click-extra man SCRIPT [SUBCOMMAND]...renders any external Click CLI's man page. Bothmanandshow-paramsnow also accept.pyfile targets. - Add the
click_extra.man_pagemodule to generate man pages programmatically:render_manpage(),render_manpages(), andwrite_manpages(). - Add a
-0/--zero-exitoption (@zero_exit_optiondecorator,ZeroExitOptionclass) that records intent inctx.metaunder theZERO_EXITkey for downstream code to read. - Honor the standard
POSIXLY_CORRECTenvironment variable: when present,ExtraContextforcesallow_interspersed_argstoFalse, stopping option parsing at the first positional argument. - Add
run_config_validation()and theValidationReportdataclass toclick_extra.config, running the CLI-parameter check, schema build, and every registeredConfigValidatorin one pass;collect_alltoggles between gathering all errors or stopping at the first. - Fix
schema_strict=Truewrongly rejecting a configuration field marked withEXTENSION_METADATA_KEYwhen its Python type is not a mapping.
- Add Mermaid diagrams throughout the documentation for configuration source selection and precedence, class layering and default-option bundles,
--color/--no-colorenablement,{version}/{exec_name}fallback chains, thedecorator_factoryguardrail, and environment-variable id resolution.
Note
7.17.1 is available on 🐙 GitHub.
Warning
7.17.1 is not available on 🐍 PyPI.
- Fix the Nuitka standalone binaries aborting at startup with
FileNotFoundError: themes.tomlby bundlingclick_extra/themes.tomlvia a new[tool.nuitka]include-package-datasetting.
Note
7.17.0 is available on 🐙 GitHub.
Warning
7.17.0 is not available on 🐍 PyPI.
- Breaking: Bump the Click floor to
8.4.1, required for correct parameter-source detection in eager callbacks (ColorOptionprecedence,ConfigOptionbranching,ShowParamsOption'sSourcecolumn). - Breaking: Bump the
requestsfloor to2.34; it now ships inline type annotations, so thetypes-requestsstub package is removed from thetypingdependency group. - All built-in themes now follow the man-pages(7) font convention: literal tokens (commands, aliases, option flags, choice values) render bold and replaceable tokens (metavars, argument names) render italic. Declared by the new
LITERAL_STYLES/REPLACEABLE_STYLESfrozensets inclick_extra.theme. - Add a colorless
manpagebuilt-in theme that renders the bold-literal / italic-replaceable convention with no color, selectable via--theme manpage. HelpCommandnow raisesclick.NoSuchCommandinstead ofclick.UsageErrorfor an unknown subcommand, so the user sees did-you-mean suggestions.- Remove the
HelpExtraFormatter.write_usageoverride, no longer needed now that Click measures visible width when wrapping. - Drop the explicit
type=UNPROCESSEDfromNoConfigOption.__init__, now auto-detected by Click forflag_valuewith non-basic types. - Bump the
myst-parserfloor in thedocsdependency group to5.1; doc builds now use its native"alert"syntax extension instead of the in-tree converter. - Drop the
coloramatest-matrix variation.
- Fix
ConfigOptionleaking keys from an earlier--configinto later invocations of the same CLI in one process (Sphinx builds, test runners, REPLs).
- Breaking: Remove the
click_extra.themesmodule and the per-theme constantsDARK,DRACULA,LIGHT,MONOKAI,NORD,SOLARIZED_DARK; useBUILTIN_THEMES["<name>"]instead. - Breaking: Replace the
default_thememodule attribute withget_default_theme()/set_default_theme(theme)accessors that always observe the current value. - Breaking: Remove the pre-rendered
OKandKOconstants; use the rawOK_GLYPH/KO_GLYPHstrings styled at the call site so they follow the active theme. - Breaking:
theme_registryno longer accepts aCallable[[], HelpExtraTheme]value; onlyHelpExtraThemeinstances are valid entries. - Breaking: Move telemetry storage to
ctx.meta[context.TELEMETRY]; consumers readingctx.telemetrymust switch tocontext.get(ctx, context.TELEMETRY). - Add four branded built-in themes:
solarized_dark,dracula,nord, andmonokai. The full catalog now ships asclick_extra/themes.toml;BUILTIN_THEMESis the single public{name: HelpExtraTheme}dict. - Add a
ThemeChoiceclick.ParamType(no longer aclick.Choicesubclass) whose choices read the live registry, so themes loaded from--configappear as valid--themechoices and in the--helpmetavar. - Add the
click_extra.stylingmodule with a feature-richStylesubclass (hex constructor,a | bcomposition,cascade,to_dict/from_dict,to_css,from_ansi, WCAGcontrast_ratio), exposed asfrom click_extra import Style. - Add
to_dict()/from_dict()/cascade(base)toHelpExtraThemefor sparse theme overrides layered on a full palette. - Read user-defined theme palettes from the config file: every
[<cli>.themes.<name>]table is parsed and available to--theme, cascading on the matching built-in or registered as a stand-alone theme, without mutating the global registry. - Add an app-defined configuration-validation hook: new
ConfigValidator,ValidationError, andEXTENSION_METADATA_KEYtypes, registered via aconfig_validators=kwarg onExtraCommand/ExtraGroup(and@command/@group/@config_option).--validate-confignow collects every error before exiting. - Flip the
AnsiColorLexer.true_colordefault toTrue: 24-bit RGB sequences render as inlinestyle="color: #rrggbb"spans by default. Restore the old behavior withAnsiColorLexer(true_color=False). - Add the
:emphasize-result-lines:option to theclick:runandpython:runSphinx directives to highlight lines in the captured output. - Fix
pyproject.tomlCWD discovery skipping files lacking a[tool.<cli_name>]section, so an unrelatedpyproject.tomlno longer shadows the user's app-dir config. - Fix
ExtraVerbosity.set_level()changing the logger level during help rendering and shell completion, and fixreset_loggersdouble-registration when both--verbosityand-vare passed. - Inner bracket-field slots (
envvar,default,required,range_label) now fall back to thebracketslot's style, so a minimal palette colours the whole bracket field uniformly. - Deprecate
click_extra.sphinx.alertsnow thatmyst-parser5.1.0ships a native"alert"extension; the regex converter is registered only on oldermyst-parser.
- Breaking: Code importing theme symbols from
click_extra.colorizemust switch toclick_extra.theme(thefrom click_extra import HelpExtraThemepath is unaffected). - Breaking:
from click_extra.commands import ExtraContextandfrom click_extra import ctx_metamust becomefrom click_extra.context import ExtraContextandfrom click_extra import context(thefrom click_extra import ExtraContextpath is unaffected). - Breaking: Disable the
click:*andpython:*Sphinx directives by default, since they execute arbitrary Python at build time. Re-enable withclick_extra_enable_exec_directives = Trueinconf.py. - Add opt-in 24-bit true-color rendering to the ANSI Pygments stack via
true_color=TrueonAnsiColorLexer,AnsiFilter, or any session lexer;AnsiHtmlFormatterrenders the preserved RGB tokens as inlinestyle="color: #rrggbb"spans. Default 256-color quantization is unchanged. - Add a
click_extra.thememodule centralizing all theme machinery (HelpExtraTheme,ThemeOption,theme_option,theme_registry,register_theme(), …). Every command now accepts--theme [dark|light], extensible viaregister_theme(); the active theme is read withget_current_theme(). - Add a
click_extra.contextmodule consolidatingExtraContextand a documented registry of everyctx.metakey, withget()/set()helpers. Replacesclick_extra.ctx_meta. - Add
python:source,python:run,python:render,python:render-myst, andpython:render-rstSphinx directives under a newpythondomain, mirroringclick:source/click:runfor arbitrary Python; therenderfamily turns captured stdout into live document content. - Tighten the Click floor to
8.3.1, the minimum shipping the parameter-name fix this depends on.
- Relax the Click floor back to
8.1by replacingParameterSourceordered comparisons inConfigOptionwith set membership. - Relax the tabulate floor back to
0.9by aliasingcolon_gridtogridwhen tabulate< 0.10is installed.
- Add a
wrapsubcommand:click-extra wrap SCRIPT [ARGS]...applies help colorization to any installed Click CLI without modifying it. Supports--themeand[tool.click-extra.wrap.<script>]config sections; unknown subcommands fall through towrapautomatically.runis kept as an alias. - Add a
show-paramssubcommand:click-extra show-params SCRIPT [SUBCOMMAND]...introspects any external Click CLI's parameters as a table, honoring all--table-formatrenderings and drilling into nested subcommands. - Add
get_param_spec()andformat_param_row()as public API inclick_extra.parameters, the shared spec extractor and cell renderer for both--show-paramsandshow-params. - Make
ParamStructure.get_param_type()a@staticmethodthat returnsstrfor unrecognised custom types instead of raising. - Replace the
render-matrixsubcommand with individualcolors,styles,palette,8color, andgradientsubcommands under a Demo section, and remove theclick-extra-demoentry point. - Bump the Click floor to
8.3.3.
- Add a MkDocs plugin for ANSI color rendering in code blocks: install with
pip install click-extra[mkdocs], then addclick-extrato yourmkdocs.ymlplugins list. - Automatically patch
mkdocs-clickcode blocks to use theansi-outputlexer when the plugin is enabled, so CLI help text with ANSI codes renders with colors. - Fix API reference sections rendering as raw RST instead of formatted documentation by wrapping
automoduleandautoclasstreedirectives ineval-rstblocks. - Add OSC 8 hyperlink support to
AnsiColorLexerandAnsiHtmlFormatter, rendering terminal hyperlinks as clickable HTML<a>tags; other OSC sequences are now fully stripped.
- Breaking: change
render-matrix --matrix=<choice>to a positional argumentrender-matrix <choice>. Addpalette,8color, andgradientchoices. - Add
JobsOptionand the@jobs_optiondecorator for parallel execution control. Defaults to available CPUs minus one, and warns when the count is clamped. - Improve error messages for single-dash multi-character tokens like
-dbgwrong: report the full token with close-match suggestions instead ofNo such option: -d. - Replace the
pygments-ansi-colordependency with an inline ANSI SGR parser, adding italic, underline, reverse video, strikethrough, and 24-bit RGB colors. The token namespace moves fromToken.Color.*/Token.C.*toToken.Ansi.*and CSS classes from.-Color-*/.-C-*to.-Ansi-*. - Rename
lexer_maptoLEXER_MAP. - Fix
render-matrix colorsstyling background color column headers as foreground colors.
- Add
serialize_data()andprint_data()to serialize arbitrary nested Python data to JSON, HJSON, TOML, YAML, and XML, complementingrender_table()/print_table(). - Add a
sort_keyparameter torender_table()andprint_table()for pre-render row sorting. - Catch
ImportErrorfrom missing optional dependencies inprint_table()andprint_data(), emitting a clean one-line error instead of a traceback.print_data()takes apackageparameter to customize install instructions. - Add
print_sorted_table()andSortByOption, which generates a--sort-byCLI option from column definitions and wiresctx.print_tableto the sorted variant. - Add an auto-injected
helpsubcommand toExtraGroup:mycli help [subcommand]shows help and--search termsearches all subcommands. Disable withhelp_command=False. - Expose the
HelpKeywordsdataclass andcollect_keywords()(renamed from_collect_keywords()) as public API for extending help-screen highlighting. - Add
extra_keywordsandexcluded_keywordsparameters toExtraCommandandExtraGroupto inject or suppress highlighted strings. Both accept aHelpKeywordsinstance. - Highlight manually-added deprecation markers like
(Deprecated)or(deprecated: reason)alongside Click-native(DEPRECATED)markers. - Style individual choices inside their own metavar (
[json|csv|xml]) as structural elements, always styled even when free-text highlighting is suppressed. - Propagate
excluded_keywordsfrom parent groups to subcommands. - Fix command aliases rendered by Cloup in parenthetical groups (like
backup (save, freeze)) not being highlighted in help screens. - Fix choice cross-reference highlighting bleeding into bracket fields when a default value contained a choice keyword (like
outlineinrounded-outline). - Fix parent-context choice collection lowercasing case-insensitive choices that define a custom metavar.
- Fix the
pipeandgithubtable formats to produce mdformat-compatible separator rows, preventing a formatting cycle between tabulate and mdformat. - Compute the test matrix dynamically via
repomatic metadata(OS, Python, and stability axes), with custom Click/Cloup version axes via[tool.repomatic.test-matrix]. PRs get a reduced matrix. - Replace
{eval-rst}-wrappedautomoduleandautoclasstreedirectives with native MyST syntax in all docs.
- Highlight parent group names in subcommand help text even when interleaved with options.
- Add
range_label,required, andargumenttheme slots toHelpExtraTheme, styling argument metavars separately from option metavars. - Add a
cross_ref_highlightflag toHelpExtraTheme. Set toFalseto disable free-text highlighting of options, choices, arguments, metavars, and CLI names; structural elements stay styled. - Add type-aware flattening, field metadata, and nested dataclass support to
config_schema.flatten_config_keys()andnormalize_config_keys()accept anopaque_keysparameter, and fields supportclick_extra.config_pathandclick_extra.normalize_keysmetadata. - Fix help-text highlighting of hyphenated option names (like
--table-format), argument names colliding with option keywords, and substring matches in compound keywords (likeoutlineinsiderounded-outline). - Fix enum coloring to use
normalize_choice()so the metavar strings match instead of raw enum member names.
- Add a
flatten_config_keys()utility to flatten nested config dicts into a single level by joining keys with a separator. - Flatten nested config dicts before dataclass field matching in
config_schema, so nested TOML sub-tables map to flat dataclass fields. - Add a
schema_strictparameter toConfigOptionandExtraCommand/ExtraGroup: whenTrue, unknown config keys raiseValueErrorduring schema validation instead of being dropped. - Auto-discover
pyproject.tomlby walking up from the working directory to the VCS root before falling back to the app config directory. - Instantiate
config_schemadefaults when no config file is found, soget_tool_config()never returnsNonewhen a schema is configured. - Forward
included_paramsfromExtraCommand/ExtraGrouptoConfigOption, letting@group(included_params=())disablemerge_default_mapwhen config keys are schema-only. - Move
prebake_version(),prebake_dunder(), anddiscover_package_init_files()fromExtraVersionOptionstatic methods to module-level functions inclick_extra.version. - Add a
git_tagtemplate field, resolved from a__git_tag__dunder orgit describe --tags --exact-match HEADat runtime. - Add a
git_tag_shatemplate field, resolved from a__git_tag_sha__dunder with agitsubprocess fallback. Replaces the old__tag_sha__convention. - Resolve git template fields (
git_branch,git_long_hash,git_short_hash,git_date) from pre-baked__<field>__dunders before falling back to subprocess calls, so compiled binaries can embed git metadata at build time. - Add a
click-extra prebakeCLI withall,version, andfieldsubcommands to bake__version__and git fields. Field names auto-wrap with__...__, and targets are auto-discovered from[project.scripts]. - Add empty
__git_*__dunder placeholders toclick_extra/__init__.py. - Pin image URLs in
readme.mdanddocs/tutorial.mdto the release tag at bump time, restoring them tomainon the next dev bump.
- Add
config_schemaparameter toConfigOptionandExtraCommand/ExtraGroupfor typed configuration access via dataclasses or custom callables. - Add
fallback_sectionsparameter for legacy configuration section name migration with deprecation warnings. - Add
normalize_config_keys()utility to convert kebab-case config keys to snake_case Python identifiers. - Add
get_tool_config()helper to retrieve typed configuration from context. - Check more variations of local, stable and dev CLI invocations.
- Adopt
RUF022rule to letruffenforce__all__sorting. - Fix ruff
0.15.5lint errors.
- Add
version_fieldsparameter toExtraCommandandExtraGroup. Forwards anyExtraVersionOptiontemplate field (e.g.prog_name,version,git_branch) from the command decorator without replacing the default params list. - Lazily evaluate version metadata fields in
ctx.meta. - Remove
versionparameter fromExtraCommandandExtraGroup. - Add
hjson,json,json5,jsonc,toml,xmlandyamltable formats for--table-format. - Add
TableFormat.is_markupproperty. - Strip ANSI color codes from markup table formats (
csv,html,latex,rst, etc.) by default. Use--colorto preserve them. - Add
[toml]extra dependency group for TOML table output viatomlkit. - Emit native types (booleans, nulls, lists) in
--show-paramsoutput for structured serialization formats (JSON, YAML, TOML, HJSON, XML). - Fix
--show-paramsignoring--table-formatwhen it appears first on the command line. - Expand dotted keys in configuration files (e.g.
"subcommand.option": value) into nested dicts before merging, to allow for mixing flat dot-notation and nested structures. - Only capture timer start time when
--timeis actually requested. - Add
click-extraentry point souvx click-extraworks out of the box. Theclick-extra-demoalias is kept for backward compatibility.
- Bump
tabulaterequirement from>=0.9to>=0.10. - Add new
colon-gridtable format. - Replace custom
githubtable renderer with tabulate'spipeformat. Backport of python-tabulate#410.
- Fix
ExtraVersionOption.cli_frame()crashing in Nuitka-compiled binaries where all stack frames belong to the Click ecosystem. - Fix
ExtraVersionOption.module_versionreturningNonein__main__entry points by checking the parent package's__version__. - Fix test plan for Nuitka-compiled binary.
- Add
@pytest.mark.oncemarker for platform-independent structural tests. Run them in a single CI job instead of across the full matrix.
- Fix
test_default_pattern_roaming_force_posixtest failures whenXDG_CONFIG_HOMEis set. Closes {issue}1541.
- Add
ExtraVersionOption.prebake_version()static method to pre-bake__version__strings with Git hashes at compile time, complementing the runtimeversionproperty for Nuitka/PyInstaller binaries.
- Fix test failures when optional config format dependencies are not installed. Closes {issue}
1538.
- Add
_default_subcommandsreserved configuration key to auto-invoke subcommands when none are provided on the CLI. Closes {issue}1405. - Add
_prepend_subcommandsreserved configuration key to always prepend subcommands to every invocation (requireschain=True). Closes {issue}1405. - Add
--validate-configoption to validate configuration files. - Add
ConfigFormat.PYPROJECT_TOMLformat for[tool.*]section support inpyproject.toml. Closes {issue}1524. - Stop parent directory walk on inaccessible directories.
- Add
stop_atparameter to@config_optionto limit parent directory walking. Defaults toVCS. Closes {issue}651. - Add
VCSsentinel andVCS_DIRSconstant for VCS root detection. - Resolve relative paths to absolute in
parent_patternsbefore yielding. - Add
included_paramsallowlist toConfigOptionand@config_option, the inverse ofexcluded_params. Closes {issue}1362. - Add human-friendly display labels to
ConfigFormat. - Switch back from
SPLITtoBRACEflag for multi-format config file patterns. Fixes a bug where only the first format received the directory prefix withSPLIT. - Hard code icon workaround for Sphinx index entries.
- Automatically append Git short hash as a PEP 440 local version identifier to
.devversions (e.g.,1.2.3.dev0+abc1234). - Skip Git hash suffix for versions that already contain
+(pre-baked local identifiers) to avoid invalid double-suffixed versions. - Recognize
LLMenvironment variable to strip ANSI codes when running under an AI agent.
- Allow disabling of autodiscovery of configuration files by setting
default=NO_CONFIGon@config_option. Closes {issue}1495. - Implement
resolve_any_xrefinClickDomainto prevent MyST-Parser warning. Closes {issue}1502. - Fix subcommand conflict detection checking against root-level params instead of parent params. Closes {pr}
1286.
- Fix GitHub alerts converter mangling
list-tabledirective content. Closes {issue}1490. - Replace Dependabot by Renovate.
- Move
click_extra/docs_update.pytodocs/docs_update.py. - Add
pygments-ansi-colortodocsdependency group for lexer table generation.
- Add new
alignedtable format with single-space column separators and no borders. - Fix parallel mode support in Sphinx extension. Closes {issue}
1482.
- Fix
TableFormat.GITHUBto render proper alignment hints in the separator row (:---,:---:,---:). - Move auto-lock time from 8:43 to 4:43.
- Set cooldown period via the
pyproject.toml. - Add Download link to project metadata.
- Include license file in package.
- Replace deprecated
codecov/test-results-actionbycodecov/codecov-action. - Remove utilization workaround for
macos-15-intel. - Bump requirement of
extra-platformsto 8.0.0.
- Add cooldown period for dependabot and
uv.lockupdates. - Uncap all dependencies.
- Replace
tool.uvsection bybuild-system. - Merge all label jobs into a single one.
- Unlock a CPU core stuck at 100% utilization on
macos-15-intel.
- Add
click:sourcedirective as an alias toclick:exampledirective in Sphinx extension. - Flag
click:exampledirective as deprecated in favor ofclick:source. - Add support for nested GitHub alerts.
- Fix fetching version when the CLI is implemented as a standalone script and not as a package module.
- Add support for auto-conversion of GitHub alerts into MyST admonitions in Sphinx extension.
- Rename
click-extrademo CLI toclick-extra-demoto avoid confusion with the package name. - Run tests on
ubuntu-slimGitHub Actions runner. - Run docs update job on
ubuntu-slimrunner.
- Add support for aliases in
EnumChoicetype. - Register pre-configured
render_table()utility in the context whentable_formatis set, in the same spirit asprint_table().
- Restore support for
@extra_command,@extra_groupand@extra_version_option, but mark them as deprecated.
- Allow parent directories search for configuration files. Adds
search_parentsargument on@config_file. Closes {issue}651. - Allow fine-tuning of configuration file format pattern matching. Replaces
formatsargument on@config_filebyfile_format_patterns. - Adds
search_pattern_flagsandfile_pattern_flagsarguments on@config_fileto allow user to tweak pattern matching behavior. - Use
|as separator for multiple file patterns instead of{,}syntax. Replaceglob.BRACEbyglob.SPLITfor search pattern flags. Forceglob.SPLITfor file pattern flags. - Remove
glob.IGNORECASEflag to make case-sensitivity determined by the underlying platform at runtime. - Force
glob.NODIRfor search pattern flags to speed up search. - Rename
click_extra.config.Formatsenum toclick_extra.config.ConfigFormat. Expose it at the rootclick_extramodule. - Eat our own dog food: add a
click-extraCLI to run self-tests. - Override base decorators and classes with Click Extra's own variants:
@commandnow points to what was@extra_command.@groupnow points to what was@extra_group.Optionclass now points toclick_extra.Option, which is a subclass ofcloup.Option.Argumentclass now points toclick_extra.Argument, which is a subclass ofcloup.Argument.@optionnow instantiatesclick_extra.Optionby default.@argumentnow instantiatesclick_extra.Argumentby default.@version_optionnow points to what was@extra_version_option.- Now if you want to use the previous aliases to Click's and Cloup's originals, import them directly from
clickorcloupinstead ofclick_extra, which makes origination clearer.
- Remove
@extra_command,@extra_groupand@extra_version_option. - Remove
no_redefinedargument inclick_extra.pytest.command_decorators()method. - Validates that classes passed to the
clsparameter of decorators are subclasses of the expected base classes. - Normalize the default value of
EnumChoiceparameters to their string choice representation in help screens. - Run tests on Python
3.14tand3.15tfree-threaded variants.
- Add new
EnumChoicetype for fine-tunable Enum-based choices. ExposeEnumChoiceandChoiceSourceat the rootclick_extramodule. - Relax dependencies to support Python 3.10. Closes {issue}
1385. - Re-introduce
tomlidependency for Python 3.10 users. - Skip tests on intermediate Python versions (
3.11,3.12and3.13) to reduce CI load.
- Add support for JSON5, JSONC and HJSON configuration files.
- YAML and XML configuration support is now optional. You need to install the
click_extra[yaml]andclick_extra[xml]extra dependency groups to enable it. - Add new
@lazy_groupdecorator andLazyGroupclass to create groups that only load their subcommands when invoked. Closes {issue}1332. - Move all custom types to
click_extra._typesmodule. - Avoid importing all types at runtime to reduce startup time.
- Upgrade tests runs from
macos-13tomacos-15-intel, and frommacos-15tomacos-26. - Use
astral-sh/setup-uvaction to installuv.
- Fix
regex_fullmatch_line_by_lineto accept compiled regex patterns as well as string patterns.
- Add a new
regex_fullmatch_line_by_lineutility to compare a wall of text against a regex, line by line, and raise a customRegexLineMismatchexception on the first mismatch.
- Fix
@config_optionto acceptPathobjects as default value. Closes {issue}1356. - Add official support of Python 3.14.
- Run tests on Python 3.15-dev.
- Add new variables for version string template:
{git_repo_path},{git_branch},{git_long_hash},{git_short_hash}and{git_date}. - Add a new
--no-configoption on@extra_commandand@extra_groupto disable configuration files. Closes {issue}750. - Add
--table-formatoption by default on@extra_commandand@extra_group. - Let
--table-formatand--no-coloraffect the rendering of--show-paramstable. - Swap
ClassandSpec.columns in--show-paramsoutput. - Remove the
-Cshort option associated with--config. - Remove the
-tshort option associated with--table-format. - Classify table formats into two categories: markup formats and plain-text formats.
- Rename all table format identifiers to use dashes instead of underscores:
double_grid→double-griddouble_outline→double-outlinefancy_grid→fancy-gridfancy_outline→fancy-outlineheavy_grid→heavy-gridheavy_outline→heavy-outlinelatex_booktabs→latex-booktabslatex_longtable→latex-longtablelatex_raw→latex-rawmixed_grid→mixed-gridmixed_outline→mixed-outlinerounded_grid→rounded-gridrounded_outline→rounded-outlinesimple_grid→simple-gridsimple_outline→simple-outline
- Fix display in
--show-paramsfor parameters sharing the same name. - Fix detection in the
--versionoption of the module in which the user's CLI is implemented. - Rename
click_extra.tabulatenamespace toclick_extra.table. - Expose
click._utils.UNSETandclick.logging.LogLevelat the rootclick_extramodule. - Replace unmaintained
mergedeepdependency bydeepmerge. - Remove maximum capped version of all dependencies (relax all
~=specifiers to>=). This gives more freedom to downstream and upstream packagers. Document each minimal version choice. - Add unit tests for Sphinx extension.
- Render GitHub-Flavored Markdown admonitions in Sphinx.
- Relax Click dependency to account for yanked release. Closes {issue}
1307.
- Add support for MyST Markdown syntax for
click:exampleandclick:runSphinx directives. - Add support for all
code-blockoptions toclick:exampleandclick:run::linenos:,:lineno-start:,:emphasize-lines:,:force:,:caption:,:name:,:class:and:dedent:. - Add new
:show-source:/:hide-source:,:show-results:/:hide-results:and:language:options toclick:exampleandclick:run. Closes {issue}719. - Support non-string choices in colored help screens. Closes {issue}
1284. - Replace
LOG_LEVELSmapping withLogLevelenum. - Remove
DEFAULT_LEVEL_NAMEconstants. - Fix rendering of default values in
--show-paramsoutput. - Fix reconciliation of flags' environment variables.
- Force requirement on
cloup >= 3.0.7. - Be more informative when error is found in
click:exampleandclick:runSphinx directives by displaying the path of the original document and the line number of the error.
- Set
ExtraCommanddefaultprog_nameto CLI'snameto avoid it to be namedpython -m <module_name>if invoked out of a module. - Tweak exit code rendering of CLI runs.
- Fix highlighting of deprecated messages.
- Use ASCII characters instead of unicode for prompt rendering in messages.
- Upgrade to Click 8.2.0.
- Add support for custom deprecated messages on commands and parameters.
- Remove
ExtraOption.get_help_default()and rely on newOption.get_help_extra(). - Remove dependency on
pallets-sphinx-themes. - Drop supports for Python 3.10.
- Add
windows-11-armto the test matrix. - Remove tests on
ubuntu-22.04-arm,ubuntu-22.04andwindows-2022to keep matrix small.
- Regroup all envronment variables-related code.
- Rename
extend_envvars()tomerge_envvar_ids()and allow it to merge arbitrary-nested structures. Normalize names to uppercase on Windows. - Rename
normalize_envvar()toclean_envvar_id(). - Rename
all_envvars()toparam_envvar_ids(). - Rename
auto_envvar()toparam_auto_envvar_id(). - Remove unused
normalizeparameter onall_envvars(). - Add missing line returns in
render_cli_run(). - Prefix all types with capital-
T.
- Extract rendering part of the
print_cli_run()helper torender_cli_run(). - Remove unused
click_extra.testing.run_cmd. - Relax requirement on
extra-platforms. - Add tests on
windows-2025. Remove tests onwindows-2019.
- Fix upload of Python package to GitHub release on tagging.
- Add a new
--verboseoption on@extra_commandand@extra_groupto increase the verbosity level for each additional repetition. - Add new
@verbose_optionpre-configured decorator. - Reassign the short
-voption from--verbosityto--verbose. - Improve logging documentation.
- Align
ExtraStreamHandlerbehavior tologging.StreamHandler. - Move
stream_handler_classandformatter_classarguments fromnew_extra_loggertoextraBasicConfig. - Add new
file_handler_classargument toextraBasicConfig. - Fix upload of Python package to GitHub release on tagging.
- Remove dependency on
pytest-cases.
- Re-release to fix GitHub publishing.
- Reactivates some color tests on Windows.
- Re-release to fix GitHub publishing.
- Revamps logging helpers and aligns them with Python's
loggingmodule. - Remove
extra_basic_config. - Adds new
extraBasicConfig, and aligns it with Python'sbasicConfig. - Replace
ExtraLogFormatterwithExtraFormatter. - Replace
ExtraLogHandlerwithExtraStreamHandler. - Add new
new_extra_loggerhelper. - Rewrite the logging documentation with all use-cases and custom configuration examples. Closes {issue}
989. - Removes old platforms page from documentation.
- Remove Click Extra's own implementation of
HelpOptionclass now that fixes have reached Click's upstream. - Redefine
@help_optiondecorator to default to--help/-hoptions. - Add more logging examples in documentation.
- Add tests on
ubuntu-24.04-armandubuntu-22.04-arm. - Use
uvto install specific versions of Python.
- Remove support for comments in JSON configuration files. Remove dependency on unmaintained
commentjson. Closesclick-extra#1152.
- Make
--timeroption eager so it can jumps the queue of processing order. - Fix configuration of help option generated by the
help_option_namescontext setting. Closesmail-deduplicate#762. - Fix eagerness of help option generated by
help_option_names. Refsclick#2811. - Display generated help option in
--show-paramsresults. - Force UTF-8 encoding everywhere.
- Allow
replace_content()utility method to replace any content found after the start tag.
- Ignore hidden options when coloring help screen.
- Aligns dependencies.
- Aligns dependencies.
- Fix tests against development version of Click.
- Add support for Python 3.13.
- Drop supports for Python 3.9.
- Run tests on Python 3.14-dev.
- Add tests on
ubuntu-24.04. Remove tests onubuntu-20.04. - Upgrade tests from
macos-14tomacos-15.
- Move all platform detection utilities to its own standalone Extra Platforms project.
- Add dependency on
extra-platforms.
- Switch from Poetry to
uv. - Drop support for Python 3.8.
- Mark Python 3.13-dev tests as stable.
- Remove dependency on
regex.
- Fix string interpolation in log message.
- Do not raise error if package version cannot be fetched.
- Do not fail on
docs_updateimport ifpygmentsis not installed.
- Slim down package by moving unit tests out of the main package.
- Allow reuse of Pytest fixures and marks by other packages.
- Move dependencies extending
pygments,sphinxandpytestinto optional extra dependencies. Closes {issue}836. - Split
devdependency groups into optionaltest,typinganddocsgroups. - Remove direct dependency on
mypy. - Allow running tests with Python 3.8 and 3.9 on
macos-14runners.
- Remove bypass of
cloup.Colorre-import.
- Allow standalone
--versionoption to output its debug messages. - Force closing of context before exiting CLIs to provoque callback calls and prevent state leaks.
- Run tests on
macos-14. Remove tests onmacos-12.
- Run tests on Python 3.13-dev branch.
- Run tests on released Python 3.12 version.
- Distinguish between parameter type and Python type in
--show-paramsoutput. - Recognize custom parameter type as string-based. Closes {issue}
721. - Rely on
bump-my-versionto update citation file metadata.
- Switch to format string style for version template.
- Add new variables for version string template:
{module},{module_name},{module_file},{module_version},{package_version}and{exec_name}. - Remove support for Click-specific
%(prog)and%(package)variables in version string. - Print all versions string variables in debug mode.
- Highlight required label and value range in option description. Closes {issue}
748.
- Fix collection of subcommand parameters in
--show-paramsoutput. Closes {issue}725. - Set
%(package_name)in--versionto file name for CLI that are standalone scripts and not packaged. Fix {issue}729. - Allow standalone scripts to define a local
__version__variable to set the%(version)element in--versionoutput. - Allow building of documentation with Sphinx 7.
- Run tests on
macos-13. Remove tests onmacos-11. - Ignore unstable tests on upcoming Click
8.2.x/mainbranch.
- Forces
ExtraContextto properly close itself before exiting the program, to trigger all callbacks.
- Remove workaround for Cloup handling of
command_classdefault on custom groups. - Force
@extra_groupto produce sub-groups of the same class.
- Inspect in
--versionthe whole execution stack to find the package in which the user's CLI is implemented.
- Keep the promise of drop-in replacement for
@version_optionwhich is now a proxy to Click's original. - Rename the colored, enhanced
--versionoption to@extra_version_optionfor its decorator, andExtraVersionOptionfor its class. - Activate colors on
@extra_commandand@extra_groupby default, even if stripped of all their default parameters. Closes {issue}534and {pr}543. - Expose location and content of user's configuration file in the Context's
metaproperty. Closes {issue}673. - Render specs of hidden parameters in
--show-paramsoutput. Fixes {issue}689. - Swap
ExposedandAllowed in conf?columns in--show-paramsoutput. - Add a
hiddencolumn to--show-paramsoutput. Refs {issue}689.
- Expose verbosity level name, table format ID and CLI start timestamp in the Context's
metaproperty. - Refactor
VersionOption. Introduce internal caching. - Expose version string elements in the Context's
metaproperty. Closes {issue}325. - Remove
print_env_infooption fromVersionOptionclass andversion_optiondecorators. - Add new
%(env_info)element. Default value is the same as what the removedprint_env_infoproduced (i.e. a JSON dump of the environment). - Allow
%(env_info)value to be set by user on--version. - Rename in version string formatting the
%(prog)element to%(prog_name), and%(package)to%(package_name). - Detect Click-specific
%(prog)and%(package)and raise a deprecated warning. - Do not print environment info in
--versionby default. Change default message from%(prog)s, version %(version)s\n%(env_info)to%(prog_name)s, version %(version)s. - Automaticcaly augment version string with environment info in
DEBUGlog level. - Expose
click_extra.search_paramsutility.
- Add a
reduce()utility to reduce a collection ofGroupandPlatformto a minimal set. - Remove
@destructiveand@non_destructivepytest markers. - Rename the
exclude_paramsargument ofParamStructureandConfigOptiontoexcluded_params. - Fix over-styling of usage heading in help screen.
- Move
bump-my-versionconfiguration topyproject.toml. - Remove
bump2versionfrom dev dependencies, and let the external workflows install it. - Remove workaround for
pallets-sphinx-themes's outdated reference to oldclick's Python 2 compatibility hack.
- Colorize envvars and default values in
--show-paramsoption. - Keep
<stdout>and<stderr>streams independent inExtraCliRunner. - Always collect
<stderr>output and never raise an exception. - Add a new
<output>stream to simulate what the user sees in its terminal. - Only mix
<stdout>and<stderr>in<output>whenmix_stderr=True. - Print detailed CLI execution trace in logs.
- Document inline tests in Sphinx CLI execution blocks.
- Improve Pygments ANSI formatter and lexers documentation.
- Document usage of
pygmentizecommand line. - Regroup all parameter-related code.
- Regroup all testing and CLI execution utilities.
- Activate zoom on big Mermaid graphs.
- Add support for dedicated styling of environment variables, defaults, command aliases, aliases punctuation, subcommands and deprecated tag in help screen.
- Update default colors of help screen to improve readability.
- Change default style of critical log messages' prefix to bold red.
- Document the full matrix of colors and styles.
- Render bright variants of ANSI colors in documentation.
- Dynamically patch the style provided to
AnsiHtmlFormatterto augment it with ANSI colors. - Remove main dependency on
furo, make it a development dependency. - Remove the custom
ansi-click-extra-furo-stylePygments style for Furo and itsAnsiClickExtraFuroStyleclass.
- Add new global
show_envvaroption to display all environment variables in help screens. - Global
show_choicessetting to show or hide choices when prompting a user for input. - Populate the
Allowed in conf?column in--show-paramsoutput if there is a--configoption in the command. - Print all modified loggers and their levels in
DEBUGmode. - Directly download Pygments source code from GitHub to check for candidates for ANSI-coloring in unittests.
- Test continuously against Click and Cloup development version. Closes {issue}
525. - Move
click_extra.commands.TimerOptiontoclick_extra.timer.TimerOption.
- Drop support for Python 3.7.
- Add a simple
--telemetry/--no-telemetryoption flag which respects theDO_NOT_TRACKenvironment variable. - Add new
populate_auto_envvarsparameter to@extra_command/@extra_groupdecorators to allow auto-generated environment variables to be displayed in help screens. - Display all environment variables in
--show-paramsoutput, including those auto-generated by the way of theauto_envvar_prefixcontext parameter. - Allow user to override hard-coded context defaults on
@extra_command/@extra_group. - Change default log level from
INFOtoWARNINGto aligns with Python's global root logger. - Force resetting of log level on
--verbosity's context closing to the hard-coded default. - Use a dedicated
click_extralogger for all internal messages, instead of sending them to the user-defined one. - Aligns
click_extralogger level to--verbosityoption level. - Set default logger of
--verbosityto Python's globalrootlogger, instead a local wrapped logger. Closes {issue}318. - Allow user to provide a string as the default logger to
--verbositythat will be used to fetch the global logger singleton of that name. Closes {issue}318. - Only colorize the
%(levelname)sfield during log record formatting, not the:message separator. - Prefix
INFO-level log message withinfo:prefix by default. - Raise an error if multiple
--versionoptions are defined in the same command. Closes {issue}317. - Remove dependency on
click-log. - Remove supports for
Pallets-Sphinx-Themes < 2.1.0. - Force closing of the context before stopping the execution flow, to make sure all callbacks are called.
- Fix rendering of GitHub-Flavored Markdown tables in canonical format.
- Colorize help screens of subcommands spawned out of an
@extra_group. Closes {issue}479. - Remove deprecated
click_extra.platform.
- Allow
@color_option,@command,@config_option,@extra_command,@extra_group,@group,@help_option,@show_params_option,@table_format_option,@timer_option,@verbosity_optionand@version_optiondecorators to be used without parenthesis. - Fix wrapping of Cloup decorators by
@extra_group/@extra_commanddecorators. Closes {issue}489. - Add main dependency on
furowhich is referenced in ANSI-aware Pygment styles. - Move all documentation assets to
assetssubfolder.
- Let
--versionoption output system details when run onpython >= 3.10.
- Fix overlapping detection of
linuxandwsl2platforms. - Renders platform groups in documentation in Mermaid format instead of Graphviz. Add new dependency on
sphinxcontrib-mermaid, removed dependency ongraphviz. - Produce dependency graph in Mermaid instead of Graphviz.
- Code, comments and documentation style change to conform to new QA workflows based on
ruff.
- Rename
click_extra.platformtoclick_extra.platforms. - Refactor platforms and their groups with dataclasses instead of string IDs.
- Add new
LINUX_LAYERS,ALL_WINDOWS,BSD_WITHOUT_MACOS,EXTRA_GROUPSandALL_GROUPSgroups. - Add new dependency on
graphviz. - Activate Graphviz extension in Sphinx.
- Let Sphinx produce the dependency graph from Graphviz file.
- Produce platform graph dynamically.
- Rename
docs.pytodocs_update.pyand allow this module to be called directly.
- Add support for new ANSI-capable lexers:
ansi-gap-consoleandansi-gap-repl. - Auto-update table of supported lexers in documentation.
- Add test to search in Pygments' test data for REPL/terminal-like lexers, as candidates for ANSI-coloring.
- Depends on
importlib_metadataforPython < 3.8.
- Add new constants to group platforms by family.
- Add heuristics to recognize new platforms: IBM AIX, Cygwin, FreeBSD, GNU/Hurd, NetBSD, OpenBSD, Oracle Solaris, SunOS, Windows Subsystem for Linux v1 and v2.
- Document version option usage.
- Split version code to its own file and tests.
- Run tests on Python
3.12-dev.
- Print fully qualified class of options in
--show-paramsoutput. - Add new columns in
--show-paramstable to show option specifications, configuration exclusion and exposed attribute. - Rename
ignored_paramsargument toexclude_paramson theConfigOptionclass. - Blocking parameters from configuration files now requires the fully qualified ID. Which adds support for selectively blocking parameters at any subcommand level.
- Fix highlighting of
+-prefixed options in help screens. Closes {issue}316. - Fix highlighting of hard-coded deprecated labels in option help.
- Document parameter introspection. Closes {issue}
319.
- Streamline setup of Sphinx extensions.
- Document
click:exampleandclick:runSphinx extensions.
- Fix some types.
- Fix release workflow.
Note
3.3.2 is available on 🐙 GitHub.
Warning
3.3.2 is not available on 🐍 PyPI.
- Remove use of deprecated
::set-outputdirectives and replace them by environment files.
- Keep a copy of the table format ID in the context when set.
- Use
tabulatedependency instead ofcli-helpersfor all the table rendering utilities. - Remove dependency on
cli-helpers. - Re-implement locally the
verticaltable rendering format fromcli-helpers. - Add new table rendering formats:
asciidoc,fancy_outline,heavy_grid,heavy_outline,latex_longtable,latex_raw,mixed_grid,mixed_outline,presto,pretty,unsafehtmlandyoutrack. - Remove
minimaltable rendering formats, which was an alias ofplain. - Add new
csv-excel,csv-excel-tabandcsv-unixformats based on Python defaults dialects. - Remove
csv-tabrendering format. - Make
csvformat an alias ofcsv-excel. - Deactivate number alignment and extra-spacing in table rendering by default.
- Remove tests on Pypy. Nobody asked for it and I need to speed up tests.
- Fix argument's property getter in
--show-params. - Remove GitHub edit link workaround in documentation.
- Add citation file.
- Fix type casting.
- Increase type coverage.
- Fix bad typing import.
- Move some command utility from test machinery to
runsubmodule.
- New
--show-paramsoption to debug parameters defaults, values, environment variables and provenance. - Rename
ignored_optionstoignored_paramsonConfigOption. - Highlight command's metavars, default values and deprecated flag in help.
- Finer highlighting of options, subcommands and their aliases in help screens.
- Fix highlight of dynamic metavars and secondary option in help screen.
- New custom
ExtraContextwhich allows populatingmetaat instantiation. - Use the
Formatsenum to encode for default configuration file extensions. - Re-introduce
*.ymlas a possible extension for YAML files.
- Add support for pattern matching to search for configuration file.
- Add a new
formatsoption to specify which dialects the configuration file is written in, regardless of its name or file extension. Closes {issue}197. - Set default configuration folder according each OS preferred location. Closes {issue}
211. - Add
roamingandforce_posixoption to influence default application directory of configuration file. - Add a
ignored_optionsparameter to the configuration file instead of hard-coding them. - Add dependency on
wcmatch. - Remove tests on deprecated
ubuntu-18.04. - Document preset options overriding. Closes {issue}
232. - Document configuration option pattern matching and default folder. Closes {issue}
197and {issue}211.
- Fix wrong dependency bump on
pytest-covproduced by major release.
- Make default extra features optional, so
click_extracan act as a drop-in replacement forclickandcloup(closes {issue}173):- Rename
click_extra.grouptoclick_extra.extra_group. - Rename
click_extra.commandtoclick_extra.extra_command. - Alias
click_extra.grouptocloup.group. - Alias
click_extra.commandtocloup.group.
- Rename
- Use declarative
params=argument to set defaults options onextra_commandandextra_group. - Move the implementation of options to classes.
- Hard-copy
version_optioncode fromclickto allow for more flexibility. Addresses {issue}176. - All custom options inherits from
ExtraOptionclass. - New
extra_option_at_endtoextra_commandto force position of all extra options (on by default). - Replace theme styles inherited from
click-logby Python standardloggingmodule. Addsinfoand removesexceptionstyles. - Add a tutorial in documentation.
- Add support for
click:exampleandclick:rundirectives in documentation. - Add ANSI session and console lexers for Pygments.
- Add a Pygments filter to transform tokens into ANSI tokens.
- Add custom Pygment style to render ANSI tokens in
furotheme. - Add dependency on
pygments,pygments-ansi-colorandPallets-Sphinx-Themes. - Allow translation of short help in extra options.
- Add minimal type hints.
- Pre-compute test matrix to allow for a subset of jobs to fail if flagged as unstable.
- Run tests on
ubuntu-22.04andmacos-12. - Remove tests on deprecated
macos-10.15.
- Do not render
Nonecells in tables with<null>string. - Disable workflow grouping and concurrency management.
- Fix auto-mapping and recognition of all missing Click option types in config module. Closes {issue}
170. - Fix CI workflow grouping.
- Fix compatibility with
cloup >= 0.14.0. - Group workflow jobs so new commits cancels in-progress execution triggered by previous commits.
- Run tests on early Python 3.11 releases.
- Add a
highlightutility to style substrings. - Add
regexdependency.
- Fix and unittest derivation of configuration template and types from CLI options.
- Fix dependency requirements induced by overzealous automatic post-release version bump workflow.
- Replace
sphinx_tabsbysphinx-design. - Add edit link to documentation pages.
- Fix mapping of file arguments in configuration files.
- Fix Sphinx documentation update and publishing.
- Run tests on
pypy-3.7.
- Add support for XML configuration file. Closes {issue}
122. - Add strict mode to fail on unrecognized configuration options.
- Support the
NO_COLORenvironment variable convention fromno-color.org. - Recognize a subset of
(FORCE_)(CLI)(NO_)COLOR(S)(_FORCE)variations as color-sensitive environment variables. - Print version and environment details in logs at the
DEBUGlevel. - Add Sphinx-based documentation.
- Add a logo.
- Outsource documentation publishing to external workflow.
- Add supports for
.iniconfiguration files. - Add supports for commented JSON configuration files.
- Fix identification of TOML and JSON configuration files.
- Fix leak of local environment variable update on
extend_env()usage. - Ignore
helpboolean in configuration files. - Add new dependency on
mergedeep.
- Split the
print_cli_outputmethod to expose the simplerformat_cliutility.
- Refactor global logging management.
- Remove
click_extra.run.runand rebase all run utilities aroundsubprocess.run. - Use the
tomllibfrom the standard library starting with Python 3.11.
- Fix extension of default environment variables.
- Add support for environment variables to run utilities.
- Temporarily skip displaying environment details in
--versionoption results forpython >= 3.10. - Reactivate all tests on Python 3.10.
- Expose some
cloupversions ofclickutilities at the root ofclick_extra.
- Allow
click_extrato be imported as a drop-in replacement forclick. - Share the same set of default options between
click_extra.commandandclick_extra.group. - Document default help screen comparison between simple
clickCLI and enhancedclick-extraCLI.
- Add support for JSON configuration file.
- Search all supported formats in default location if configuration file not provided.
- Print configuration file default location in help screens.
- Add new external workflow to modernize Python code.
- Use external workflow suite to manage changelog and build & publish packages on PyPI on release.
- Use external workflow to label sponsored issues and PRs.
- Replace local workflow by external one to label issues and PRs.
- Reuse externnal workflow to produce dependency graph.
- Remove dev dependencies on
check-wheel-contents,graphviz,pipdeptreeandtwine.
- Allow downloading of a remote config URL.
- Add new dependencies on
requestsandpytest-httpserver. - Fix inference of config file top-level section name.
- Document usage of
click_extra.config.config_option. - Use external workflows for GitHub actions.
- Automate version and changelog management.
- Add support for YAML configuration file. Closes #13.
- Auto-detect configuration file on loading.
- Add
pyyamldependency.
- Evaluate format option dynamically at use to let third-party register new rendering formats.
- Fix creation of post-release version bump PR on tagging.
- Extend
cli-helper.TabularOutputFormatterwith new formats:simple_grid,rounded_grid,double_grid,outline,simple_outline,rounded_outlineanddouble_outline. Address {issue}astanin/python-tabulate#151. - Add a new
--table-format/-toption to select table format rendering mode. - Add new dependency on
cli-helperandtabulate. - Automate post-release version bump.
- Fix printing of additional non-grouped default options in help screen.
- Add a
--config/-Coption to load CLI configuration from a TOML file.
- Re-release previous version with fixed dependency.
Note
1.0.0 is available on 🐙 GitHub.
Warning
1.0.0 is not available on 🐍 PyPI.
- Add colorization of options, choices and metavars in help screens.
- Add
--color/--no-coloroption flag (aliased to--ansi/--no-ansi). - Add colored
--versionoption. - Add colored
--verbosityoption and logs. - Add dependency on
click-log. --time/--no-timeflag to measure duration of command execution.- Add platform recognition utilities.
- Add new conditional markers for
pytest:@skip_{linux,macos,windows},@unless_{linux,macos,windows},@destructiveand@non_destructive.
- Initial public release.