Typer

Typer is a Python library for building CLI applications, using type hints to generate arguments, options, validation, help text, and shell completion automatically.

Framework
PyPI
v0.27.2
20,033 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
89 /100 Excellent
Development Activity 92
Maintenance 100
Community 64
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
89 /100 Excellent
Architecture 88
Code Quality 92
Innovation 82
Learning Curve 95

Typer is a Python library for building command-line interface applications that are easy to write and pleasant to use. Instead of a separate declarative API for arguments and options, Typer reads your function’s regular Python type hints and derives the CLI surface from them: parameter names become option flags, type annotations drive parsing and validation, and default values become defaults. Adding a CLI to an existing script is typically a two-line change — one import and one function call.

Built by the same author as FastAPI and following the same design philosophy, Typer is often described as “the FastAPI of CLIs.” It layers on top of Click’s proven command-parsing model but ships its own maintained internal fork of it (typer._click) rather than depending on the external click package, giving the project full control over its parsing internals. Typer also includes a standalone typer command that can run any Python script as a CLI — even scripts that don’t import Typer at all — by inspecting function signatures directly.

Beyond the basics, Typer supports arbitrarily nested command trees (subcommands and groups of subcommands), rich-formatted help and tracebacks via the rich library, automatic shell completion for Bash/Zsh/Fish/PowerShell, and a dedicated typer.testing module for exercising CLI apps in test suites without spawning subprocesses.

What You Get

  • Automatic CLI generation from function signatures and type hints, with no separate parser declarations to maintain
  • Rich-formatted help screens, error messages, and tracebacks powered by the rich library, enabled by default
  • Automatic shell completion for Bash, Zsh, Fish, and PowerShell, installable with a single flag
  • Support for arbitrarily deep command trees — subcommands and groups of subcommands — for growing a CLI as complexity increases
  • A standalone typer command that can run any Python script as a CLI, even one that doesn’t import Typer
  • A typer.testing module (CliRunner) for invoking commands and asserting on output/exit codes directly in test suites

Common Use Cases

  • Turning an internal automation script into a proper CLI tool with help text and validated arguments in a couple of lines
  • Building the command-line entry point for a Python package that also ships a library API
  • Creating multi-command developer tools (database migrations, deployment scripts, data pipelines) with nested subcommand groups
  • Adding shell autocompletion to an existing tool so users get tab-completion for commands, options, and choices
  • Prototyping CLIs quickly during development using the typer run command before wiring a formal entry point

Under The Hood

Architecture Typer’s core is a translation layer between plain Python function signatures and a command-parsing engine: typer.main.Typer (typer/main.py, ~2,000 lines) collects registered callbacks via @app.command()/@app.callback(), inspects each function’s parameters with inspect and get_type_hints, and converts them into TyperArgument/TyperOption/TyperCommand/TyperGroup objects defined in typer/core.py. Rather than depending on the external click package, Typer vendors and maintains its own internal fork under typer/_click/ (parser, formatting, shell completion, terminal UI) — so all output parsing, argument dispatch, and help rendering flow through code the project owns outright. typer/models.py and typer/params.py define the intermediate representations (ArgumentInfo, OptionInfo, ParameterInfo) that bridge a function’s type hints to the underlying command objects, and typer/completion.py handles shell-completion wiring. This is a layered design: user-facing decorators → signature inspection → internal parameter model → vendored parsing engine.

Tech Stack Typer targets Python 3.10+ and declares only three runtime dependencies in pyproject.toml: shellingham (shell detection for completion), rich (formatted help/tracebacks/errors, on by default), and annotated-doc (for Annotated[...] metadata support), plus colorama on Windows. It builds with pdm-backend and is fully typed (py.typed marker, mypy --strict, and the newer ty type checker both run in CI). The project uses ruff for linting, pytest with pytest-xdist/pytest-cov for testing, and uv as the recommended installer/dev workflow. Documentation is built with mkdocs/zensical and deployed via GitHub Actions, with a large docs_src/ directory (300+ example scripts) that doubles as both documentation source and test fixtures.

