NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1589 most downloaded on PyPI
CLI interfaces & config objects, from types
Last release 1 months ago
23 Aug 2026
Release timing varies
gaps range from 2 weeks to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
4 years old
125 releases · first in 2022
One column per quarter.
Fix CI failures from linter updates by @brentyi in #488
Full Changelog: v1.0.15...v1.0.16
Test coverage, improved arg consumption for hyphen-prefixed choices by @brentyi in #481
choices by @brentyi in #481__tyro_dummy_inner__ wrapper name in argument error messages by @e3rd in #480Full Changelog: v1.0.14...v1.0.15
Add typing.TypeForm overloads to tyro.cli() signature by @brentyi in #461
typing.TypeForm overloads to tyro.cli() signature by @brentyi in #461timedelta, improve error message for fixed arguments by @brentyi in #466extras.SubcommandApp, configure aliases and defaults in conf.subcommand() by @brentyi in #471is_default in subcommands by @brentyi in #473tyro.conf.ShowSourcePath, PYTHON_TYRO_GLOBAL_MARKERS env variable by @brentyi in #472tyro._errors, experimental hooks by @e3rd in #478Full Changelog: v1.0.13...v1.0.14
Fix invalid flag edge case after nargs in #458
feat(extras): add Verbosity type for -v/-q count flags by @jRimbault in #445
Full Changelog: v1.0.11...v1.0.12
Add docs link to pyproject.toml by @DeflateAwning in #448
nargs edge cases for args with automatically swapped delimeters, counter args by @brentyi in #450Full Changelog: v1.0.10...v1.0.11
Fix tyro.conf.Positional for *args by @brentyi in #441
tyro.conf.Positional for *args by @brentyi in #441nargs consumption + positional argument edge cases by @brentyi in #443tyro.conf.arg(): clarify prefix_name=False, document name="" by @brentyi in #442Full Changelog: v1.0.9...v1.0.10
The primary change is clearer behavior for nested unions. See the new nested subcommands example.
The primary change is clearer behavior for nested unions. See the new nested subcommands example.
prefix_name flag to subcommands by @brentyi in #436Factory(takes_self=True) by @brentyi in #437nargs consumption by @brentyi in #438Full Changelog: v1.0.7...v1.0.9
Fix numeric tower, subcommand matching edge cases by @brentyi in #435
Full Changelog: v1.0.7...v1.0.8
Skip NN dependencies for Windows tests by @brentyi in #432
compact_help=False by @loemraw in #430Full Changelog: v1.0.6...v1.0.7
Fix Windows bugs + build, add Windows test runner by @brentyi in https://github.com/brentyi/tyro/pull/426
metavar=None by @brentyi in https://github.com/brentyi/tyro/pull/427Full Changelog: https://github.com/brentyi/tyro/compare/v1.0.5...v1.0.6
Fix --flag / --no-flag pair edge cases for aliases by @brentyi in https://github.com/brentyi/tyro/pull/420
--flag / --no-flag pair edge cases for aliases by @brentyi in https://github.com/brentyi/tyro/pull/420Full Changelog: https://github.com/brentyi/tyro/compare/v1.0.4...v1.0.5
Ignore tyro.conf.UseAppendAction for positional arguments by @brentyi in https://github.com/brentyi/tyro/pull/418
tyro.conf.UseAppendAction for positional arguments by @brentyi in https://github.com/brentyi/tyro/pull/418Full Changelog: https://github.com/brentyi/tyro/compare/v1.0.3...v1.0.4
Fully switch dev workflows to uv by @brentyi in https://github.com/brentyi/tyro/pull/413
uv by @brentyi in https://github.com/brentyi/tyro/pull/413dataclasses.field(init=False) for frozen dataclasses by @brentyi in https://github.com/brentyi/tyro/pull/416Full Changelog: https://github.com/brentyi/tyro/compare/v1.0.2...v1.0.3
Fix nested arguments in completion generation + test by @brentyi in https://github.com/brentyi/tyro/pull/409
typing.Unpack by @brentyi in https://github.com/brentyi/tyro/pull/410-- separator in new backend, add tests by @brentyi in https://github.com/brentyi/tyro/pull/412Full Changelog: https://github.com/brentyi/tyro/compare/v1.0.1...v1.0.2
Fixed minor helptext regressions. Thanks @jedie and @kevinddchen for reporting!
Fixed minor helptext regressions. Thanks @jedie and @kevinddchen for reporting!
--help is specified by @brentyi in https://github.com/brentyi/tyro/pull/404Full Changelog: https://github.com/brentyi/tyro/compare/v1.0.0...v1.0.1
There are no (intentional) breaking changes.
First stable release 👍
tyro==1.0.0 introduces a rewritten parsing and helptext generation backend, which:
There are no (intentional) breaking changes.
We were previously bottlenecked by an argparse intermediate. The new parsing backend is more efficient:
<img width="1785" height="511" alt="image" src="https://github.com/user-attachments/assets/4682d519-4660-4084-84a9-52e0dd496405" />
The final plot shows a previously combinatorial edge case. Benchmarks are run in Python 3.12 on an M4 Macbook Air; code can be found in the benchmark/ directory.
Reduced dependencies ⇒ faster installs and imports:
<img width="1785" height="249" alt="image" src="https://github.com/user-attachments/assets/0b0dc43f-369f-4f35-90c0-a3b64c48e90e" />
The new parsing backend resolves long-standing subcommand limitations; relevant issues include #60, #61, #89, #132, #152, #281, #298, #316, #329, #346, and #354.
Subcommand ordering is now more flexible. In this example, the dataset type previously needed to be specified before the optimizer type:
def train(
dataset: Mnist | ImageNet = Mnist(),
optimizer: Adam | Sgd = Adam(),
) -> None:
...
tyro.cli(train)
Type selection is now order-agnostic.
Argument ordering can be made more flexible. tyro.conf.CascadeSubcommandArgs enables (i) implicit subcommand selection and (ii) argument cascading, which reduces sensitivity to argument ordering. This can make a big UX difference; see docs for notes!
tyro.conf.UsePythonSyntaxForLiteralCollections: improves compatibility with wandb sweeps.tyro.conf.NewSubcommandForDefaults: create a new subcommand for the RHS of x: StructA | StructB = ..., instead of matching the default to a member of the union.upath.UPathtyro.extras.get_parser() relies on the legacy, argparse-based parsing backend. It may be removed in a future release.v0.9.35)return_unknown_args with equal sign-separated flags by @brentyi in https://github.com/brentyi/tyro/pull/364tyro.conf.CascadeSubcommandArgs for more flexible subcommand args, implicit subcommand selection by @brentyi in https://github.com/brentyi/tyro/pull/366field:none instead of field:None for subcommands + backwards compatibility shim by @brentyi in https://github.com/brentyi/tyro/pull/368CascadeSubcommandArgs: support + test for implicit subcommands anywhere on frontier, instead of just current parser by @brentyi in https://github.com/brentyi/tyro/pull/369tyro.conf.UsePythonSyntaxForCollections to improve UX for wandb sweeps, nested collections by @brentyi in https://github.com/brentyi/tyro/pull/370KeyError for unrecognized arguments when CascadeSubcommandArgs is set by @brentyi in https://github.com/brentyi/tyro/pull/372subcommand_name and subcommand-name interchangeable by @brentyi in https://github.com/brentyi/tyro/pull/373UsePythonSyntaxForCollections => UsePythonSyntaxForLiteralCollections by @brentyi in https://github.com/brentyi/tyro/pull/376tyro.MISSING_NONPROP, clean up docs by @brentyi in https://github.com/brentyi/tyro/pull/379tyro.conf.NewSubcommandForDefaults by @brentyi in https://github.com/brentyi/tyro/pull/394__eq__ operator by @brentyi in https://github.com/brentyi/tyro/pull/396tyro.extras.get_parser(), update README/docs by @brentyi in https://github.com/brentyi/tyro/pull/397upath.UPath by @brentyi in https://github.com/brentyi/tyro/pull/398*args and **kwargs by @brentyi in https://github.com/brentyi/tyro/pull/399Full Changelog: https://github.com/brentyi/tyro/compare/v0.0.4...v1.0.0
Helptext + error message refinements by @brentyi in https://github.com/brentyi/tyro/pull/384
Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a5...v0.10.0a6
Export tyro.MISSING_NONPROP, clean up docs by @brentyi in https://github.com/brentyi/tyro/pull/379
tyro.MISSING_NONPROP, clean up docs by @brentyi in https://github.com/brentyi/tyro/pull/379Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a4...v0.10.0a5
fix: empty metavar trailing space by @e3rd in https://github.com/brentyi/tyro/pull/362
tyro.conf.UsePythonSyntaxForCollections to improve UX for wandb sweeps, nested collections by @brentyi in https://github.com/brentyi/tyro/pull/370KeyError for unrecognized arguments when CascadeSubcommandArgs is set by @brentyi in https://github.com/brentyi/tyro/pull/372subcommand_name and subcommand-name interchangeable by @brentyi in https://github.com/brentyi/tyro/pull/373UsePythonSyntaxForCollections => UsePythonSyntaxForLiteralCollections by @brentyi in https://github.com/brentyi/tyro/pull/376Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a3...v0.10.0a4
CascadeSubcommandArgs: support + test for implicit subcommands anywhere on frontier, instead of just current parser by @brentyi in https://github.com/
CascadeSubcommandArgs: support + test for implicit subcommands anywhere on frontier, instead of just current parser by @brentyi in https://github.com/brentyi/tyro/pull/369Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a2...v0.10.0a3
Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a1...v0.10.0a2
Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a1...v0.10.0a2
Test + fix for return_unknown_args with equal sign-separated flags by @brentyi in https://github.com/brentyi/tyro/pull/364
return_unknown_args with equal sign-separated flags by @brentyi in https://github.com/brentyi/tyro/pull/364tyro.conf.CascadeSubcommandArgs for more flexible subcommand args, implicit subcommand selection by @brentyi in https://github.com/brentyi/tyro/pull/366field:none instead of field:None for subcommands + backwards compatibility shim by @brentyi in https://github.com/brentyi/tyro/pull/368Full Changelog: https://github.com/brentyi/tyro/compare/v0.10.0a0...v0.10.0a1
Direct subparser nesting + tests by @brentyi in https://github.com/brentyi/tyro/pull/360
Alpha release for v0.10.0.
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.35...v0.10.0a0
Simplify logic for handling None in subcommands by @brentyi in https://github.com/brentyi/tyro/pull/359
None in subcommands by @brentyi in https://github.com/brentyi/tyro/pull/359Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.34...v0.9.35
Fix eval_type_backport namespace resolution for Pydantic dataclasses by @brentyi in https://github.com/brentyi/tyro/pull/358
eval_type_backport namespace resolution for Pydantic dataclasses by @brentyi in https://github.com/brentyi/tyro/pull/358None types with metadata by @brentyi in https://github.com/brentyi/tyro/pull/357Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.33...v0.9.34
Python 3.14 by @brentyi in https://github.com/brentyi/tyro/pull/355
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.32...v0.9.33
Update docs, tests to clarify current mutex group behavior by @brentyi in https://github.com/brentyi/tyro/pull/345
default= kwarg in TypeVar, custom warning category by @brentyi in https://github.com/brentyi/tyro/pull/344tyro.conf.AvoidSubcommands: allow unsupported annotations in unused members of union types by @brentyi in https://github.com/brentyi/tyro/pull/347Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.31...v0.9.32
Fix regression for tuples with mixed primitives by @brentyi in https://github.com/brentyi/tyro/pull/341
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.30...v0.9.31
Hide --help tip in error messages when add_help=False by @brentyi in https://github.com/brentyi/tyro/pull/338
add_help=False by @brentyi in https://github.com/brentyi/tyro/pull/338tyro.conf.create_mutex_group(), tyro.conf.DisallowNone) by @brentyi in https://github.com/brentyi/tyro/pull/339Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.29...v0.9.30
More robust typing.* identity checks; fix edge case for generic Protocol subclasses by @brentyi in https://github.com/brentyi/tyro/pull/336
typing.* identity checks; fix edge case for generic Protocol subclasses by @brentyi in https://github.com/brentyi/tyro/pull/336add_help: bool argument, tests by @brentyi in https://github.com/brentyi/tyro/pull/337Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.28...v0.9.29
Fix + tests for inheritance regression when tyro.conf.configure() is used by @brentyi in https://github.com/brentyi/tyro/pull/332
tyro.conf.configure() is used by @brentyi in https://github.com/brentyi/tyro/pull/332Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.27...v0.9.28
Fix type parameter forwarding for inherited generics by @brentyi in https://github.com/brentyi/tyro/pull/328
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.26...v0.9.27
Fix metadata regression for Pydantic types by @brentyi in https://github.com/brentyi/tyro/pull/322
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.25...v0.9.26
Fix argument length limit from recursive backtracking by @brentyi in https://github.com/brentyi/tyro/pull/319
tyro.conf.arg and tyro.conf.subcommand by @brentyi in https://github.com/brentyi/tyro/pull/320Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.24...v0.9.25
Fix collections.abc.Callable parsing by @brentyi in https://github.com/brentyi/tyro/pull/315
collections.abc.Callable parsing by @brentyi in https://github.com/brentyi/tyro/pull/315Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.23...v0.9.24
Support variable-length inner types in list[T], tuple[T, ...], dict[K, V], etc by @brentyi in https://github.com/brentyi/tyro/pull/307
list[T], tuple[T, ...], dict[K, V], etc by @brentyi in https://github.com/brentyi/tyro/pull/307Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.22...v0.9.23
Fix ConsolidateSubcommandArgs with nested dataclasses, allow length-0 input to config= by @brentyi in https://github.com/brentyi/tyro/pull/304
config= by @brentyi in https://github.com/brentyi/tyro/pull/304Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.21...v0.9.22
Fix handling of ellipsis in Callable type annotations by @brentyi in https://github.com/brentyi/tyro/pull/300
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.20...v0.9.21
Support for collections.namedtuple by @brentyi in https://github.com/brentyi/tyro/pull/295
collections.namedtuple by @brentyi in https://github.com/brentyi/tyro/pull/295msgspec by @apoorvkh in https://github.com/brentyi/tyro/pull/293Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.19...v0.9.20
Development: Push neural net packages and NumPy into a separate optional dependency group to reduce wait on cold setup. by @emcd in https://github.com
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.18...v0.9.19
Add support for ml_collections.FrozenConfigDict by @brentyi in https://github.com/brentyi/tyro/pull/272
Any by @brentyi in https://github.com/brentyi/tyro/pull/285Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.17...v0.9.18
Consistency improvements for tyro.MISSING by @brentyi in https://github.com/brentyi/tyro/pull/264
tyro.MISSING by @brentyi in https://github.com/brentyi/tyro/pull/264Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.16...v0.9.17
Test + support custom constructor edge case by @brentyi in https://github.com/brentyi/tyro/pull/259
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.15...v0.9.16
Consistency improvements for tyro.extras helpers and fixed an edge case for custom constructors.
Consistency improvements for tyro.extras helpers and fixed an edge case for custom constructors.
extras.overridable_config_cli and extras.subcommand_type_from_defaults() by @brentyi in https://github.com/brentyi/tyro/pull/255tyro.extras subcommand helpers by @brentyi in https://github.com/brentyi/tyro/pull/256Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.14...v0.9.15
New configuration flags: tyro.conf.FlagCreatePairsOff and tyro.conf.HelptextFromCommentsOff.
The release contains:
tyro.conf.FlagCreatePairsOff and tyro.conf.HelptextFromCommentsOff.tyro.conf.UseAppendAction + abstract Sequence annotations by @brentyi in https://github.com/brentyi/tyro/pull/248Unknown types at API boundaries by @brentyi in https://github.com/brentyi/tyro/pull/249Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.13...v0.9.14
Correct MRO traversal for inherited fields in https://github.com/brentyi/tyro/pull/241
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.12...v0.9.13
Fix attribute inheritance regression (introduced in 0.9.9) in https://github.com/brentyi/tyro/pull/240
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.11...v0.9.12
Partial support for type parameters in class methods in https://github.com/brentyi/tyro/pull/238
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.10...v0.9.11
Support methods bound to generic classes in https://github.com/brentyi/tyro/pull/234
__type_params__ bug in Python 3.12.0 in https://github.com/brentyi/tyro/pull/236Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.9...v0.9.10
Fix inheritance edge cases for type parameter resolution in https://github.com/brentyi/tyro/pull/230
tyro.conf.Suppress behavior in unions in https://github.com/brentyi/tyro/pull/231Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.8...v0.9.9
Fix list[dict] regression in https://github.com/brentyi/tyro/pull/228
list[dict] regression in https://github.com/brentyi/tyro/pull/228Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.7...v0.9.8
Consistent behavior for implicit and explicit selection of optional subcommands by @brentyi in https://github.com/brentyi/tyro/pull/226
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.6...v0.9.7
Fix subcommand matcher when tyro.conf.subcommand is used in https://github.com/brentyi/tyro/pull/223
tyro.conf.subcommand is used in https://github.com/brentyi/tyro/pull/223tyro.conf.ConsolidateSubcommandArgs in https://github.com/brentyi/tyro/pull/224Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.5...v0.9.6
Improve error messages when tyro.conf.arg() options are set in https://github.com/brentyi/tyro/pull/219
tyro.conf.Suppress, tyro.conf.AvoidSubcomands in https://github.com/brentyi/tyro/pull/220Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.4...v0.9.5
Support recursive argument suppression in https://github.com/brentyi/tyro/pull/217
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.3...v0.9.4
Fix edge cases for (nested) custom constructors in https://github.com/brentyi/tyro/pull/210
Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.2...v0.9.3
Apply use_underscores to decorator-based subcommand names in https://github.com/brentyi/tyro/pull/208
use_underscores to decorator-based subcommand names in https://github.com/brentyi/tyro/pull/208Full Changelog: https://github.com/brentyi/tyro/compare/v0.9.1...v0.9.2
Python 3.13 support, custom constructor API, and significant refactor of internals.
Full Changelog: https://github.com/brentyi/tyro/compare/v0.8.14...v0.9.1
Python 3.13 support, custom constructor API, and significant refactor of internals.
typing.Annotated workaround for pydantic v1 in https://github.com/brentyi/tyro/pull/187setuptools => hatchling in https://github.com/brentyi/tyro/pull/196Full Changelog: https://github.com/brentyi/tyro/compare/v0.8.14...v0.9.1
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →