What’s supported

For minimum-boilerplate CLIs, tyro aims to maximize support of Python’s standard typing features.

As a partial list, inputs can be annotated with:

Types can also be placed and nested in various structures, such as:

What’s not supported

There are some limitations. We currently do not support:

  • Variable-length sequences over nested structures, unless a default is provided. For types like list[Dataclass], we require a default value to infer length from. The length of the corresponding field cannot be changed from the CLI interface.

  • Nesting variable-length sequences in other sequences. tuple[int, ...] and tuple[tuple[int, int, int], ...] are supported, as the variable-length sequence is the outermost type. However, tuple[tuple[int, ...], ...] is ambiguous to parse and not supported.

  • Self-referential types, like type RecursiveList[T] = T | list[RecursiveList[T]].

In each of these cases, a custom constructor can be defined as a workaround.