Code Quality The repository ships an extensive test suite (roughly 200+ test functions across tests/, covering arguments, options, subcommands, completion, testing utilities, and edge cases like ambiguous parameters), run under pytest --strict-config --strict-markers with warnings promoted to errors. mypy --strict and ty both gate the codebase in CI, and ruff enforces a fairly wide lint rule set (pycodestyle, pyflakes, isort, bugbear, comprehensions, pyupgrade). GitHub Actions workflows cover testing across CPython versions (including nightly), pre-commit checks, dependency guarding, and a security-focused zizmor workflow for the CI config itself — indicating an unusually mature CI/quality posture for a library of this size.

What Makes It Unique Typer’s core idea — deriving a full CLI (arguments, options, validation, help, completion) purely from a function’s existing type hints — sets it apart from parser-declaration libraries like argparse or raw Click, where the CLI surface is described separately from the function it wires up. Its most distinctive engineering decision is vendoring its own internal fork of Click (typer._click) instead of depending on the external package, decoupling Typer’s release cadence and behavior guarantees from upstream Click changes while still reusing its proven parsing model. The standalone typer runner command — which can execute arbitrary undecorated scripts as CLIs by inspecting their signatures — is also unusual among CLI frameworks, most of which require explicit framework integration before a script becomes runnable as a CLI.

Used by 26 apps in this directory

Python
100%
Apache 2.0

Agno

AI Development · Automation · Devops

42,358

Build, run, and manage agent platforms with a full production stack — SDK, runtime, and control plane included.

View details
93
Repo Health
87
Technical
66
Dependency
Built with
Python 100%
Updated 1 weeks ago
Python
89%
Apache 2.0

Apache Airflow

Data Engineering

46,995

Define, schedule, and monitor complex data workflows as Python code — with a powerful UI, 80+ provider integrations, and battle-tested scalability across thousands of production deployments.

View details
96
Repo Health
89
Technical
64
Dependency
Built with
Python 89%
Updated 1 weeks ago
Python
59%
Apache 2.0

argilla

AI Development · Data Engineering

5,125

Collaborate on high-quality AI training data with a self-hosted annotation platform built for LLMs, NLP, and multimodal models.

View details
65
Repo Health
81
Technical
61
Dependency
Built with
Python 59%
Jupyter Notebook 21%
Updated 2 weeks ago
Python
92%
Apache 2.0

ART

AI Development

10,779

Give your LLM agents on-the-job training—ART lets you apply GRPO reinforcement learning to any multi-step agentic workflow with minimal code changes.

View details
85
Repo Health
82
Technical
73
Dependency
Built with
Python 92%
Updated 1 weeks ago
Python
62%
MIT

AutoGen

AI Development · Automation

61,194

Build autonomous and human-in-the-loop multi-agent AI systems with a layered, event-driven Python and .NET framework pioneered at Microsoft Research.

View details
56
Repo Health
78
Technical
73
Dependency
Built with
Python 62%
C# 25%
TypeScript 12%
Updated 5 months ago
TypeScript
49%
AGPL 3.0

Banana Slides

AI Design Tools · Productivity

15,667

AI-native PPT generator with Vibe editing, multi-LLM support, and fully editable PPTX export

View details
84
Repo Health
82
Technical
71
Dependency
Built with
TypeScript 49%
Python 46%
Updated 1 weeks ago
TypeScript
45%
AGPL 3.0

BrowserOS

AI Assistants · Browser

13,763

The open-source agentic Chromium browser with native AI agents, MCP server, and visual workflow automation — your data never leaves your machine.

View details
87
Repo Health
82
Technical
68
Dependency
Built with
TypeScript 45%
Rust 23%
Python 18%
Updated 1 weeks ago
Python
82%
MIT

CertMate

Devops · Security

1,435

Automate SSL certificate lifecycle across any CA, 24+ DNS providers, and every major secret store — with a REST API, web dashboard, and built-in MCP server for AI-driven ops.

View details
83
Repo Health
84
Technical
70
Dependency
Built with
Python 82%
Updated 1 weeks ago
TypeScript
75%
Apache 2.0

Fern

Developer Tools

3,787

Fern turns a single OpenAPI, AsyncAPI, or Protobuf definition into type-safe SDKs for nine languages and a hosted API documentation site, all from one CLI and one source of truth.

View details
90
Repo Health
86
Technical
66
Dependency
Built with
TypeScript 75%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers