Don't discard pager arguments by correctly using subprocess.Popen. :issue:3039
:pr:3055
Replace Sentinel.UNSET default values by None as they're passed through
the Context.invoke() method. :issue:3066 :issue:3065 :pr:3068
Fix conversion of Sentinel.UNSET happening too early, which caused incorrect
behavior for multiple parameters using the same name. :issue:3071 :pr:3079
Hide Sentinel.UNSET values as None when looking up for other parameters
through the context inside parameter callbacks. :issue:3136 :pr:3137
Fix rendering when prompt and confirm parameter prompt_suffix is
empty. :issue:3019 :pr:3021
When Sentinel.UNSET is found during parsing, it will skip calls to type_cast_value. :issue:3069 :pr:3090
Fix reconciliation of default, flag_value and type parameters for
flag options, as well as parsing and normalization of environment variables.
:issue:2952 :pr:2956
Fix typing issue in BadParameter and MissingParameter exceptions for the
parameter param_hint that did not allow for a sequence of string where the
underlying function _join_param_hints allows for it. :issue:2777 :pr:2990
Use the value of Enum choices to render their default value in help
screen. Refs :issue:2911 :pr:3004
Fix completion for the Z shell (zsh) for completion items containing
colons. :issue:2703 :pr:2846
Don't include envvar in error hint when not configured. :issue:2971 :pr:2972
Fix a rare race in click.testing.StreamMixer's finalization that manifested
as a ValueError on close in a multi-threaded test session.
:issue:2993 :pr:2991
Drop support for Python 3.7, 3.8, and 3.9. :pr:2588 :pr:2893
Use modern packaging metadata with pyproject.toml instead of setup.cfg.
:pr:2438
Use flit_core instead of setuptools as build backend. :pr:2543
Deprecate the __version__ attribute. Use feature detection, or importlib.metadata.version("click"), instead. :issue:2598
BaseCommand is deprecated. Command is the base class for all
commands. :issue:2589
MultiCommand is deprecated. Group is the base class for all group
commands. :issue:2590
The current parser and related classes and methods, are deprecated.
:issue:2205
OptionParser and the parser module, which is a modified copy of optparse in the standard library.
Context.protected_args is unneeded. Context.args contains any
remaining arguments while parsing.
Parameter.add_to_parser (on both Argument and Option) is
unneeded. Parsing works directly without building a separate parser.
split_arg_string is moved from parser to shell_completion.
Enable deferred evaluation of annotations with from __future__ import annotations. :pr:2270
When generating a command's name from a decorated function's name, the
suffixes _command, _cmd, _group, and _grp are removed.
:issue:2322
Show the types.ParamType.name for types.Choice options within --help message if show_choices=False is specified.
:issue:2356
Do not display default values in prompts when Option.show_default is False. :pr:2509
Add get_help_extra method on Option to fetch the generated extra
items used in get_help_record to render help text. :issue:2516
:pr:2517
Keep stdout and stderr streams independent in CliRunner. Always
collect stderr output and never raise an exception. Add a new
output stream to simulate what the user sees in its terminal. Removes
the mix_stderr parameter in CliRunner. :issue:2522 :pr:2523
Option.show_envvar now also shows environment variable in error messages.
:issue:2695 :pr:2696
Context.close will be called on exit. This results in all Context.call_on_close callbacks and context managers added via Context.with_resource to be closed on exit as well. :pr:2680
Add ProgressBar(hidden: bool) to allow hiding the progressbar. :issue:2609
A UserWarning will be shown when multiple parameters attempt to use the
same name. :issue:2396
When using Option.envvar with Option.flag_value, the flag_value
will always be used instead of the value of the environment variable.
:issue:2746 :pr:2788
Add Choice.get_invalid_choice_message method for customizing the
invalid choice message. :issue:2621 :pr:2622
If help is shown because no_args_is_help is enabled (defaults to True
for groups, False for commands), the exit code is 2 instead of 0.
:issue:1489 :pr:1489
Contexts created during shell completion are closed properly, fixing
a ResourceWarning when using click.File. :issue:2644 :pr:2800
:pr:2767
click.edit(filename) now supports passing an iterable of filenames in
case the editor supports editing multiple files at once. Its return type
is now also typed: AnyStr if text is passed, otherwise None.
:issue:2067 :pr:2068
Specialized typing of progressbar(length=...) as ProgressBar[int].
:pr:2630
Improve echo_via_pager behaviour in face of errors.
:issue:2674
Terminate the pager in case a generator passed to echo_via_pager
raises an exception.
Ensure to always close the pipe to the pager process and wait for it
to terminate.
echo_via_pager will not ignore KeyboardInterrupt anymore. This
allows the user to search for future output of the generator when
using less and then aborting the program using ctrl-c.
deprecated: bool | str can now be used on options and arguments. This
previously was only available for Command. The message can now also be
customised by using a str instead of a bool. :issue:2263 :pr:2271
Command.deprecated formatting in --help changed from (Deprecated) help to help (DEPRECATED).
Parameters cannot be required nor prompted or an error is raised.
A warning will be printed when something deprecated is used.
Add a catch_exceptions parameter to CliRunner. If catch_exceptions is not passed to CliRunner.invoke, the value
from CliRunner is used. :issue:2817 :pr:2818
Option.flag_value will no longer have a default value set based on Option.default if Option.is_flag is False. This results in Option.default not needing to implement __bool__. :pr:2829
Incorrect click.edit typing has been corrected. :pr:2804
Choice is now generic and supports any iterable value.
This allows you to use enums and other non-str values. :pr:2796
:issue:605
Fix setup of help option's defaults when using a custom class on its
decorator. Removes HelpOption. :issue:2832 :pr:2840
Fix error message for readable path check that was mixed up with the
executable check. :pr:2236
Restore parameter order for Path, placing the executable
parameter at the end. It is recommended to use keyword arguments
instead of positional arguments. :issue:2235
Group.resultcallback is renamed to result_callback.
autocompletion parameter to Command is renamed to shell_complete.
get_terminal_size is removed, use shutil.get_terminal_size instead.
get_os_args is removed, use sys.argv[1:] instead.
Rely on :pep:538 and :pep:540 to handle selecting UTF-8 encoding
instead of ASCII. Click's locale encoding detection is removed.
:issue:2198
Single options boolean flags with show_default=True only show
the default if it is True. :issue:1971
The command and group decorators can be applied with or
without parentheses. :issue:1359
The Path type can check whether the target is executable.
:issue:1961
Command.show_default overrides Context.show_default, instead
of the other way around. :issue:1963
Parameter decorators and @group handles cls=None the same as
not passing cls. @option handles help=None the same as
not passing help. :issue:#1959
A flag option with required=True requires that the flag is
passed instead of choosing the implicit default value. :issue:1978
Indentation in help text passed to Option and Command is
cleaned the same as using the @option and @command
decorators does. A command's epilog and short_help are also
processed. :issue:1985
Store unprocessed Command.help, epilog and short_help
strings. Processing is only done when formatting help text for
output. :issue:2149
Allow empty str input for prompt() when confirmation_prompt=True and default="". :issue:2157
Windows glob pattern expansion doesn't fail if a value is an invalid
pattern. :issue:2195
It's possible to pass a list of params to @command. Any
params defined with decorators are appended to the passed params.
:issue:2131.
@command decorator is annotated as returning the correct type if
a cls argument is used. :issue:2211
A Group with invoke_without_command=True and chain=False
will invoke its result callback with the group function's return
value. :issue:2124
to_info_dict will not fail if a ParamType doesn't define a name. :issue:2168
Shell completion prioritizes option values with option prefixes over
new options. :issue:2040
Options that get an environment variable value using autoenvvar_prefix treat an empty value as None, consistent
with a direct envvar. :issue:2146
open_file recognizes Path("-") as a standard stream, the
same as the string "-". :issue:2106
The option and argument decorators preserve the type
annotation of the decorated function. :pr:2155
A callable default value can customize its help text by overriding __str__ instead of always showing (dynamic). :issue:2099
Fix a typo in the Bash completion script that affected file and
directory completion. If this script was generated by a previous
version, it should be regenerated. :issue:2163
Fix typing for echo and secho file argument.
:issue:2174, 2185
Mark top-level names as exported so type checking understand imports
in user projects. :issue:1879
Annotate Context.obj as Any so type checking allows all
operations on the arbitrary object. :issue:1885
Fix some types that weren't available in Python 3.6.0. :issue:1882
Fix type checking for iterating over ProgressBar object.
:issue:1892
The importlib_metadata backport package is installed on Python <
3.8. :issue:1889
Arguments with nargs=-1 only use env var value if no command
line values are given. :issue:1903
Flag options guess their type from flag_value if given, like
regular options do from default. :issue:1886
Added documentation that custom parameter types may be passed
already valid values in addition to strings. :issue:1898
Resolving commands returns the name that was given, not command.name, fixing an unintended change to help text and default_map lookups. When using patterns like AliasedGroup,
override resolve_command to change the name that is returned if
needed. :issue:1895
If a default value is invalid, it does not prevent showing help
text. :issue:1889
Pass windows_expand_args=False when calling the main command to
disable pattern expansion on Windows. There is no way to escape
patterns in CMD, so if the program needs to pass them on as-is then
expansion must be disabled. :issue:1901
Colorama is always installed on Windows in order to provide style
and color support. :pr:1784
Adds a repr to Command, showing the command name for friendlier
debugging. :issue:1267, :pr:1295
Add support for distinguishing the source of a command line
parameter. :issue:1264, :pr:1329
Add an optional parameter to ProgressBar.update to set the current_item. :issue:1226, :pr:1332
version_option uses importlib.metadata (or the importlib_metadata backport) instead of pkg_resources. The
version is detected based on the package name, not the entry point
name. The Python package name must match the installed package
name, or be passed with package_name=. :issue:1582
If validation fails for a prompt with hide_input=True, the value
is not shown in the error message. :issue:1460
An IntRange or FloatRange option shows the accepted range in
its help text. :issue:1525, :pr:1303
IntRange and FloatRange bounds can be open (<) instead
of closed (<=) by setting min_open and max_open. Error
messages have changed to reflect this. :issue:1100
An option defined with duplicate flag names ("--foo/--foo")
raises a ValueError. :issue:1465
echo() will not fail when using pytest's capsys fixture on
Windows. :issue:1590
Resolving commands returns the canonical command name instead of the
matched name. This makes behavior such as help text and Context.invoked_subcommand consistent when using patterns like AliasedGroup. :issue:1422
The BOOL type accepts the values "on" and "off". :issue:1629
A Group with invoke_without_command=True will always invoke
its result callback. :issue:1178
nargs == -1 and nargs > 1 is parsed and validated for
values from environment variables and defaults. :issue:729
Detect the program name when executing a module or package with python -m name. :issue:1603
Include required parent arguments in help synopsis of subcommands.
:issue:1475
Help for boolean flags with show_default=True shows the flag
name instead of True or False. :issue:1538
Non-string objects passed to style() and secho() will be
converted to string. :pr:1146
edit(require_save=True) will detect saves for editors that exit
very fast on filesystems with 1 second resolution. :pr:1050
New class attributes make it easier to use custom core objects
throughout an entire application. :pr:938
Command.context_class controls the context created when
running the command.
Context.invoke creates new contexts of the same type, so a
custom type will persist to invoked subcommands.
Context.formatter_class controls the formatter used to
generate help and usage.
Group.command_class changes the default type for
subcommands with @group.command().
Group.group_class changes the default type for subgroups
with @group.group(). Setting it to type will create
subgroups of the same type as the group itself.
Core objects use super() consistently for better support of
subclassing.
Use Context.with_resource() to manage resources that would
normally be used in a with statement, allowing them to be used
across subcommands and callbacks, then cleaned up when the context
ends. :pr:1191
The result object returned by the test runner's invoke() method
has a return_value attribute with the value returned by the
invoked command. :pr:1312
Required arguments with the Choice type show the choices in
curly braces to indicate that one is required ({a|b|c}).
:issue:1272
If only a name is passed to option(), Click suggests renaming it
to --name. :pr:1355
A context's show_default parameter defaults to the value from
the parent context. :issue:1565
click.style() can output 256 and RGB color codes. Most modern
terminals support these codes. :pr:1429
When using CliRunner.invoke(), the replaced stdin file has name and mode attributes. This lets File options with
the - value match non-testing behavior. :issue:1064
When creating a Group, allow passing a list of commands instead
of a dict. :issue:1339
When a long option name isn't valid, use difflib to make better
suggestions for possible corrections. :issue:1446
Core objects have a to_info_dict() method. This gathers
information about the object's structure that could be useful for a
tool generating user-facing documentation. To get the structure of
an entire CLI, use Context(cli).to_info_dict(). :issue:461
Redesign the shell completion system. :issue:1484, :pr:1622
Support Bash >= 4.4, Zsh, and Fish, with the ability for
extensions to add support for other shells.
Allow commands, groups, parameters, and types to override their
completions suggestions.
Groups complete the names commands were registered with, which
can differ from the name they were created with.
The autocompletion parameter for options and arguments is
renamed to shell_complete. The function must take ctx, param, incomplete, must do matching rather than return
all values, and must return a list of strings or a list of CompletionItem. The old name and behavior is deprecated and
will be removed in 8.1.
The env var values used to start completion have changed order.
The shell now comes first, such as {shell}_source rather
than source_{shell}, and is always required.
Completion correctly parses command line strings with incomplete
quoting or escape sequences. :issue:1708
Extra context settings (obj=..., etc.) are passed on to the
completion system. :issue:942
Include --help option in completion. :pr:1504
ParameterSource is an enum.Enum subclass. :issue:1530
Boolean and UUID types strip surrounding space before converting.
:issue:1605
Adjusted error message from parameter type validation to be more
consistent. Quotes are used to distinguish the invalid value.
:issue:1605
The default value for a parameter with nargs > 1 and multiple=True must be a list of tuples. :issue:1649
When getting the value for a parameter, the default is tried in the
same section as other sources to ensure consistent processing.
:issue:1649
All parameter types accept a value that is already the correct type.
:issue:1649
For shell completion, an argument is considered incomplete if its
value did not come from the command line args. :issue:1649
Added ParameterSource.PROMPT to track parameter values that were
prompted for. :issue:1649
Options with nargs > 1 no longer raise an error if a default is
not given. Parameters with nargs > 1 default to None, and
parameters with multiple=True or nargs=-1 default to an
empty tuple. :issue:472
Handle empty env vars as though the option were not passed. This
extends the change introduced in 7.1 to be consistent in more cases.
:issue:1285
Parameter.get_default() checks Context.default_map to
handle overrides consistently in help text, invoke(), and
prompts. :issue:1548
Add prompt_required param to Option. When set to False,
the user will only be prompted for an input if no value was passed.
:issue:736
Providing the value to an option can be made optional through is_flag=False, and the value can instead be prompted for or
passed in as a default value.
:issue:549, 736, 764, 921, 1015, 1618
Fix formatting when Command.options_metavar is empty. :pr:1551
Revert adding space between option help text that wraps.
:issue:1831
The default value passed to prompt will be cast to the correct
type like an input value would be. :pr:1517
Automatically generated short help messages will stop at the first
ending of a phrase or double linebreak. :issue:1082
Skip progress bar render steps for efficiency with very fast
iterators by setting update_min_steps. :issue:676
Respect case_sensitive=False when doing shell completion for Choice :issue:1692
Use mkstemp() instead of mktemp() in pager implementation.
:issue:1752
If Option.show_default is a string, it is displayed even if default is None. :issue:1732
click.get_terminal_size() is deprecated and will be removed in
8.1. Use :func:shutil.get_terminal_size instead. :issue:1736
Control the location of the temporary directory created by CLIRunner.isolated_filesystem by passing temp_dir. A custom
directory will not be removed automatically. :issue:395
click.confirm() will prompt until input is given if called with default=None. :issue:1381
Option prompts validate the value with the option's callback in
addition to its type. :issue:457
confirmation_prompt can be set to a custom string. :issue:723
Allow styled output in Jupyter on Windows. :issue:1271
style() supports the strikethrough, italic, and overline styles. :issue:805, 1821
Multiline marker is removed from short help text. :issue:1597
Restore progress bar behavior of echoing only the label if the file
is not a TTY. :issue:1138
Progress bar output is shown even if execution time is less than 0.5
seconds. :issue:1648
Progress bar item_show_func shows the current item, not the
previous item. :issue:1353
The Path param type can be passed path_type=pathlib.Path to
return a path object instead of a string. :issue:405
TypeError is raised when parameter with multiple=True or nargs > 1 has non-iterable default. :issue:1749
Add a pass_meta_key decorator for passing a key from Context.meta. This is useful for extensions using meta to
store information. :issue:1739
Pathresolve_path resolves symlinks on Windows Python < 3.8.
:issue:1813
Command deprecation notice appears at the start of the help text, as
well as in the short help. The notice is not in all caps.
:issue:1791
When taking arguments from sys.argv on Windows, glob patterns,
user dir, and env vars are expanded. :issue:1096
Marked messages shown by the CLI with gettext() to allow
applications to translate Click's built-in strings. :issue:303
Writing invalid characters to stderr when using the test runner
does not raise a UnicodeEncodeError. :issue:848
Fix an issue where readline would clear the entire prompt()
line instead of only the input when pressing backspace. :issue:665
Add all kwargs passed to Context.invoke() to ctx.params.
Fixes an inconsistency when nesting Context.forward() calls.
:issue:1568
The MultiCommand.resultcallback decorator is renamed to result_callback. The old name is deprecated. :issue:1160
Fix issues with CliRunner output when using echo_stdin=True.
:issue:1101
Fix a bug of click.utils.make_default_short_help for which the
returned string could be as long as max_width + 3. :issue:1849
When defining a parameter, default is validated with multiple and nargs. More validation is done for values being
processed as well. :issue:1806
HelpFormatter.write_text uses the full line width when wrapping
text. :issue:1871
Configuration
📅Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦Automerge: Enabled.
♻ 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.
If you want to rebase/retry this PR, check this box
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [click](https://github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/)) | `==7.1.2` → `==8.3.1` |  |  |
---
> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
---
### Release Notes
<details>
<summary>pallets/click (click)</summary>
### [`v8.3.1`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-831)
[Compare Source](https://github.com/pallets/click/compare/8.3.0...8.3.1)
Released 2025-11-15
- Don't discard pager arguments by correctly using `subprocess.Popen`. :issue:`3039`
:pr:`3055`
- Replace `Sentinel.UNSET` default values by `None` as they're passed through
the `Context.invoke()` method. :issue:`3066` :issue:`3065` :pr:`3068`
- Fix conversion of `Sentinel.UNSET` happening too early, which caused incorrect
behavior for multiple parameters using the same name. :issue:`3071` :pr:`3079`
- Hide `Sentinel.UNSET` values as `None` when looking up for other parameters
through the context inside parameter callbacks. :issue:`3136` :pr:`3137`
- Fix rendering when `prompt` and `confirm` parameter `prompt_suffix` is
empty. :issue:`3019` :pr:`3021`
- When `Sentinel.UNSET` is found during parsing, it will skip calls to
`type_cast_value`. :issue:`3069` :pr:`3090`
### [`v8.3.0`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-830)
[Compare Source](https://github.com/pallets/click/compare/8.2.2...8.3.0)
Released 2025-09-17
- **Improved flag option handling**: Reworked the relationship between `flag_value`
and `default` parameters for better consistency:
- The `default` parameter value is now preserved as-is and passed directly
to CLI functions (no more unexpected transformations)
- Exception: flag options with `default=True` maintain backward compatibility
by defaulting to their `flag_value`
- The `default` parameter can now be any type (`bool`, `None`, etc.)
- Fixes inconsistencies reported in: :issue:`1992` :issue:`2514` :issue:`2610`
:issue:`3024` :pr:`3030`
- Allow `default` to be set on `Argument` for `nargs = -1`. :issue:`2164`
:pr:`3030`
- Show correct auto complete value for `nargs` option in combination with flag
option :issue:`2813`
- Fix handling of quoted and escaped parameters in Fish autocompletion. :issue:`2995` :pr:`3013`
- Lazily import `shutil`. :pr:`3023`
- Properly forward exception information to resources registered with
`click.core.Context.with_resource()`. :issue:`2447` :pr:`3058`
- Fix regression related to EOF handling in `CliRunner`. :issue:`2939` :pr:`2940`
### [`v8.2.2`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-822)
[Compare Source](https://github.com/pallets/click/compare/8.2.1...8.2.2)
Released 2025-07-31
- Fix reconciliation of `default`, `flag_value` and `type` parameters for
flag options, as well as parsing and normalization of environment variables.
:issue:`2952` :pr:`2956`
- Fix typing issue in `BadParameter` and `MissingParameter` exceptions for the
parameter `param_hint` that did not allow for a sequence of string where the
underlying function `_join_param_hints` allows for it. :issue:`2777` :pr:`2990`
- Use the value of `Enum` choices to render their default value in help
screen. Refs :issue:`2911` :pr:`3004`
- Fix completion for the Z shell (`zsh`) for completion items containing
colons. :issue:`2703` :pr:`2846`
- Don't include envvar in error hint when not configured. :issue:`2971` :pr:`2972`
- Fix a rare race in `click.testing.StreamMixer`'s finalization that manifested
as a `ValueError` on close in a multi-threaded test session.
:issue:`2993` :pr:`2991`
### [`v8.2.1`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-821)
[Compare Source](https://github.com/pallets/click/compare/8.2.0...8.2.1)
Released 2025-05-20
- Fix flag value handling for flag options with a provided type. :issue:`2894`
:issue:`2897` :pr:`2930`
- Fix shell completion for nested groups. :issue:`2906` :pr:`2907`
- Flush `sys.stderr` at the end of `CliRunner.invoke`. :issue:`2682`
- Fix EOF handling for stdin input in CliRunner. :issue:`2787`
### [`v8.2.0`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-820)
[Compare Source](https://github.com/pallets/click/compare/8.1.8...8.2.0)
Released 2025-05-10
- Drop support for Python 3.7, 3.8, and 3.9. :pr:`2588` :pr:`2893`
- Use modern packaging metadata with `pyproject.toml` instead of `setup.cfg`.
:pr:`2438`
- Use `flit_core` instead of `setuptools` as build backend. :pr:`2543`
- Deprecate the `__version__` attribute. Use feature detection, or
`importlib.metadata.version("click")`, instead. :issue:`2598`
- `BaseCommand` is deprecated. `Command` is the base class for all
commands. :issue:`2589`
- `MultiCommand` is deprecated. `Group` is the base class for all group
commands. :issue:`2590`
- The current parser and related classes and methods, are deprecated.
:issue:`2205`
- `OptionParser` and the `parser` module, which is a modified copy of
`optparse` in the standard library.
- `Context.protected_args` is unneeded. `Context.args` contains any
remaining arguments while parsing.
- `Parameter.add_to_parser` (on both `Argument` and `Option`) is
unneeded. Parsing works directly without building a separate parser.
- `split_arg_string` is moved from `parser` to `shell_completion`.
- Enable deferred evaluation of annotations with
`from __future__ import annotations`. :pr:`2270`
- When generating a command's name from a decorated function's name, the
suffixes `_command`, `_cmd`, `_group`, and `_grp` are removed.
:issue:`2322`
- Show the `types.ParamType.name` for `types.Choice` options within
`--help` message if `show_choices=False` is specified.
:issue:`2356`
- Do not display default values in prompts when `Option.show_default` is
`False`. :pr:`2509`
- Add `get_help_extra` method on `Option` to fetch the generated extra
items used in `get_help_record` to render help text. :issue:`2516`
:pr:`2517`
- Keep stdout and stderr streams independent in `CliRunner`. Always
collect stderr output and never raise an exception. Add a new
output stream to simulate what the user sees in its terminal. Removes
the `mix_stderr` parameter in `CliRunner`. :issue:`2522` :pr:`2523`
- `Option.show_envvar` now also shows environment variable in error messages.
:issue:`2695` :pr:`2696`
- `Context.close` will be called on exit. This results in all
`Context.call_on_close` callbacks and context managers added via
`Context.with_resource` to be closed on exit as well. :pr:`2680`
- Add `ProgressBar(hidden: bool)` to allow hiding the progressbar. :issue:`2609`
- A `UserWarning` will be shown when multiple parameters attempt to use the
same name. :issue:`2396`
- When using `Option.envvar` with `Option.flag_value`, the `flag_value`
will always be used instead of the value of the environment variable.
:issue:`2746` :pr:`2788`
- Add `Choice.get_invalid_choice_message` method for customizing the
invalid choice message. :issue:`2621` :pr:`2622`
- If help is shown because `no_args_is_help` is enabled (defaults to `True`
for groups, `False` for commands), the exit code is 2 instead of 0.
:issue:`1489` :pr:`1489`
- Contexts created during shell completion are closed properly, fixing
a `ResourceWarning` when using `click.File`. :issue:`2644` :pr:`2800`
:pr:`2767`
- `click.edit(filename)` now supports passing an iterable of filenames in
case the editor supports editing multiple files at once. Its return type
is now also typed: `AnyStr` if `text` is passed, otherwise `None`.
:issue:`2067` :pr:`2068`
- Specialized typing of `progressbar(length=...)` as `ProgressBar[int]`.
:pr:`2630`
- Improve `echo_via_pager` behaviour in face of errors.
:issue:`2674`
- Terminate the pager in case a generator passed to `echo_via_pager`
raises an exception.
- Ensure to always close the pipe to the pager process and wait for it
to terminate.
- `echo_via_pager` will not ignore `KeyboardInterrupt` anymore. This
allows the user to search for future output of the generator when
using less and then aborting the program using ctrl-c.
- `deprecated: bool | str` can now be used on options and arguments. This
previously was only available for `Command`. The message can now also be
customised by using a `str` instead of a `bool`. :issue:`2263` :pr:`2271`
- `Command.deprecated` formatting in `--help` changed from
`(Deprecated) help` to `help (DEPRECATED)`.
- Parameters cannot be required nor prompted or an error is raised.
- A warning will be printed when something deprecated is used.
- Add a `catch_exceptions` parameter to `CliRunner`. If
`catch_exceptions` is not passed to `CliRunner.invoke`, the value
from `CliRunner` is used. :issue:`2817` :pr:`2818`
- `Option.flag_value` will no longer have a default value set based on
`Option.default` if `Option.is_flag` is `False`. This results in
`Option.default` not needing to implement `__bool__`. :pr:`2829`
- Incorrect `click.edit` typing has been corrected. :pr:`2804`
- `Choice` is now generic and supports any iterable value.
This allows you to use enums and other non-`str` values. :pr:`2796`
:issue:`605`
- Fix setup of help option's defaults when using a custom class on its
decorator. Removes `HelpOption`. :issue:`2832` :pr:`2840`
### [`v8.1.8`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-818)
[Compare Source](https://github.com/pallets/click/compare/8.1.7...8.1.8)
Released 2024-12-19
- Fix an issue with type hints for `click.open_file()`. :issue:`2717`
- Fix issue where error message for invalid `click.Path` displays on
multiple lines. :issue:`2697`
- Fixed issue that prevented a default value of `""` from being displayed in
the help for an option. :issue:`2500`
- The test runner handles stripping color consistently on Windows.
:issue:`2705`
- Show correct value for flag default when using `default_map`.
:issue:`2632`
- Fix `click.echo(color=...)` passing `color` to coloroma so it can be
forced on Windows. :issue:`2606`.
- More robust bash version check, fixing problem on Windows with git-bash.
:issue:`2638`
- Cache the help option generated by the `help_option_names` setting to
respect its eagerness. :pr:`2811`
- Replace uses of `os.system` with `subprocess.Popen`. :issue:`1476`
- Exceptions generated during a command will use the context's `color`
setting when being displayed. :issue:`2193`
- Error message when defining option with invalid name is more descriptive.
:issue:`2452`
- Refactor code generating default `--help` option to deduplicate code.
:pr:`2563`
- Test `CLIRunner` resets patched `_compat.should_strip_ansi`.
:issue:`2732`
### [`v8.1.7`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-817)
[Compare Source](https://github.com/pallets/click/compare/8.1.6...8.1.7)
Released 2023-08-17
- Fix issue with regex flags in shell completion. :issue:`2581`
- Bash version detection issues a warning instead of an error. :issue:`2574`
- Fix issue with completion script for Fish shell. :issue:`2567`
### [`v8.1.6`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-816)
[Compare Source](https://github.com/pallets/click/compare/8.1.5...8.1.6)
Released 2023-07-18
- Fix an issue with type hints for `@click.group()`. :issue:`2558`
### [`v8.1.5`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-815)
[Compare Source](https://github.com/pallets/click/compare/8.1.4...8.1.5)
Released 2023-07-13
- Fix an issue with type hints for `@click.command()`, `@click.option()`, and
other decorators. Introduce typing tests. :issue:`2558`
### [`v8.1.4`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-814)
[Compare Source](https://github.com/pallets/click/compare/8.1.3...8.1.4)
Released 2023-07-06
- Replace all `typing.Dict` occurrences to `typing.MutableMapping` for
parameter hints. :issue:`2255`
- Improve type hinting for decorators and give all generic types parameters.
:issue:`2398`
- Fix return value and type signature of `shell_completion.add_completion_class`
function. :pr:`2421`
- Bash version detection doesn't fail on Windows. :issue:`2461`
- Completion works if there is a dot (`.`) in the program name. :issue:`2166`
- Improve type annotations for pyright type checker. :issue:`2268`
- Improve responsiveness of `click.clear()`. :issue:`2284`
- Improve command name detection when using Shiv or PEX. :issue:`2332`
- Avoid showing empty lines if command help text is empty. :issue:`2368`
- ZSH completion script works when loaded from `fpath`. :issue:`2344`.
- `EOFError` and `KeyboardInterrupt` tracebacks are not suppressed when
`standalone_mode` is disabled. :issue:`2380`
- `@group.command` does not fail if the group was created with a custom
`command_class`. :issue:`2416`
- `multiple=True` is allowed for flag options again and does not require
setting `default=()`. :issue:`2246, 2292, 2295`
- Make the decorators returned by `@argument()` and `@option()` reusable when the
`cls` parameter is used. :issue:`2294`
- Don't fail when writing filenames to streams with strict errors. Replace invalid
bytes with the replacement character (`�`). :issue:`2395`
- Remove unnecessary attempt to detect MSYS2 environment. :issue:`2355`
- Remove outdated and unnecessary detection of App Engine environment. :pr:`2554`
- `echo()` does not fail when no streams are attached, such as with `pythonw` on
Windows. :issue:`2415`
- Argument with `expose_value=False` do not cause completion to fail. :issue:`2336`
### [`v8.1.3`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-813)
[Compare Source](https://github.com/pallets/click/compare/8.1.2...8.1.3)
Released 2022-04-28
- Use verbose form of `typing.Callable` for `@command` and
`@group`. :issue:`2255`
- Show error when attempting to create an option with
`multiple=True, is_flag=True`. Use `count` instead.
:issue:`2246`
### [`v8.1.2`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-812)
[Compare Source](https://github.com/pallets/click/compare/8.1.1...8.1.2)
Released 2022-03-31
- Fix error message for readable path check that was mixed up with the
executable check. :pr:`2236`
- Restore parameter order for `Path`, placing the `executable`
parameter at the end. It is recommended to use keyword arguments
instead of positional arguments. :issue:`2235`
### [`v8.1.1`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-811)
[Compare Source](https://github.com/pallets/click/compare/8.1.0...8.1.1)
Released 2022-03-30
- Fix an issue with decorator typing that caused type checking to
report that a command was not callable. :issue:`2227`
### [`v8.1.0`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-810)
[Compare Source](https://github.com/pallets/click/compare/8.0.4...8.1.0)
Released 2022-03-28
- Drop support for Python 3.6. :pr:`2129`
- Remove previously deprecated code. :pr:`2130`
- `Group.resultcallback` is renamed to `result_callback`.
- `autocompletion` parameter to `Command` is renamed to
`shell_complete`.
- `get_terminal_size` is removed, use
`shutil.get_terminal_size` instead.
- `get_os_args` is removed, use `sys.argv[1:]` instead.
- Rely on :pep:`538` and :pep:`540` to handle selecting UTF-8 encoding
instead of ASCII. Click's locale encoding detection is removed.
:issue:`2198`
- Single options boolean flags with `show_default=True` only show
the default if it is `True`. :issue:`1971`
- The `command` and `group` decorators can be applied with or
without parentheses. :issue:`1359`
- The `Path` type can check whether the target is executable.
:issue:`1961`
- `Command.show_default` overrides `Context.show_default`, instead
of the other way around. :issue:`1963`
- Parameter decorators and `@group` handles `cls=None` the same as
not passing `cls`. `@option` handles `help=None` the same as
not passing `help`. :issue:`#1959`
- A flag option with `required=True` requires that the flag is
passed instead of choosing the implicit default value. :issue:`1978`
- Indentation in help text passed to `Option` and `Command` is
cleaned the same as using the `@option` and `@command`
decorators does. A command's `epilog` and `short_help` are also
processed. :issue:`1985`
- Store unprocessed `Command.help`, `epilog` and `short_help`
strings. Processing is only done when formatting help text for
output. :issue:`2149`
- Allow empty str input for `prompt()` when
`confirmation_prompt=True` and `default=""`. :issue:`2157`
- Windows glob pattern expansion doesn't fail if a value is an invalid
pattern. :issue:`2195`
- It's possible to pass a list of `params` to `@command`. Any
params defined with decorators are appended to the passed params.
:issue:`2131`.
- `@command` decorator is annotated as returning the correct type if
a `cls` argument is used. :issue:`2211`
- A `Group` with `invoke_without_command=True` and `chain=False`
will invoke its result callback with the group function's return
value. :issue:`2124`
- `to_info_dict` will not fail if a `ParamType` doesn't define a
`name`. :issue:`2168`
- Shell completion prioritizes option values with option prefixes over
new options. :issue:`2040`
- Options that get an environment variable value using
`autoenvvar_prefix` treat an empty value as `None`, consistent
with a direct `envvar`. :issue:`2146`
### [`v8.0.4`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-804)
[Compare Source](https://github.com/pallets/click/compare/8.0.3...8.0.4)
Released 2022-02-18
- `open_file` recognizes `Path("-")` as a standard stream, the
same as the string `"-"`. :issue:`2106`
- The `option` and `argument` decorators preserve the type
annotation of the decorated function. :pr:`2155`
- A callable default value can customize its help text by overriding
`__str__` instead of always showing `(dynamic)`. :issue:`2099`
- Fix a typo in the Bash completion script that affected file and
directory completion. If this script was generated by a previous
version, it should be regenerated. :issue:`2163`
- Fix typing for `echo` and `secho` file argument.
:issue:`2174, 2185`
### [`v8.0.3`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-803)
[Compare Source](https://github.com/pallets/click/compare/8.0.2...8.0.3)
Released 2021-10-10
- Fix issue with `Path(resolve_path=True)` type creating invalid
paths. :issue:`2088`
- Importing `readline` does not cause the `confirm()` prompt to
disappear when pressing backspace. :issue:`2092`
- Any default values injected by `invoke()` are cast to the
corresponding parameter's type. :issue:`2089, 2090`
### [`v8.0.2`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-802)
[Compare Source](https://github.com/pallets/click/compare/8.0.1...8.0.2)
Released 2021-10-08
- `is_bool_flag` is not set to `True` if `is_flag` is `False`.
:issue:`1925`
- Bash version detection is locale independent. :issue:`1940`
- Empty `default` value is not shown for `multiple=True`.
:issue:`1969`
- Fix shell completion for arguments that start with a forward slash
such as absolute file paths. :issue:`1929`
- `Path` type with `resolve_path=True` resolves relative symlinks
to be relative to the containing directory. :issue:`1921`
- Completion does not skip Python's resource cleanup when exiting,
avoiding some unexpected warning output. :issue:`1738, 2017`
- Fix type annotation for `type` argument in `prompt` function.
:issue:`2062`
- Fix overline and italic styles, which were incorrectly added when
adding underline. :pr:`2058`
- An option with `count=True` will not show "\[x>=0]" in help text.
:issue:`2072`
- Default values are not cast to the parameter type twice during
processing. :issue:`2085`
- Options with `multiple` and `flag_value` use the flag value
instead of leaving an internal placeholder. :issue:`2001`
### [`v8.0.1`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-801)
[Compare Source](https://github.com/pallets/click/compare/8.0.0...8.0.1)
Released 2021-05-19
- Mark top-level names as exported so type checking understand imports
in user projects. :issue:`1879`
- Annotate `Context.obj` as `Any` so type checking allows all
operations on the arbitrary object. :issue:`1885`
- Fix some types that weren't available in Python 3.6.0. :issue:`1882`
- Fix type checking for iterating over `ProgressBar` object.
:issue:`1892`
- The `importlib_metadata` backport package is installed on Python <
3.8. :issue:`1889`
- Arguments with `nargs=-1` only use env var value if no command
line values are given. :issue:`1903`
- Flag options guess their type from `flag_value` if given, like
regular options do from `default`. :issue:`1886`
- Added documentation that custom parameter types may be passed
already valid values in addition to strings. :issue:`1898`
- Resolving commands returns the name that was given, not
`command.name`, fixing an unintended change to help text and
`default_map` lookups. When using patterns like `AliasedGroup`,
override `resolve_command` to change the name that is returned if
needed. :issue:`1895`
- If a default value is invalid, it does not prevent showing help
text. :issue:`1889`
- Pass `windows_expand_args=False` when calling the main command to
disable pattern expansion on Windows. There is no way to escape
patterns in CMD, so if the program needs to pass them on as-is then
expansion must be disabled. :issue:`1901`
### [`v8.0.0`](https://github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-800)
[Compare Source](https://github.com/pallets/click/compare/7.1.2...8.0.0)
Released 2021-05-11
- Drop support for Python 2 and 3.5.
- Colorama is always installed on Windows in order to provide style
and color support. :pr:`1784`
- Adds a repr to Command, showing the command name for friendlier
debugging. :issue:`1267`, :pr:`1295`
- Add support for distinguishing the source of a command line
parameter. :issue:`1264`, :pr:`1329`
- Add an optional parameter to `ProgressBar.update` to set the
`current_item`. :issue:`1226`, :pr:`1332`
- `version_option` uses `importlib.metadata` (or the
`importlib_metadata` backport) instead of `pkg_resources`. The
version is detected based on the package name, not the entry point
name. The Python package name must match the installed package
name, or be passed with `package_name=`. :issue:`1582`
- If validation fails for a prompt with `hide_input=True`, the value
is not shown in the error message. :issue:`1460`
- An `IntRange` or `FloatRange` option shows the accepted range in
its help text. :issue:`1525`, :pr:`1303`
- `IntRange` and `FloatRange` bounds can be open (`<`) instead
of closed (`<=`) by setting `min_open` and `max_open`. Error
messages have changed to reflect this. :issue:`1100`
- An option defined with duplicate flag names (`"--foo/--foo"`)
raises a `ValueError`. :issue:`1465`
- `echo()` will not fail when using pytest's `capsys` fixture on
Windows. :issue:`1590`
- Resolving commands returns the canonical command name instead of the
matched name. This makes behavior such as help text and
`Context.invoked_subcommand` consistent when using patterns like
`AliasedGroup`. :issue:`1422`
- The `BOOL` type accepts the values "on" and "off". :issue:`1629`
- A `Group` with `invoke_without_command=True` will always invoke
its result callback. :issue:`1178`
- `nargs == -1` and `nargs > 1` is parsed and validated for
values from environment variables and defaults. :issue:`729`
- Detect the program name when executing a module or package with
`python -m name`. :issue:`1603`
- Include required parent arguments in help synopsis of subcommands.
:issue:`1475`
- Help for boolean flags with `show_default=True` shows the flag
name instead of `True` or `False`. :issue:`1538`
- Non-string objects passed to `style()` and `secho()` will be
converted to string. :pr:`1146`
- `edit(require_save=True)` will detect saves for editors that exit
very fast on filesystems with 1 second resolution. :pr:`1050`
- New class attributes make it easier to use custom core objects
throughout an entire application. :pr:`938`
- `Command.context_class` controls the context created when
running the command.
- `Context.invoke` creates new contexts of the same type, so a
custom type will persist to invoked subcommands.
- `Context.formatter_class` controls the formatter used to
generate help and usage.
- `Group.command_class` changes the default type for
subcommands with `@group.command()`.
- `Group.group_class` changes the default type for subgroups
with `@group.group()`. Setting it to `type` will create
subgroups of the same type as the group itself.
- Core objects use `super()` consistently for better support of
subclassing.
- Use `Context.with_resource()` to manage resources that would
normally be used in a `with` statement, allowing them to be used
across subcommands and callbacks, then cleaned up when the context
ends. :pr:`1191`
- The result object returned by the test runner's `invoke()` method
has a `return_value` attribute with the value returned by the
invoked command. :pr:`1312`
- Required arguments with the `Choice` type show the choices in
curly braces to indicate that one is required (`{a|b|c}`).
:issue:`1272`
- If only a name is passed to `option()`, Click suggests renaming it
to `--name`. :pr:`1355`
- A context's `show_default` parameter defaults to the value from
the parent context. :issue:`1565`
- `click.style()` can output 256 and RGB color codes. Most modern
terminals support these codes. :pr:`1429`
- When using `CliRunner.invoke()`, the replaced `stdin` file has
`name` and `mode` attributes. This lets `File` options with
the `-` value match non-testing behavior. :issue:`1064`
- When creating a `Group`, allow passing a list of commands instead
of a dict. :issue:`1339`
- When a long option name isn't valid, use `difflib` to make better
suggestions for possible corrections. :issue:`1446`
- Core objects have a `to_info_dict()` method. This gathers
information about the object's structure that could be useful for a
tool generating user-facing documentation. To get the structure of
an entire CLI, use `Context(cli).to_info_dict()`. :issue:`461`
- Redesign the shell completion system. :issue:`1484`, :pr:`1622`
- Support Bash >= 4.4, Zsh, and Fish, with the ability for
extensions to add support for other shells.
- Allow commands, groups, parameters, and types to override their
completions suggestions.
- Groups complete the names commands were registered with, which
can differ from the name they were created with.
- The `autocompletion` parameter for options and arguments is
renamed to `shell_complete`. The function must take
`ctx, param, incomplete`, must do matching rather than return
all values, and must return a list of strings or a list of
`CompletionItem`. The old name and behavior is deprecated and
will be removed in 8.1.
- The env var values used to start completion have changed order.
The shell now comes first, such as `{shell}_source` rather
than `source_{shell}`, and is always required.
- Completion correctly parses command line strings with incomplete
quoting or escape sequences. :issue:`1708`
- Extra context settings (`obj=...`, etc.) are passed on to the
completion system. :issue:`942`
- Include `--help` option in completion. :pr:`1504`
- `ParameterSource` is an `enum.Enum` subclass. :issue:`1530`
- Boolean and UUID types strip surrounding space before converting.
:issue:`1605`
- Adjusted error message from parameter type validation to be more
consistent. Quotes are used to distinguish the invalid value.
:issue:`1605`
- The default value for a parameter with `nargs` > 1 and
`multiple=True` must be a list of tuples. :issue:`1649`
- When getting the value for a parameter, the default is tried in the
same section as other sources to ensure consistent processing.
:issue:`1649`
- All parameter types accept a value that is already the correct type.
:issue:`1649`
- For shell completion, an argument is considered incomplete if its
value did not come from the command line args. :issue:`1649`
- Added `ParameterSource.PROMPT` to track parameter values that were
prompted for. :issue:`1649`
- Options with `nargs` > 1 no longer raise an error if a default is
not given. Parameters with `nargs` > 1 default to `None`, and
parameters with `multiple=True` or `nargs=-1` default to an
empty tuple. :issue:`472`
- Handle empty env vars as though the option were not passed. This
extends the change introduced in 7.1 to be consistent in more cases.
:issue:`1285`
- `Parameter.get_default()` checks `Context.default_map` to
handle overrides consistently in help text, `invoke()`, and
prompts. :issue:`1548`
- Add `prompt_required` param to `Option`. When set to `False`,
the user will only be prompted for an input if no value was passed.
:issue:`736`
- Providing the value to an option can be made optional through
`is_flag=False`, and the value can instead be prompted for or
passed in as a default value.
:issue:`549, 736, 764, 921, 1015, 1618`
- Fix formatting when `Command.options_metavar` is empty. :pr:`1551`
- Revert adding space between option help text that wraps.
:issue:`1831`
- The default value passed to `prompt` will be cast to the correct
type like an input value would be. :pr:`1517`
- Automatically generated short help messages will stop at the first
ending of a phrase or double linebreak. :issue:`1082`
- Skip progress bar render steps for efficiency with very fast
iterators by setting `update_min_steps`. :issue:`676`
- Respect `case_sensitive=False` when doing shell completion for
`Choice` :issue:`1692`
- Use `mkstemp()` instead of `mktemp()` in pager implementation.
:issue:`1752`
- If `Option.show_default` is a string, it is displayed even if
`default` is `None`. :issue:`1732`
- `click.get_terminal_size()` is deprecated and will be removed in
8.1. Use :func:`shutil.get_terminal_size` instead. :issue:`1736`
- Control the location of the temporary directory created by
`CLIRunner.isolated_filesystem` by passing `temp_dir`. A custom
directory will not be removed automatically. :issue:`395`
- `click.confirm()` will prompt until input is given if called with
`default=None`. :issue:`1381`
- Option prompts validate the value with the option's callback in
addition to its type. :issue:`457`
- `confirmation_prompt` can be set to a custom string. :issue:`723`
- Allow styled output in Jupyter on Windows. :issue:`1271`
- `style()` supports the `strikethrough`, `italic`, and
`overline` styles. :issue:`805, 1821`
- Multiline marker is removed from short help text. :issue:`1597`
- Restore progress bar behavior of echoing only the label if the file
is not a TTY. :issue:`1138`
- Progress bar output is shown even if execution time is less than 0.5
seconds. :issue:`1648`
- Progress bar `item_show_func` shows the current item, not the
previous item. :issue:`1353`
- The `Path` param type can be passed `path_type=pathlib.Path` to
return a path object instead of a string. :issue:`405`
- `TypeError` is raised when parameter with `multiple=True` or
`nargs > 1` has non-iterable default. :issue:`1749`
- Add a `pass_meta_key` decorator for passing a key from
`Context.meta`. This is useful for extensions using `meta` to
store information. :issue:`1739`
- `Path` `resolve_path` resolves symlinks on Windows Python < 3.8.
:issue:`1813`
- Command deprecation notice appears at the start of the help text, as
well as in the short help. The notice is not in all caps.
:issue:`1791`
- When taking arguments from `sys.argv` on Windows, glob patterns,
user dir, and env vars are expanded. :issue:`1096`
- Marked messages shown by the CLI with `gettext()` to allow
applications to translate Click's built-in strings. :issue:`303`
- Writing invalid characters to `stderr` when using the test runner
does not raise a `UnicodeEncodeError`. :issue:`848`
- Fix an issue where `readline` would clear the entire `prompt()`
line instead of only the input when pressing backspace. :issue:`665`
- Add all kwargs passed to `Context.invoke()` to `ctx.params`.
Fixes an inconsistency when nesting `Context.forward()` calls.
:issue:`1568`
- The `MultiCommand.resultcallback` decorator is renamed to
`result_callback`. The old name is deprecated. :issue:`1160`
- Fix issues with `CliRunner` output when using `echo_stdin=True`.
:issue:`1101`
- Fix a bug of `click.utils.make_default_short_help` for which the
returned string could be as long as `max_width + 3`. :issue:`1849`
- When defining a parameter, `default` is validated with
`multiple` and `nargs`. More validation is done for values being
processed as well. :issue:`1806`
- `HelpFormatter.write_text` uses the full line width when wrapping
text. :issue:`1871`
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Enabled.
♻ **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.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45OS4wIiwidXBkYXRlZEluVmVyIjoiNDIuOTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGV2b3BzL3Jlbm92YXRlLWNvbmZpZyJdfQ==-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
==7.1.2→==8.3.1Release Notes
pallets/click (click)
v8.3.1Compare Source
Released 2025-11-15
subprocess.Popen. :issue:3039:pr:
3055Sentinel.UNSETdefault values byNoneas they're passed throughthe
Context.invoke()method. :issue:3066:issue:3065:pr:3068Sentinel.UNSEThappening too early, which caused incorrectbehavior for multiple parameters using the same name. :issue:
3071:pr:3079Sentinel.UNSETvalues asNonewhen looking up for other parametersthrough the context inside parameter callbacks. :issue:
3136:pr:3137promptandconfirmparameterprompt_suffixisempty. :issue:
3019:pr:3021Sentinel.UNSETis found during parsing, it will skip calls totype_cast_value. :issue:3069:pr:3090v8.3.0Compare Source
Released 2025-09-17
Improved flag option handling: Reworked the relationship between
flag_valueand
defaultparameters for better consistency:defaultparameter value is now preserved as-is and passed directlyto CLI functions (no more unexpected transformations)
default=Truemaintain backward compatibilityby defaulting to their
flag_valuedefaultparameter can now be any type (bool,None, etc.)1992:issue:2514:issue:2610:issue:
3024:pr:3030Allow
defaultto be set onArgumentfornargs = -1. :issue:2164:pr:
3030Show correct auto complete value for
nargsoption in combination with flagoption :issue:
2813Fix handling of quoted and escaped parameters in Fish autocompletion. :issue:
2995:pr:3013Lazily import
shutil. :pr:3023Properly forward exception information to resources registered with
click.core.Context.with_resource(). :issue:2447:pr:3058Fix regression related to EOF handling in
CliRunner. :issue:2939:pr:2940v8.2.2Compare Source
Released 2025-07-31
default,flag_valueandtypeparameters forflag options, as well as parsing and normalization of environment variables.
:issue:
2952:pr:2956BadParameterandMissingParameterexceptions for theparameter
param_hintthat did not allow for a sequence of string where theunderlying function
_join_param_hintsallows for it. :issue:2777:pr:2990Enumchoices to render their default value in helpscreen. Refs :issue:
2911:pr:3004zsh) for completion items containingcolons. :issue:
2703:pr:28462971:pr:2972click.testing.StreamMixer's finalization that manifestedas a
ValueErroron close in a multi-threaded test session.:issue:
2993:pr:2991v8.2.1Compare Source
Released 2025-05-20
2894:issue:
2897:pr:29302906:pr:2907sys.stderrat the end ofCliRunner.invoke. :issue:26822787v8.2.0Compare Source
Released 2025-05-10
Drop support for Python 3.7, 3.8, and 3.9. :pr:
2588:pr:2893Use modern packaging metadata with
pyproject.tomlinstead ofsetup.cfg.:pr:
2438Use
flit_coreinstead ofsetuptoolsas build backend. :pr:2543Deprecate the
__version__attribute. Use feature detection, orimportlib.metadata.version("click"), instead. :issue:2598BaseCommandis deprecated.Commandis the base class for allcommands. :issue:
2589MultiCommandis deprecated.Groupis the base class for all groupcommands. :issue:
2590The current parser and related classes and methods, are deprecated.
:issue:
2205OptionParserand theparsermodule, which is a modified copy ofoptparsein the standard library.Context.protected_argsis unneeded.Context.argscontains anyremaining arguments while parsing.
Parameter.add_to_parser(on bothArgumentandOption) isunneeded. Parsing works directly without building a separate parser.
split_arg_stringis moved fromparsertoshell_completion.Enable deferred evaluation of annotations with
from __future__ import annotations. :pr:2270When generating a command's name from a decorated function's name, the
suffixes
_command,_cmd,_group, and_grpare removed.:issue:
2322Show the
types.ParamType.namefortypes.Choiceoptions within--helpmessage ifshow_choices=Falseis specified.:issue:
2356Do not display default values in prompts when
Option.show_defaultisFalse. :pr:2509Add
get_help_extramethod onOptionto fetch the generated extraitems used in
get_help_recordto render help text. :issue:2516:pr:
2517Keep stdout and stderr streams independent in
CliRunner. Alwayscollect stderr output and never raise an exception. Add a new
output stream to simulate what the user sees in its terminal. Removes
the
mix_stderrparameter inCliRunner. :issue:2522:pr:2523Option.show_envvarnow also shows environment variable in error messages.:issue:
2695:pr:2696Context.closewill be called on exit. This results in allContext.call_on_closecallbacks and context managers added viaContext.with_resourceto be closed on exit as well. :pr:2680Add
ProgressBar(hidden: bool)to allow hiding the progressbar. :issue:2609A
UserWarningwill be shown when multiple parameters attempt to use thesame name. :issue:
2396When using
Option.envvarwithOption.flag_value, theflag_valuewill always be used instead of the value of the environment variable.
:issue:
2746:pr:2788Add
Choice.get_invalid_choice_messagemethod for customizing theinvalid choice message. :issue:
2621:pr:2622If help is shown because
no_args_is_helpis enabled (defaults toTruefor groups,
Falsefor commands), the exit code is 2 instead of 0.:issue:
1489:pr:1489Contexts created during shell completion are closed properly, fixing
a
ResourceWarningwhen usingclick.File. :issue:2644:pr:2800:pr:
2767click.edit(filename)now supports passing an iterable of filenames incase the editor supports editing multiple files at once. Its return type
is now also typed:
AnyStriftextis passed, otherwiseNone.:issue:
2067:pr:2068Specialized typing of
progressbar(length=...)asProgressBar[int].:pr:
2630Improve
echo_via_pagerbehaviour in face of errors.:issue:
2674echo_via_pagerraises an exception.
to terminate.
echo_via_pagerwill not ignoreKeyboardInterruptanymore. Thisallows the user to search for future output of the generator when
using less and then aborting the program using ctrl-c.
deprecated: bool | strcan now be used on options and arguments. Thispreviously was only available for
Command. The message can now also becustomised by using a
strinstead of abool. :issue:2263:pr:2271Command.deprecatedformatting in--helpchanged from(Deprecated) helptohelp (DEPRECATED).Add a
catch_exceptionsparameter toCliRunner. Ifcatch_exceptionsis not passed toCliRunner.invoke, the valuefrom
CliRunneris used. :issue:2817:pr:2818Option.flag_valuewill no longer have a default value set based onOption.defaultifOption.is_flagisFalse. This results inOption.defaultnot needing to implement__bool__. :pr:2829Incorrect
click.edittyping has been corrected. :pr:2804Choiceis now generic and supports any iterable value.This allows you to use enums and other non-
strvalues. :pr:2796:issue:
605Fix setup of help option's defaults when using a custom class on its
decorator. Removes
HelpOption. :issue:2832:pr:2840v8.1.8Compare Source
Released 2024-12-19
click.open_file(). :issue:2717click.Pathdisplays onmultiple lines. :issue:
2697""from being displayed inthe help for an option. :issue:
2500:issue:
2705default_map.:issue:
2632click.echo(color=...)passingcolorto coloroma so it can beforced on Windows. :issue:
2606.:issue:
2638help_option_namessetting torespect its eagerness. :pr:
2811os.systemwithsubprocess.Popen. :issue:1476colorsetting when being displayed. :issue:
2193:issue:
2452--helpoption to deduplicate code.:pr:
2563CLIRunnerresets patched_compat.should_strip_ansi.:issue:
2732v8.1.7Compare Source
Released 2023-08-17
258125742567v8.1.6Compare Source
Released 2023-07-18
@click.group(). :issue:2558v8.1.5Compare Source
Released 2023-07-13
@click.command(),@click.option(), andother decorators. Introduce typing tests. :issue:
2558v8.1.4Compare Source
Released 2023-07-06
typing.Dictoccurrences totyping.MutableMappingforparameter hints. :issue:
2255:issue:
2398shell_completion.add_completion_classfunction. :pr:
24212461.) in the program name. :issue:21662268click.clear(). :issue:228423322368fpath. :issue:2344.EOFErrorandKeyboardInterrupttracebacks are not suppressed whenstandalone_modeis disabled. :issue:2380@group.commanddoes not fail if the group was created with a customcommand_class. :issue:2416multiple=Trueis allowed for flag options again and does not requiresetting
default=(). :issue:2246, 2292, 2295@argument()and@option()reusable when theclsparameter is used. :issue:2294bytes with the replacement character (
�). :issue:239523552554echo()does not fail when no streams are attached, such as withpythonwonWindows. :issue:
2415expose_value=Falsedo not cause completion to fail. :issue:2336v8.1.3Compare Source
Released 2022-04-28
typing.Callablefor@commandand@group. :issue:2255multiple=True, is_flag=True. Usecountinstead.:issue:
2246v8.1.2Compare Source
Released 2022-03-31
executable check. :pr:
2236Path, placing theexecutableparameter at the end. It is recommended to use keyword arguments
instead of positional arguments. :issue:
2235v8.1.1Compare Source
Released 2022-03-30
report that a command was not callable. :issue:
2227v8.1.0Compare Source
Released 2022-03-28
Drop support for Python 3.6. :pr:
2129Remove previously deprecated code. :pr:
2130Group.resultcallbackis renamed toresult_callback.autocompletionparameter toCommandis renamed toshell_complete.get_terminal_sizeis removed, useshutil.get_terminal_sizeinstead.get_os_argsis removed, usesys.argv[1:]instead.Rely on :pep:
538and :pep:540to handle selecting UTF-8 encodinginstead of ASCII. Click's locale encoding detection is removed.
:issue:
2198Single options boolean flags with
show_default=Trueonly showthe default if it is
True. :issue:1971The
commandandgroupdecorators can be applied with orwithout parentheses. :issue:
1359The
Pathtype can check whether the target is executable.:issue:
1961Command.show_defaultoverridesContext.show_default, insteadof the other way around. :issue:
1963Parameter decorators and
@grouphandlescls=Nonethe same asnot passing
cls.@optionhandleshelp=Nonethe same asnot passing
help. :issue:#1959A flag option with
required=Truerequires that the flag ispassed instead of choosing the implicit default value. :issue:
1978Indentation in help text passed to
OptionandCommandiscleaned the same as using the
@optionand@commanddecorators does. A command's
epilogandshort_helpare alsoprocessed. :issue:
1985Store unprocessed
Command.help,epilogandshort_helpstrings. Processing is only done when formatting help text for
output. :issue:
2149Allow empty str input for
prompt()whenconfirmation_prompt=Trueanddefault="". :issue:2157Windows glob pattern expansion doesn't fail if a value is an invalid
pattern. :issue:
2195It's possible to pass a list of
paramsto@command. Anyparams defined with decorators are appended to the passed params.
:issue:
2131.@commanddecorator is annotated as returning the correct type ifa
clsargument is used. :issue:2211A
Groupwithinvoke_without_command=Trueandchain=Falsewill invoke its result callback with the group function's return
value. :issue:
2124to_info_dictwill not fail if aParamTypedoesn't define aname. :issue:2168Shell completion prioritizes option values with option prefixes over
new options. :issue:
2040Options that get an environment variable value using
autoenvvar_prefixtreat an empty value asNone, consistentwith a direct
envvar. :issue:2146v8.0.4Compare Source
Released 2022-02-18
open_filerecognizesPath("-")as a standard stream, thesame as the string
"-". :issue:2106optionandargumentdecorators preserve the typeannotation of the decorated function. :pr:
2155__str__instead of always showing(dynamic). :issue:2099directory completion. If this script was generated by a previous
version, it should be regenerated. :issue:
2163echoandsechofile argument.:issue:
2174, 2185v8.0.3Compare Source
Released 2021-10-10
Path(resolve_path=True)type creating invalidpaths. :issue:
2088readlinedoes not cause theconfirm()prompt todisappear when pressing backspace. :issue:
2092invoke()are cast to thecorresponding parameter's type. :issue:
2089, 2090v8.0.2Compare Source
Released 2021-10-08
is_bool_flagis not set toTrueifis_flagisFalse.:issue:
19251940defaultvalue is not shown formultiple=True.:issue:
1969such as absolute file paths. :issue:
1929Pathtype withresolve_path=Trueresolves relative symlinksto be relative to the containing directory. :issue:
1921avoiding some unexpected warning output. :issue:
1738, 2017typeargument inpromptfunction.:issue:
2062adding underline. :pr:
2058count=Truewill not show "[x>=0]" in help text.:issue:
2072processing. :issue:
2085multipleandflag_valueuse the flag valueinstead of leaving an internal placeholder. :issue:
2001v8.0.1Compare Source
Released 2021-05-19
in user projects. :issue:
1879Context.objasAnyso type checking allows alloperations on the arbitrary object. :issue:
18851882ProgressBarobject.:issue:
1892importlib_metadatabackport package is installed on Python <3.8. :issue:
1889nargs=-1only use env var value if no commandline values are given. :issue:
1903flag_valueif given, likeregular options do from
default. :issue:1886already valid values in addition to strings. :issue:
1898command.name, fixing an unintended change to help text anddefault_maplookups. When using patterns likeAliasedGroup,override
resolve_commandto change the name that is returned ifneeded. :issue:
1895text. :issue:
1889windows_expand_args=Falsewhen calling the main command todisable pattern expansion on Windows. There is no way to escape
patterns in CMD, so if the program needs to pass them on as-is then
expansion must be disabled. :issue:
1901v8.0.0Compare Source
Released 2021-05-11
Drop support for Python 2 and 3.5.
Colorama is always installed on Windows in order to provide style
and color support. :pr:
1784Adds a repr to Command, showing the command name for friendlier
debugging. :issue:
1267, :pr:1295Add support for distinguishing the source of a command line
parameter. :issue:
1264, :pr:1329Add an optional parameter to
ProgressBar.updateto set thecurrent_item. :issue:1226, :pr:1332version_optionusesimportlib.metadata(or theimportlib_metadatabackport) instead ofpkg_resources. Theversion is detected based on the package name, not the entry point
name. The Python package name must match the installed package
name, or be passed with
package_name=. :issue:1582If validation fails for a prompt with
hide_input=True, the valueis not shown in the error message. :issue:
1460An
IntRangeorFloatRangeoption shows the accepted range inits help text. :issue:
1525, :pr:1303IntRangeandFloatRangebounds can be open (<) insteadof closed (
<=) by settingmin_openandmax_open. Errormessages have changed to reflect this. :issue:
1100An option defined with duplicate flag names (
"--foo/--foo")raises a
ValueError. :issue:1465echo()will not fail when using pytest'scapsysfixture onWindows. :issue:
1590Resolving commands returns the canonical command name instead of the
matched name. This makes behavior such as help text and
Context.invoked_subcommandconsistent when using patterns likeAliasedGroup. :issue:1422The
BOOLtype accepts the values "on" and "off". :issue:1629A
Groupwithinvoke_without_command=Truewill always invokeits result callback. :issue:
1178nargs == -1andnargs > 1is parsed and validated forvalues from environment variables and defaults. :issue:
729Detect the program name when executing a module or package with
python -m name. :issue:1603Include required parent arguments in help synopsis of subcommands.
:issue:
1475Help for boolean flags with
show_default=Trueshows the flagname instead of
TrueorFalse. :issue:1538Non-string objects passed to
style()andsecho()will beconverted to string. :pr:
1146edit(require_save=True)will detect saves for editors that exitvery fast on filesystems with 1 second resolution. :pr:
1050New class attributes make it easier to use custom core objects
throughout an entire application. :pr:
938Command.context_classcontrols the context created whenrunning the command.
Context.invokecreates new contexts of the same type, so acustom type will persist to invoked subcommands.
Context.formatter_classcontrols the formatter used togenerate help and usage.
Group.command_classchanges the default type forsubcommands with
@group.command().Group.group_classchanges the default type for subgroupswith
@group.group(). Setting it totypewill createsubgroups of the same type as the group itself.
super()consistently for better support ofsubclassing.
Use
Context.with_resource()to manage resources that wouldnormally be used in a
withstatement, allowing them to be usedacross subcommands and callbacks, then cleaned up when the context
ends. :pr:
1191The result object returned by the test runner's
invoke()methodhas a
return_valueattribute with the value returned by theinvoked command. :pr:
1312Required arguments with the
Choicetype show the choices incurly braces to indicate that one is required (
{a|b|c}).:issue:
1272If only a name is passed to
option(), Click suggests renaming itto
--name. :pr:1355A context's
show_defaultparameter defaults to the value fromthe parent context. :issue:
1565click.style()can output 256 and RGB color codes. Most modernterminals support these codes. :pr:
1429When using
CliRunner.invoke(), the replacedstdinfile hasnameandmodeattributes. This letsFileoptions withthe
-value match non-testing behavior. :issue:1064When creating a
Group, allow passing a list of commands insteadof a dict. :issue:
1339When a long option name isn't valid, use
difflibto make bettersuggestions for possible corrections. :issue:
1446Core objects have a
to_info_dict()method. This gathersinformation about the object's structure that could be useful for a
tool generating user-facing documentation. To get the structure of
an entire CLI, use
Context(cli).to_info_dict(). :issue:461Redesign the shell completion system. :issue:
1484, :pr:1622extensions to add support for other shells.
completions suggestions.
can differ from the name they were created with.
autocompletionparameter for options and arguments isrenamed to
shell_complete. The function must takectx, param, incomplete, must do matching rather than returnall values, and must return a list of strings or a list of
CompletionItem. The old name and behavior is deprecated andwill be removed in 8.1.
The shell now comes first, such as
{shell}_sourceratherthan
source_{shell}, and is always required.Completion correctly parses command line strings with incomplete
quoting or escape sequences. :issue:
1708Extra context settings (
obj=..., etc.) are passed on to thecompletion system. :issue:
942Include
--helpoption in completion. :pr:1504ParameterSourceis anenum.Enumsubclass. :issue:1530Boolean and UUID types strip surrounding space before converting.
:issue:
1605Adjusted error message from parameter type validation to be more
consistent. Quotes are used to distinguish the invalid value.
:issue:
1605The default value for a parameter with
nargs> 1 andmultiple=Truemust be a list of tuples. :issue:1649When getting the value for a parameter, the default is tried in the
same section as other sources to ensure consistent processing.
:issue:
1649All parameter types accept a value that is already the correct type.
:issue:
1649For shell completion, an argument is considered incomplete if its
value did not come from the command line args. :issue:
1649Added
ParameterSource.PROMPTto track parameter values that wereprompted for. :issue:
1649Options with
nargs> 1 no longer raise an error if a default isnot given. Parameters with
nargs> 1 default toNone, andparameters with
multiple=Trueornargs=-1default to anempty tuple. :issue:
472Handle empty env vars as though the option were not passed. This
extends the change introduced in 7.1 to be consistent in more cases.
:issue:
1285Parameter.get_default()checksContext.default_maptohandle overrides consistently in help text,
invoke(), andprompts. :issue:
1548Add
prompt_requiredparam toOption. When set toFalse,the user will only be prompted for an input if no value was passed.
:issue:
736Providing the value to an option can be made optional through
is_flag=False, and the value can instead be prompted for orpassed in as a default value.
:issue:
549, 736, 764, 921, 1015, 1618Fix formatting when
Command.options_metavaris empty. :pr:1551Revert adding space between option help text that wraps.
:issue:
1831The default value passed to
promptwill be cast to the correcttype like an input value would be. :pr:
1517Automatically generated short help messages will stop at the first
ending of a phrase or double linebreak. :issue:
1082Skip progress bar render steps for efficiency with very fast
iterators by setting
update_min_steps. :issue:676Respect
case_sensitive=Falsewhen doing shell completion forChoice:issue:1692Use
mkstemp()instead ofmktemp()in pager implementation.:issue:
1752If
Option.show_defaultis a string, it is displayed even ifdefaultisNone. :issue:1732click.get_terminal_size()is deprecated and will be removed in8.1. Use :func:
shutil.get_terminal_sizeinstead. :issue:1736Control the location of the temporary directory created by
CLIRunner.isolated_filesystemby passingtemp_dir. A customdirectory will not be removed automatically. :issue:
395click.confirm()will prompt until input is given if called withdefault=None. :issue:1381Option prompts validate the value with the option's callback in
addition to its type. :issue:
457confirmation_promptcan be set to a custom string. :issue:723Allow styled output in Jupyter on Windows. :issue:
1271style()supports thestrikethrough,italic, andoverlinestyles. :issue:805, 1821Multiline marker is removed from short help text. :issue:
1597Restore progress bar behavior of echoing only the label if the file
is not a TTY. :issue:
1138Progress bar output is shown even if execution time is less than 0.5
seconds. :issue:
1648Progress bar
item_show_funcshows the current item, not theprevious item. :issue:
1353The
Pathparam type can be passedpath_type=pathlib.Pathtoreturn a path object instead of a string. :issue:
405TypeErroris raised when parameter withmultiple=Trueornargs > 1has non-iterable default. :issue:1749Add a
pass_meta_keydecorator for passing a key fromContext.meta. This is useful for extensions usingmetatostore information. :issue:
1739Pathresolve_pathresolves symlinks on Windows Python < 3.8.:issue:
1813Command deprecation notice appears at the start of the help text, as
well as in the short help. The notice is not in all caps.
:issue:
1791When taking arguments from
sys.argvon Windows, glob patterns,user dir, and env vars are expanded. :issue:
1096Marked messages shown by the CLI with
gettext()to allowapplications to translate Click's built-in strings. :issue:
303Writing invalid characters to
stderrwhen using the test runnerdoes not raise a
UnicodeEncodeError. :issue:848Fix an issue where
readlinewould clear the entireprompt()line instead of only the input when pressing backspace. :issue:
665Add all kwargs passed to
Context.invoke()toctx.params.Fixes an inconsistency when nesting
Context.forward()calls.:issue:
1568The
MultiCommand.resultcallbackdecorator is renamed toresult_callback. The old name is deprecated. :issue:1160Fix issues with
CliRunneroutput when usingecho_stdin=True.:issue:
1101Fix a bug of
click.utils.make_default_short_helpfor which thereturned string could be as long as
max_width + 3. :issue:1849When defining a parameter,
defaultis validated withmultipleandnargs. More validation is done for values beingprocessed as well. :issue:
1806HelpFormatter.write_textuses the full line width when wrappingtext. :issue:
1871Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ 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 has been generated by Renovate Bot.