Skip to content

Update dependency cyclopts to v4 - #13

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/cyclopts-4.x
Open

Update dependency cyclopts to v4#13
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/cyclopts-4.x

Conversation

@renovate

@renovate renovate Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
cyclopts >=3.24,<4>=4.24,<5 age confidence

Release Notes

BrianPugh/cyclopts (cyclopts)

v4.24.0

Compare Source

Features

Bug Fixes

  • register field-name CLI options when pydantic validate_by_name is set by @​xyf5432 in #​909
  • Use module name for unnamed apps and drop duplicate root anchors when generating RST documentation by @​BrianPugh in #​912

Docs

  • Refresh Typer comparison pages against Typer 0.27.1 by @​BrianPugh in #​911
  • Document remapping metadata annotation styles via theme by @​BrianPugh in #​915
    • Note: color-management is much better handled in the upcoming v5.

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.23.3...v4.24.0

v4.23.3

Compare Source

Bug Fixes

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.23.2...v4.23.3

v4.23.2

Compare Source

What's Changed

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.23.1...v4.23.2

v4.23.1

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.23.0...v4.23.1

v4.23.0

Compare Source

Performing this as a minor release as it may break setups who rely on strict snapshot testing.

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.22.5...v4.23.0

v4.22.5

Compare Source

Bug Fixes

Various fixes around abstract collection types:

Full Changelog: BrianPugh/cyclopts@v4.22.4...v4.22.5

v4.22.4

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.22.3...v4.22.4

v4.22.3

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.22.2...v4.22.3

v4.22.2

Compare Source

Bug Fixes

  • Fix spurious MissingArgumentError for explicitly-supplied empty mappings by @​BrianPugh in #​871
  • Honor an attached =value on Parameter.count=True flags instead of silently dropping it by @​BrianPugh in #​872
  • Report a clean error when a config node expected to be a table is not by @​BrianPugh in #​873

Full Changelog: BrianPugh/cyclopts@v4.22.1...v4.22.2

v4.22.1

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.22.0...v4.22.1

v4.22.0

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.21.2...v4.22.0

v4.21.2

Compare Source

Bug Fixes
New Contributors

Full Changelog: BrianPugh/cyclopts@v4.21.1...v4.21.2

v4.21.1

Compare Source

Bug Fixes

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.21.0...v4.21.1

v4.21.0

Compare Source

Feature

  • Add Parameter.negative_alias to append extra names to a flag's negative form (e.g. a short -d) without dropping the generated --no-*/--empty-* names. Mirrors name/alias. By @​BrianPugh in #​859

Bug Fixes

  • Fix #857: a dataclass command with a default_factory field could raise a spurious "Input should be a valid list" validation error simply because pydantic was imported anywhere in the program. Factory defaults are now invoked during introspection, so the produced value (rather than the <factory> sentinel) is used as the default and shown in help text — consistent across dataclass, attrs, and pydantic. By @​BrianPugh in #​858

Full Changelog: BrianPugh/cyclopts@v4.20.0...v4.21.0

v4.20.0

Compare Source

Features

Bug Fixes

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.19.0...v4.20.0

v4.19.0

Compare Source

Features

  • New Attribute: Parameter.short_alias to automatically generate short aliases for parameters. by @​mgielda in #​831
  • Add ArgumentCollection.filter_by(missing=...) for required/conditionally-required fields. by @​BrianPugh in #​840

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.18.0...v4.19.0

v4.18.0

Compare Source

Features

  • Added native slice support by @​BrianPugh in #​835
    • slice type-hints are now properly handled.
    • Added cyclopts.validators.Slice
    • Added cyclopts.types.NonEmptySlice convenience type.

Bug Fixes

  • Fix dropped Parameter metadata in nested Annotated/Optional/NewType types by @​BrianPugh in #​838

Full Changelog: BrianPugh/cyclopts@v4.17.0...v4.18.0

v4.17.0

Compare Source

Features & Bug Fixes

Publishing

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.16.1...v4.17.0

v4.16.1

Compare Source

Bug Fixes

Misc

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.16.0...v4.16.1

v4.16.0

Compare Source

