Cyclopts is a modern, easy-to-use command-line-interface library for
Python, based on type hints, with rich help output and intuitive
argument/sub-command resolution.
Provides
Requires
License
Apache-2.0
Changelog
* Tue Nov 03 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 5.3.3 (PyPI release 2026-11-02):
* Fix NewType nested in containers and unions not
converting to its underlying type, including enum
choices display
* Complete default-command positionals alongside
subcommands in bash/zsh/fish
* Tue Oct 27 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 5.3.2 (PyPI release 2026-10-27):
* Fix enum members in a Literal shown as Color.RED in help,
completion and errors instead of the name that parses
* No more crash on a nameless Flag value in a Literal
* Mon Oct 26 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 5.3.1 (PyPI release 2026-10-26):
* Respect explicit delimiters for path environment values
* Validate Parameter(name="*") behind a type alias at setup time
* Resolve subscripted generic type aliases
* Bind config values to a meta app's own parameters (regression
since 4.0.0)
* Fri Oct 23 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 5.3.0 (PyPI release 2026-10-22):
* Number validator supports Decimal and Fraction
* Empty config containers bind for dict, list, tuple, set and
dataclass parameters
* Config null rejected for types not allowing None; config arrays
rejected for single-value types
* dict[str, X] parameters accept a JSON object from the CLI or
an environment variable
* Unions with a class member (Foo | bool, Foo | dict) handle
keyed fields, bare flags and typed keys without silently
dropping unknown keys
* Faster startup and lower per-invocation overhead
* Many more fixes and improvements; see upstream's release
notes for the full list
* Wed Oct 07 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 5.2.0 (PyPI release 2026-10-06):
* Add PowerShell shell completion support
* Rename completion env var CYCLOPTS_COMPLETE_WORDS to
CYCLOPTS_COMPLETION_WORDS
* Thu Oct 01 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 5.1.1:
* Accept --flag=none on a bool | None annotation, so a tri-state
boolean can be set to None explicitly
* Wed Sep 30 2026 Martin Pluskal <mpluskal@suse.com>
- Update to version 5.1.0:
* Support bool union'd with other types: for hints like
"bool | list[str]", giving --x no value acts as a flag with
implicit value True, including negative --no-x forms
* Bad values on such unions now report the value member's
specific error instead of a generic one
* Support bool alongside an enum.Flag in a union (e.g.
"bool | MyFlag"); --x.<member> options can select a non-Flag
member
* Repeated flags whose implicit value is the whole value raise
RepeatArgumentError instead of mixing tokens
* Public App/decorator API and typing surface unchanged
- Spec: require python-rich-rst >= 2.0.1, upstream's declared
minimum (stale at 1.3.1 since the 5.0.0 packaging); drop
conditional tomli/typing_extensions requires (unused upstream
since 5.0.0, requires-python >= 3.11)
* Thu Sep 24 2026 Martin Pluskal <mpluskal@suse.com>
- Update to version 5.0.0 (major, intentionally breaking;
see upstream Migrating to v5 guide):
* Drop Python 3.10 support, remove fuzzy command
matching (names must match exactly), fallthrough
parsing changes
* No Factory consumers exist, so nothing breaks today
* Mon Sep 21 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 4.25.3:
* Fix nested JSON object parsing by routing JSON object tokens
through the Argument layer
* Recognise a JSON object token for types whose fields consume
all tokens
* Explain unhashable element types when converting to set or
frozenset
* Thu Sep 10 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 4.25.2:
* Reject NaN in numeric range validators
* Tue Sep 08 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 4.25.1:
* Interactive shell n