Skip to main content

Strongly typed, zero-effort CLI interfaces

Project description

tyro logo

Documentation   •   pip install tyro

build mypy lint codecov codecov


tyro is a library for building CLI interfaces, configuration objects, and configuration systems with modern, type-annotated Python.

Our core interface consists of just one function, tyro.cli(), that translates Python callables and types into fully-featured argument parsers and configuration objects.

To get started, we recommend visiting the examples in our documentation.

Why tyro?

  1. Strong typing.

    Unlike tools dependent on dictionaries, YAML, or dynamic namespaces, arguments populated by tyro benefit from IDE and language server-supported operations — think tab completion, rename, jump-to-def, docstrings on hover — as well as static checking tools like pyright and mypy.

  2. Minimal overhead.

    Standard Python type annotations, docstrings, and default values are parsed to automatically generate command-line interfaces with informative helptext.

    If you're familiar with type annotations and docstrings in Python, you already know how to use tyro! If you're not, learning to use tyro reduces to learning to write modern Python.

    Hate tyro? Just remove one line of code, and you're left with beautiful, type-annotated, and documented vanilla Python that can be used with a range of other configuration libraries.

  3. Modularity.

    tyro supports hierarchical configuration structures, which make it easy to distribute definitions, defaults, and documentation of configurable fields across modules or source files.

  4. Tab completion.

    By extending shtab, tyro automatically generates tab completion scripts for bash, zsh, and tcsh.

A minimal example

As a replacement for argparse:

with argparse with tyro
"""Sum two numbers from argparse."""

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
    "--a",
    type=int,
    required=True,
)
parser.add_argument(
    "--b",
    type=int,
    default=3,
)
args = parser.parse_args()

print(args.a + args.b)
"""Sum two numbers by calling a
function with tyro."""

import tyro

def main(a: int, b: int = 3) -> None:
    print(a + b)

tyro.cli(main)

"""Sum two numbers by instantiating
a dataclass with tyro."""

from dataclasses import dataclass

import tyro

@dataclass
class Args:
    a: int
    b: int = 3

args = tyro.cli(Args)
print(args.a + args.b)

For more examples, see our documentation.

In the wild

tyro is still a new library, but being stress tested in several projects!

  • nerfstudio uses tyro both to build compact command-line utilities and for YAML-free experiment configuration.
  • obj2mjcf uses tyro to build a CLI for processing composite Wavefront OBJ files for Mujoco.
  • tensorf-jax (unofficially) implements Tensorial Radiance Fields in JAX, with tyro for configuration.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tyro-0.3.23.tar.gz (55.2 kB view details)

Uploaded Source

Built Distribution

tyro-0.3.23-py3-none-any.whl (62.6 kB view details)

Uploaded Python 3

File details

Details for the file tyro-0.3.23.tar.gz.

File metadata

  • Download URL: tyro-0.3.23.tar.gz
  • Upload date:
  • Size: 55.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.8.14 Linux/5.15.0-1020-azure

File hashes

Hashes for tyro-0.3.23.tar.gz
Algorithm Hash digest
SHA256 af8928940466d112a83ee77452f60228d4b67938d397f7cc2cb5c552cf8b84af
MD5 e835493ac8ab15884521419b2aa445e7
BLAKE2b-256 a97db4937c157bc504f682a0a40a77d31874c8f3365c987f3d8b480bfc71e0f4

See more details on using hashes here.

File details

Details for the file tyro-0.3.23-py3-none-any.whl.

File metadata

  • Download URL: tyro-0.3.23-py3-none-any.whl
  • Upload date:
  • Size: 62.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.8.14 Linux/5.15.0-1020-azure

File hashes

Hashes for tyro-0.3.23-py3-none-any.whl
Algorithm Hash digest
SHA256 e05027ed3e2923882059f036169e37c35103d254821214c80d10ca071b559ee1
MD5 c8c18a6dc5140025b4bc64f051af5199
BLAKE2b-256 65346a83cb580f9cb791a2a147540cc6df40917d9870c30bfb7f1cc35bb1b0b7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page