Features

  • Return-value objects can now declare their own exit code by defining a __cyclopts_returncode__ method, which is honored by all built-in result_action handlers. Custom result_action callables can opt in via the new cyclopts.resolve_returncode helper. By @​BrianPugh in #​818
  • PEP 692 support: when **kwargs is annotated as Unpack[SomeTypedDict], the TypedDict's fields are promoted to top-level CLI options instead of the generic --[KEYWORD] catch-all. Per-field Required / NotRequired markers are respected independently of the parent kwargs argument. By @​BrianPugh in #​819
  • CycloptsError.msg now accepts a rich.Text instance. Cyclopts' error-message style palette is exposed as cyclopts.exceptions.STYLE_OFFENDING_VALUE, STYLE_NAME, STYLE_VALID_CHOICE, STYLE_SUGGESTION, and STYLE_SOURCE . By @​BrianPugh in #​814

Full Changelog: BrianPugh/cyclopts@v4.15.0...v4.16.0

v4.15.0

Compare Source

Features

  • AddedApp.synonym, which declares alternate command name(s) that trigger a "Did you mean..." suggestion without registering the command under those names. Useful when a user types a semantically-equivalent word (e.g. remove vs uninstall) that the built-in fuzzy matcher would miss because the words aren't spelled similarly. Accepts a single str or an iterable of strings. Synonyms are not runnable and are hidden from --help.
    @app.command(synonym=["remove", "rm"])
    def uninstall(name: str): ...
    $ my-script remove mypackage
    Unknown command "remove". Did you mean "uninstall"? Available commands: uninstall.
    If multiple commands declare the same synonym, all matching commands are suggested (Did you mean "uninstall" or "purge"?).
    By @​BrianPugh in #​815

Full Changelog: BrianPugh/cyclopts@v4.14.1...v4.15.0

v4.14.1

Compare Source

What's Changed

Full Changelog: BrianPugh/cyclopts@v4.14.0...v4.14.1

v4.14.0

Compare Source

What's Changed

  • Increase rich-rst version constraint upper-bound from <2.0.0 to <3.0.0 by @​germa89 in #​810

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.13.0...v4.14.0

v4.13.0

Compare Source

Features

Full Changelog: BrianPugh/cyclopts@v4.12.0...v4.13.0

v4.12.0

Compare Source

Features

Full Changelog: BrianPugh/cyclopts@v4.11.2...v4.12.0

v4.11.2

Compare Source

Bug Fixes

  • Fix _should_attempt_json_list for detecting list[str] | None and Annotated annotations by @​BrianPugh in #​800

Full Changelog: BrianPugh/cyclopts@v4.11.1...v4.11.2

v4.11.1

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.11.0...v4.11.1

v4.11.0

Compare Source

Features

Bug Fixes

Misc Internal

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.10.2...v4.11.0

v4.10.2

Compare Source

Features

  • Convenience Types:
    • NormFloat - A float in the range [0, 1]
    • SignedNormFloat - A float in the range [-1, 1]
    • PercentInt - An int in the range [0, 100]
    • By @​BrianPugh in #​778

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.10.1...v4.10.2

v4.10.1

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.10.0...v4.10.1

v4.10.0

Compare Source

Features

  • New App.error_formatter field to control out CycloptsError are displayed. The formatter receives a CycloptsError and returns any rich-printable object, replacing the default CycloptsPanel. Can be set at app creation or passed as a runtime override to parse_args / __call__ / run_async. by @​BrianPugh in #​771

    By default (without error_formatter), errors are displayed in a Rich panel:

    $ my-app foo
    ╭─ Error ─────────────────────────────────────────────────╮
    │ Invalid value "foo" for "VALUE": unable to convert      │
    │ "foo" into int.                                         │
    ╰─────────────────────────────────────────────────────────╯
    

    With a custom formatter, you can simplify or restyle the output:

    from cyclopts import App, CycloptsError
    
    def my_error_formatter(e: CycloptsError):
        return f"[bold red]error:[/bold red] {e}"
    
    app = App(error_formatter=my_error_formatter)
    
    @app.default
    def main(value: int):
        pass
    
    app()
    $ my-app foo
    error: Invalid value "foo" for "VALUE": unable to convert "foo" into int.

Full Changelog: BrianPugh/cyclopts@v4.9.0...v4.10.0

v4.9.0

Compare Source

