tyro1.0.1
Published
CLI interfaces & config objects, from types
pip install tyro
Package Downloads
Authors
Project URLs
Requires Python
>=3.8
Dependencies
- docstring-parser
>=0.15 - eval-type-backport
>=0.1.3; python_version < "3.10" - typeguard
>=4.0.0 - typing-extensions
>=4.13.0 - attrs
>=21.4.0; extra == "dev" - coverage
[toml]>=6.5.0; extra == "dev" - eval-type-backport
>=0.1.3; extra == "dev" - ml-collections
>=0.1.0; extra == "dev" - msgspec
>=0.18.6; extra == "dev" - mypy
>=1.4.1; extra == "dev" - omegaconf
>=2.2.2; extra == "dev" - pydantic
!=2.10.0,>=2.5.2; extra == "dev" - pyright
!=1.1.379,>=1.1.349; extra == "dev" - pytest-cov
>=3.0.0; extra == "dev" - pytest-xdist
>=3.5.0; extra == "dev" - pytest
>=7.1.2; extra == "dev" - pyyaml
>=6.0; extra == "dev" - ruff
>=0.1.13; extra == "dev" - shtab
>=1.5.6; extra == "dev" - universal-pathlib
>=0.2.0; extra == "dev" - attrs
>=21.4.0; extra == "dev-nn" - coverage
[toml]>=6.5.0; extra == "dev-nn" - eval-type-backport
>=0.1.3; extra == "dev-nn" - flax
>=0.6.9; python_version <= "3.13" and extra == "dev-nn" - ml-collections
>=0.1.0; extra == "dev-nn" - msgspec
>=0.18.6; extra == "dev-nn" - mypy
>=1.4.1; extra == "dev-nn" - numpy
>=1.20.0; extra == "dev-nn" - omegaconf
>=2.2.2; extra == "dev-nn" - pydantic
!=2.10.0,>=2.5.2; extra == "dev-nn" - pyright
!=1.1.379,>=1.1.349; extra == "dev-nn" - pytest-cov
>=3.0.0; extra == "dev-nn" - pytest-xdist
>=3.5.0; extra == "dev-nn" - pytest
>=7.1.2; extra == "dev-nn" - pyyaml
>=6.0; extra == "dev-nn" - ruff
>=0.1.13; extra == "dev-nn" - shtab
>=1.5.6; extra == "dev-nn" - torch
>=1.10.0; python_version <= "3.13" and extra == "dev-nn" - universal-pathlib
>=0.2.0; extra == "dev-nn"
tyro
Documentation
•
pip install tyro
tyro.cli() is a tool for generating CLI
interfaces from type-annotated Python.
We can define configurable scripts using functions:
https://github.com/user-attachments/assets/6f884313-6111-40a1-b9c7-7cd83d737296
Or instantiate configs defined using tools like dataclasses, pydantic, and attrs:
https://github.com/user-attachments/assets/edec520d-0c05-4547-8dc5-c2e211aadfb2
Other features include helptext generation, nested structures, subcommands, and shell completion. For examples and the API reference, see our documentation.
Why tyro?
-
Define things once. Standard Python type annotations, docstrings, and default values are parsed to automatically generate command-line interfaces with nice helptext.
-
Static types. Unlike tools dependent on dictionaries, YAML, or dynamic namespaces, arguments populated by
tyroare better undestood by IDEs and language servers, as well as static checking tools likepyrightandmypy. -
Modularity.
tyrosupports hierarchical configurations, which make it easy to decentralize definitions, defaults, and documentation.
In the wild
tyro is designed to be lightweight for throwaway scripts, while
improving maintainability for larger projects. Examples:
|
nerfstudio-project/nerfstudio
| Open-source tools for neural radiance fields. |
|
Sea-Snell/JAXSeq
| Train very large language models in Jax. |
|
kevinzakka/obj2mjcf
| Interface for processing OBJ files for Mujoco. |
|
blurgyy/jaxngp
| CUDA-accelerated implementation of instant-ngp, in JAX. |
|
NVIDIAGameWorks/kaolin-wisp
| PyTorch library for neural fields. |
|
autonomousvision/sdfstudio
| Unified framework for surface reconstruction. |
|
openrlbenchmark/openrlbenchmark
| Collection of tracked experiments for reinforcement learning. |
|
vwxyzjn/cleanrl
| Single-file implementation of deep RL algorithms. |
|
pytorch-labs/LeanRL
| Fork of CleanRL, optimized using PyTorch 2 features. |
|
pytorch/torchtitan
| PyTorch-native platform for training generative AI models. |
|
KwaiVGI/LivePortrait
| Stitching and retargeting for portraits. |
|
Physical-Intelligence/openpi
| Open-source models for robotics. |
|
mujocolab/mjlab
| Lightweight, modular abstractions for RL and sim-to-real robotics. |
|
amazon-far/holosoma
| Humanoid robotics framework for RL training and deployment. |
|
MalcolmMielle/bark_monitor
| Show your neighbor that your dog doesn't bark! |
Alternatives
tyro is opinionated. If any design decisions don't make sense, feel free to
file an issue!
You might also consider one of many alternative libraries. Some that we like:
- cappa offers a similar core feature set but with very different ergonomics. It looks polished and well-maintained!
- cyclopts and defopt has very comprehensive type annotation support and a heavier emphasis on subcommand generation.
- simple-parsing and jsonargparse provide deeper integration with configuration file formats like YAML and JSON.
- clipstick, which focuses on simplicity + generating CLIs from Pydantic models.
- datargs provides a minimal API for dataclasses.
- fire and clize support arguments without type annotations.
There are also some options that directly extend tyro:
- mininterface simultaneously generates GUI, TUI, web, CLI, and file-based program configuration.
- manuscript generates CLI interfaces from a simple block of configuration variables.
We also have some notes on tyro's design goals and other alternatives in the
docs here.