Sourced from click's releases.
8.4.0
This is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.
We encourage everyone to upgrade. You can read more about our Version Support Policy on our website.
PyPI: https://pypi.org/project/click/8.4.0/ Changes: https://click.palletsprojects.com/page/changes/#version-8-4-0 Milestone https://github.com/pallets/click/milestone/30
ParamTypetyping improvements. #3371
- :class:
ParamTypeis now a generic abstract base class, parameterized by its converted value type.- :meth:
~ParamType.convertreturn types are narrowed on all concrete types (strfor :class:STRING,intfor :class:INT, etc.).- :meth:
~ParamType.to_info_dictreturns specific :class:~typing.TypedDictsubclasses instead ofdict[str, Any].- :class:
CompositeParamTypeand the number-range base are now generic with abstract methods.Refactor
convert_typeto extract type inference into a private_guess_typehelper, and add :func:typing.overloadsignatures. #3372
Parametertyping improvements. #2805
- :class:
Parameteris now an abstract base class, making explicit that it cannot be instantiated directly.- :attr:
Parameter.nameis nowstrinstead ofstr | None. Whenexpose_value=False, the name is set to""instead ofNone.- The
ctxparameter of :meth:Parameter.get_error_hintis now typed asContext | None, matching the runtime behavior.Split string values from
default_mapfor parameters withnargs > 1or :class:Tupletype, matching environment variable behavior. #2745 #3364Auto-detect
type=UNPROCESSEDforflag_valueof non-basic types (notstr,int,float, orbool), so programmer-provided Python objects like classes and enum members are passed through unchanged instead of being stringified. Previouslytype=click.UNPROCESSEDhad to be set explicitly. #2012 #3363The error hint now uses
Command.get_help_option_namesto pick non-shadowed help option names, soTry '... -h'no longer points to a subcommand option that shadows-h. All surviving names are shown (-h/--help). #2790 #3208Fix readline functionality on non-Windows platforms. Prompt text is now passed directly to readline instead of being printed separately, allowing proper backspace, line editing, and line wrapping behavior. #2968
... (truncated)
Sourced from click's changelog.
Version 8.4.0
Released 2026-05-17
:class:
ParamTypetyping improvements. :pr:3371
- :class:
ParamTypeis now a generic abstract base class, parameterized by its converted value type.- :meth:
~ParamType.convertreturn types are narrowed on all concrete types (strfor :class:STRING,intfor :class:INT, etc.).- :meth:
~ParamType.to_info_dictreturns specific :class:~typing.TypedDictsubclasses instead ofdict[str, Any].- :class:
CompositeParamTypeand the number-range base are now generic with abstract methods.Refactor
convert_typeto extract type inference into a private_guess_typehelper, and add :func:typing.overloadsignatures. :pr:3372:class:
Parametertyping improvements. :pr:2805
- :class:
Parameteris now an abstract base class, making explicit that it cannot be instantiated directly.- :attr:
Parameter.nameis nowstrinstead ofstr | None. Whenexpose_value=False, the name is set to""instead ofNone.- The
ctxparameter of :meth:Parameter.get_error_hintis now typed asContext | None, matching the runtime behavior.Split string values from
default_mapfor parameters withnargs > 1or :class:Tupletype, matching environment variable behavior. :issue:2745:pr:3364Auto-detect
type=UNPROCESSEDforflag_valueof non-basic types (notstr,int,float, orbool), so programmer-provided Python objects like classes and enum members are passed through unchanged instead of being stringified. Previouslytype=click.UNPROCESSEDhad to be set explicitly. :issue:2012:pr:3363The error hint now uses :meth:
Command.get_help_option_namesto pick non-shadowed help option names, soTry '... -h'no longer points to a subcommand option that shadows-h. All surviving names are shown (-h/--help). :issue:2790:pr:3208Fix readline functionality on non-Windows platforms. Prompt text is now passed directly to readline instead of being printed separately, allowing proper backspace, line editing, and line wrapping behavior. :issue:
2968:pr:2969Use :func:
os.startfileon Windows to open URLs in :func:open_url, replacing thestartbuilt-in which cannot be invoked withoutshell=True. :issue:3164:pr:3186Fix Fish shell completion errors when option help text contains newlines. :issue:
3043:pr:3126
... (truncated)
41f410f
Release 8.4.0e3e69e3
Add type annotations for instance attributes in utils (#3422)3bb230d
WIP: Fix HelpFormatter.write_usage producing spurious
characters (#3434)63274a7
click.get_pager_file: add tests (#1572
followup) (#3405)0551bf5
Fix HelpFormatter.write_usage producing spurious
charactersfc41aa1
Apply class-body annotations to KeepOpenFile for
consistencyb761eda
Skip some tests on Windows98302ac
Check PAGER usage, color preservation and edge-casesdbdae17
Fix documentation1aa2d53
Redesigned tests and get_pager_file branching to be more clear and not
set colorSourced from aiodns's changelog.
4.0.3
- Restore license metadata that was dropped during the
pyproject.tomlmigration in #244, so packaging tools again detect aiodns as MIT-licensed (#250).4.0.2
- Re-release of 4.0.1; the 4.0.1 wheel build failed because the release workflow still invoked
python setup.pyafter #244 removedsetup.py, so 4.0.1 never reached PyPI. The release workflow now usespython -m build(#248).4.0.1
- Fix
Future exception was never retrievedwhen pycares raisesAresErrorsynchronously, e.g. for malformed hostnames (#245, fixes #231)- Modernized package setup using
pyproject.tomlinstead ofsetup.py(#244)- Updated dependencies
- Bumped mypy from 1.19.1 to 2.1.0 (#236, #239, #241, #242)
- Bumped pytest from 9.0.2 to 9.0.3 (#237)
- Bumped pytest-cov from 7.0.0 to 7.1.0 (#232)
- Bumped dependabot/fetch-metadata from 2.4.0 to 3.1.0 (#227, #234, #240)
- Bumped actions/download-artifact from 7.0.0 to 8.0.1 (#228, #235)
- Bumped actions/upload-artifact from 6 to 7 (#229)
- Bumped codecov/codecov-action from 5 to 6 (#233)
ac5c746
Release 4.0.3 (#251)8de8773
Add license identifier to pyproject.toml (#250)a646228
Release 4.0.2 (#249)63d10ea
Document the release process and add scripts/release-notes.py (#247)ec0246d
Build release artifacts via python -m build (#248)c45edff
Release 4.0.1 (#246)7d436b2
Route synchronous pycares AresError through the returned future (#245)ddef062
modernize package setup using pyproject.toml file instead
of setup.py (#244)f2b385d
Bump mypy from 2.0.0 to 2.1.0 (#242)40d4bcc
Bump mypy from 1.20.2 to 2.0.0 (#241)