Features

  • Parameter.consume_multiple now accepts int or tuple[int, int] for min/max element bounds.

    • An int sets a minimum (e.g. consume_multiple=2 requires at least 2 values).
    • A tuple sets both bounds (e.g. consume_multiple=(1, 3) requires 1–3 values).
    • Violations raise ConsumeMultipleError.
    # Require 1–3 space-separated values: --files a.txt b.txt c.txt
    files: Annotated[list[str], Parameter(consume_multiple=(1, 3))]

    By @​BrianPugh in #​764

  • New field Parameter.allow_repeating controls whether an option can be specified multiple times.

    • False raises RepeatArgumentError on repeat (useful with consume_multiple).
    • True allows repeats for any type; scalars use last-wins semantics.
    • None (default) preserves existing behavior: lists accumulate, scalars error.
    # Allow --files a b c, but not --files a --files b
    files: Annotated[list[str], Parameter(consume_multiple=True, allow_repeating=False)]
    # Last value wins: --color red --color blue → "blue"
    color: Annotated[str, Parameter(allow_repeating=True)]

    By @​BrianPugh in #​768

  • New field App.help_prologue displays text before the "Usage" line in help output.
    Inherited by subcommands; override per-command or set to "" to disable.

    app = App(help_prologue="myapp v1.0.0 — https://example.com")

    By @​tahv in #​769

Bug Fixes

  • Positional-only list parameters no longer consume tokens that appear after interleaved keyword arguments. a b --bar 8 d now correctly errors instead of silently assigning d to the positional list. By @​BrianPugh in #​766

Other

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.8.0...v4.9.0

v4.8.0

Compare Source

Features

Lazy Loading --help improvements.

Previously, running --help on a parent command would import and resolve all lazy child commands, negating much of the startup-time benefits. Now, parent --help displays lazy commands without triggering any imports.

To show descriptions for lazy commands in --help output, provide help= at registration time:

app.command("myapp.commands:deploy", help="Deploy the application.")

Other metadata (group=, show=, sort_key=) can also be provided at registration time and will be used for help display without resolving the command.

Lazy commands are now only resolved when:

  • The specific command is executed
  • The specific command's own --help is requested (e.g., myapp deploy --help)
  • The command is accessed directly via app["command_name"]

Thanks to @​zzstoatzz for the initial contribution in #​757.

Full Changelog: BrianPugh/cyclopts@v4.7.0...v4.8.0

v4.7.0

Compare Source

Features

  • Better "just works" shell-completion install location for oh-my-zsh users. By @​BrianPugh in #​758

Bug Fixes

  • Fix shell-completion for nested inner annotations (e.g. list[ExistingFile]). by @​BrianPugh in #​760

Full Changelog: BrianPugh/cyclopts@v4.6.0...v4.7.0

v4.6.0

Compare Source

Features

  • Added Parameter.requires_equals. When enabled, values for keywords must be provided by an =. For example, --foo=bar. --foo bar would raise an error telling the user to use a =. Defaults to False (same behavior as before). by @​BrianPugh in #​751

Full Changelog: BrianPugh/cyclopts@v4.5.4...v4.6.0

v4.5.4

Compare Source

Bug Fixes

  • Fix short-flag deduplication logic. Previously if 2 same-letter flags were provided (e.g. -n and -N), only -n would be displayed on the help page. Does not impact actual value parsing. By @​BrianPugh in #​748

Docs

Full Changelog: BrianPugh/cyclopts@v4.5.3...v4.5.4

v4.5.3

Compare Source

Bug Fixes

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.5.2...v4.5.3

v4.5.2

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.5.1...v4.5.2

v4.5.1

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.5.0...v4.5.1

v4.5.0

Compare Source

Features

  • Introduces cyclopts.types.StdioPath. This type subclasses pathlib.Path. If the special string - is supplied, then the object will read/write to stdin/stdout. Only available on python >=3.12 by @​BrianPugh in #​737

Full Changelog: BrianPugh/cyclopts@v4.4.6...v4.5.0

v4.4.6

Compare Source

What's Changed
  • Bugfix: Check __cyclopts__ (from using @Parameter decorator on a class) after unwrapping Annotated by @​BrianPugh in #​736

Full Changelog: BrianPugh/cyclopts@v4.4.5...v4.4.6

v4.4.5

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.4.4...v4.4.5

v4.4.4

Compare Source

Bug Fixes

Special Thanks to @​AntoninRousset for very clear and organized bug reporting with minimal-working examples!

