Skip to content

yeetr, build tiny CLIs. Easy to code. Based on Python type hints.

Build Release Coverage Package version Supported Python versions License

yeetr

A tiny, typed, signature-driven CLI runner.

PyPI distribution: yeetr Python import package: yeetr CLI command: yeet

No decorators. No command classes. No ceremony. Just yeet the function.

Install

Requires Python 3.13 or 3.14.

uv add yeetr

30-second tour

Write a plain function:

# app.py
def main(thing: int, *, n: float = 0.1) -> None:
    print(thing, n)

Run it — no if __name__ == "__main__", no yeetr.run(...) call:

yeet app.py 5 -n 0.2

Parameters before the bare * become positional CLI args. Parameters after it become --options. That's the whole mapping.

Where to go next

  • Getting Started — installation, the yeet script and how it picks the function to run, the explicit yeetr.run(main) form, and executable shebangs.
  • Async Supportasync def main, handled natively.
  • Parameter Types — every type yeetr understands, from Path to Enum to tuples and variadic *args.
  • Parameter MetadataArg/Opt, env var fallback, hidden options.
  • Bundled Args — group related parameters into a dataclass or NamedTuple.
  • Path Validatorsexists, file_okay, dir_okay, readable, and writable checks.
  • CLI Rules — the short reference for how signatures map to flags.
  • Runtime Behavior — logging, testing, and how help and error output is rendered.
  • yeetr vs. typer — an honest comparison so you can pick the right tool.
  • API Reference — generated reference for the public API.
  • Releases — how yeetr is versioned and shipped.