Full Changelog: BrianPugh/cyclopts@v4.4.3...v4.4.4

v4.4.3

Compare Source

Bug Fixes
  • Place positive short flags after positive options, place negative short flags after negative options. By @​BrianPugh in #​721

    Example python code:

    @app.default
    def foo(dry_run: Annotated[bool, Parameter(alias=["-d"])] = False):
        ...

    Before:

    --dry-run --no-dry-run -d  Enable dry run mode. [default: False]
    

    After:

    --dry-run -d --no-dry-run  Enable dry run mode. [default: False]
    

Full Changelog: BrianPugh/cyclopts@v4.4.2...v4.4.3

v4.4.2

Compare Source

Bug Fixes
  • Fix erroneously fuzzy-matching command "version" to "--version" in v4 by @​BrianPugh in #​719
    • The bug matching "version" to "--version" was originally introduced in v4.2.0

Full Changelog: BrianPugh/cyclopts@v4.4.1...v4.4.2

v4.4.1

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.4.0...v4.4.1

v4.4.0

Compare Source

Features

  • Parameter.parse now accepts regex strings to filter which parameters are parsed. (#​705)
    • e.g. Parameter(parse="^(?!_)") — ignore "private" parameters starting with _
  • Experimental MkDocs documentation generation plugin. (#​621)
  • Various Sphinx plugin improvements.

UI Improvements

  • Command aliases now display with parentheses for clarity. (#​706)
    • greet (g, greet-alias) instead of greet g greet-alias

Bug Fixes

  • Fixed parsing of double-digit negative numbers. (#​708)
  • Fixed lazy-loaded subcommands being eagerly imported when resolving Group objects. (#​710)

Full Changelog: BrianPugh/cyclopts@v4.3.0...v4.4.0

v4.3.0

Compare Source

Features

  • Introduce Paramter.n_tokens to control number of tokens consumed/provided to custom converters. by @​BrianPugh in #​695
    • converter functions can now also be directly decorated with @Parameter(...).
    • When decorating a class, Parameter.converter can now be a string indicating a forward-reference to a classmethod in the class.

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.2.5...v4.3.0

v4.2.5

Compare Source

Bug Fixes

Full Changelog: BrianPugh/cyclopts@v4.2.4...v4.2.5

v4.2.4

Compare Source

Features

  • More ergonomic ArgumentCollection.__contains__ that allows for string-lookup of arguments. by @​BrianPugh in #​689

Bug Fixes

  • Fix finding docstrings for classes with inheritance.
  • Fix snake_case negative args not being accepted. by @​BrianPugh in #​694

Full Changelog: BrianPugh/cyclopts@v4.2.3...v4.2.4

v4.2.3

Compare Source

Bug Fixes

  • Improve datetime converter to use datetime.fromisoformat by @​BrianPugh in #​687
    • Now correctly handles cases like 2025-11-11T13Z (no minute, second or fractional second).

Full Changelog: BrianPugh/cyclopts@v4.2.2...v4.2.3

v4.2.2

Compare Source

Bug Fixes

Docs

Full Changelog: BrianPugh/cyclopts@v4.2.1...v4.2.2

v4.2.1

Compare Source

Bug Fixes

  • Resolve TypeAliasType (python >=3.12). by @​BrianPugh in #​670
    • Fixes annotated parameter resolution for syntax like:
      type Foo = Annotated[int, cyclopts.Parameter(alias=-f”)]

Full Changelog: BrianPugh/cyclopts@v4.2.0...v4.2.1

v4.2.0

Compare Source

Features

Bug Fixes

Internal

Full Changelog: BrianPugh/cyclopts@v4.1.0...v4.2.0

v4.1.0

Compare Source

Features

  • Support pydantic Secret-types (SecretStr, SecretBytes, etc) by @​BrianPugh in #​620

  • Parameter.count for int counting-flags (e.g., verbosity -vvv). by @​BrianPugh in #​622

    from cyclopts import Parameter
    
    def main(verbose: Annotated[int, Parameter(alias="-v", count=True)] = 0):
        print(f"Verbosity level: {verbose}")  # -vvv → 3
  • Add App.help_epilogue, which prints a message at the bottom of the app's help-page. by @​BrianPugh in #​628

    app = App(help_epilogue="For more info, visit: https://cyclopts.readthedocs.io")
    
    @app.default
    def main(name: str):
        """Greet someone."""
        print(f"Hello {name}")
    
    # ╭─ Parameters ───────────────────────────────╮
    # │ *  NAME  [required]                        │
    # ╰────────────────────────────────────────────╯
    #
    # For more info, visit: https://cyclopts.readthedocs.io
  • Add help from dataclass/attrs metadata to the resolution hierarchy. by @​BrianPugh in #​642

    from dataclasses import dataclass, field
    
    @dataclass
    class Config:
        port: int = field(default=8080, metadata={"help": "Server port"})
  • Add GNU-style combined short options support by @​BrianPugh in #​639

    from typing import Annotated
    from cyclopts import Parameter
    
    def main(
        verbose: Annotated[bool, Parameter(alias="-v")],
        user: Annotated[str, Parameter(alias="-u")],
    ):
        pass
    
    # -v -uroot         → verbose=True, user="root"
    # -vuroot           → verbose=True, user="root"  (GNU-style combined)
    # -vu root          → verbose=True, user="root"
  • More powerful ArgumentCollection.__getitem__ to support looking up by parameter name by @​isoschiz in #​635

    arg = argument_collection["param_name"]  # Lookup by parameter name

Bug Fixes

  • Resolve the default version to the nearest explicitly set App.version value instead of root-app version value. by @​BrianPugh in #​632
  • Have MutuallyExclusive group validator accurately report the user-specified option name instead of the first positive name. by @​BrianPugh in #​634
  • Have MissingArgumentError accurately report the user-specified option name instead of the first positive name. by @​BrianPugh in #​638
  • Fix the negative-flag showing up twice for Optional[bool] in the help-page. by @​BrianPugh in #​633
  • Fix incorrect deleting of help/version flag commands when overwriting their respective flag attributes. by @​BrianPugh in #​644
  • Fix unexpected exception when both --help and --version are passed to a subcommand. --help takes precedence. by @​BrianPugh in #​650
  • Allow positional elements of kw-only dataclass. by @​BrianPugh in #​651
  • Fix cyclopts.__version__ not being updated (due to uv migration). by @​BrianPugh in #​657
  • Add parse=False to App.version_print handlers. by @​BrianPugh in #​656
  • Fix kw-only dataclass object instantiation by @​BrianPugh in #​658
  • Misc (mostly internal) type hinting improvements by @​BrianPugh in #​659
  • Fix config command filtering logic. by @​BrianPugh in #​660

Special thanks to @​isoschiz for thorough testing and bug reporting!

Documentation

New Contributors

Full Changelog: BrianPugh/cyclopts@v4.0.0...v4.1.0

v4.0.0

Compare Source

Cyclopts v4 represents a big feature update that makes it a no-compromise CLI python framework.

While Cyclopts v4 has a few breaking changes that generally make applications cleaner/terser/more intuitive, most shouldn't severely impact applications in the wild. This section lists the changes from most impactful to least.

Breaking Features / Breaking Changes / Migration

  • The default help/version formatting has been changed from RestructuredText to Markdown.

    • To keep old behavior, set App(help_format="restructuredtext").
  • Default behavior of App.__call__ and App.run_async return value has changed

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, 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 was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot requested a review from woutervh as a code owner September 3, 2026 21:12
@renovate

renovate Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: uv.lock
Command failed: uv lock --upgrade-package cyclopts
Downloading cpython-3.9.25-linux-x86_64-gnu (download) (27.0MiB)
 Downloaded cpython-3.9.25-linux-x86_64-gnu (download)
Using CPython 3.9.25
  × No solution found when resolving dependencies for split (markers:
  │ python_full_version >= '3.14'):
  ╰─▶ Because only the following versions of cyclopts are available:
          cyclopts<4.24
          cyclopts>5
      and your project depends on cyclopts>=4.24,<5, we can conclude that your
      project's requirements are unsatisfiable.

hint: While the active Python version is 3.9, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`.
hint: `cyclopts` was filtered by `exclude-newer` to only include packages uploaded before 2026-08-24T21:12:22.619360707Z. The latest version satisfying the requirement is v4.24.0, published at 2026-09-03T13:02:11.96Z. Consider using `exclude-newer-package` to override the cutoff for this package.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants