Skip to content
CAI
Software that uses CAICheck a score

fastapi/typer

68.9

Adequate · 19 September 2026

15.6k

lines of production code

Python

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is the Typer library, a Python framework for building command-line interfaces. It provides capabilities for defining CLI commands, arguments, and options using Python type hints, while handling shell autocompletion, help text generation, and Rich-formatted output. The codebase includes extensive test coverage for these features and internal tooling for documentation and release management.

How it got here

2019 — Tooling migration and test expansion

13 changes.

The project modernized its development infrastructure by migrating build and dependency management to PDM and uv, while restructuring the core Typer codebase to vendor Click. Concurrently, a comprehensive test suite was established to verify CLI options, arguments, parameter types, and tutorial examples, ensuring robust coverage of the library's functionality.

2020 — tutorial test coverage and Python 3.10 migration

16 changes.

This period focused on adding comprehensive test coverage for Typer's documentation tutorials, validating CLI behavior across commands, options, subcommands, and shell completion features. Concurrently, the documentation source examples were updated to adopt Python 3.10 syntax, including modern type hinting and union operators.

2022–2026 — vendoring Click and expanding test coverage

8 changes.

This period focused on vendoring the Click library to streamline dependencies and significantly expanding the test suite. Comprehensive integration and tutorial tests were added to verify CLI behavior, autocompletion, custom types, and output formatting.

Features

New internal scripts for documentation, release, and CI status management

This change introduces a suite of new internal scripts to the \scripts/\ directory to support the project's documentation workflow, release process, and CI integration. \scripts/docs.py\ provides a Typer-based CLI for building, serving, and verifying documentation, including generating version-specific source files and README content. \scripts/prepare\_release.py\ automates the release preparation by bumping the package version and updating release notes. \scripts/deploy\_docs\_status.py\ handles GitHub Actions status updates and PR comments for documentation deployments. Additionally, shell scripts like \scripts/lint.sh\, \scripts/format.sh\, and \scripts/test.sh\ standardize local development tooling, while \scripts/add\_latest\_release\_date.py\ ensures release notes are timestamped.

scripts · high confidence

Behavioural changes

Documentation examples updated to Python 3.10 syntax

The documentation source files in docs\_src have been updated to use Python 3.10 syntax. This includes migrating code examples to use the modern \Annotated\ type hinting style (e.g., \Annotated\[str, typer.Argument()\]\) and native type union syntax (e.g., \int \| None\). The changes ensure that the tutorial code aligns with current Python standards.

_docs\src · high confidence

Typer 0.27.0: Complete codebase restructure and vendorization of Click

This release restructures the Typer codebase into a new modular layout, introducing dedicated modules for completion logic (\_completion\_classes.py, \_completion\_shared.py), type handling (\_types.py, \_typing.py), and a new CLI entry point (cli.py) that allows running Typer scripts directly via the \typer\ command. It vendors the Click library (exposed as \_click) to streamline dependencies and remove external Click requirements, while also introducing a new TyperChoice type for enum-based choices and a TyperException base class for error handling.

typer · high confidence

Test coverage

Add CLI test fixtures for app extension, Rich markup, and documentation generation; Added CLI integration tests for Typer; Added comprehensive test suite for Typer functionality; Added comprehensive test suite for shell completion features; Added test assets for shell completion, hidden commands, and error formatting; Added test package initialization for CLI arguments; Added tests for CLI argument help output formatting; Added tests for CLI arguments and options accepting multiple values; Added tests for CLI help and required option behavior; Added tests for CLI option naming and aliasing; Added tests for CLI parameter types: index, number, and verbose flags; Added tests for CLI path parameter handling; Added tests for app\_dir and launch tutorial examples; Added tests for boolean parameter types; Added tests for command callbacks; Added tests for command help, arguments, options, and name tutorials; Added tests for custom type parsing in CLI applications; Added tests for datetime and UUID CLI parameter types; Added tests for exception handling and traceback formatting; Added tests for one-or-multiple command tutorials; Added tests for option callbacks and version flags; Added tests for optional CLI arguments; Added tests for options autocompletion tutorials; Added tests for printing and progress bar tutorials; Added tests for prompt-based CLI options; Added tests for subcommand name and help customization; Added tests for subcommand tutorial examples; Added tests for the one-file-per-command tutorial example; Added tests for tutorial command examples; Initialize test package for CLI Options; Initialize test package for commands.

Dependencies

Migrate build and dependency management to uv

The project has switched from pip/setuptools to uv for dependency resolution and environment management. This introduces a \pyproject.toml\ (implied by the lockfile and uv usage), a \uv.lock\ file for deterministic builds, and a \.python-version\ file pinning the runtime to Python 3.10. Development tooling is now driven by uv, with pre-commit hooks executing via \uv run\ and the CI workflow updated to use \uv sync\ for test execution.

(repo-wide) · high confidence

Migrate build system to PDM and update Python support

The project has migrated its build backend from Flit to PDM, replacing the legacy \pyproject.toml\ structure with modern PDM conventions. This change updates the minimum supported Python version to 3.10 and adds official support for Python 3.11, 3.12, 3.13, and 3.14. The runtime dependencies have been streamlined to \shellingham\, \rich\, \annotated-doc\, and \colorama\ (on Windows), while development tooling has shifted to use Ruff for linting and formatting, alongside updated versions of pytest, mypy, and other test utilities.

(dependencies) · high confidence

Vendor Click 8.3.1 into Typer

Typer now includes a vendored copy of the Click library (version 8.3.1) within the \typer/\_click\ package, replacing the external dependency. This change streamlines Typer's codebase and ensures consistent behavior by bundling the CLI framework directly, as evidenced by the new source files, license, and type stubs in the \typer/\_click\ directory.

_typer/\click · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 69.

Lenses

  • Code Health 89
  • Architecture 100
  • Maturity 61
  • Readiness 72
  • Security 71

Changes since last survey

  • 300 commits — 293 feature/other, 7 fixes

By area

  • docs/release-notes.md — 160 commits
  • (root) — 68 commits
  • .github/workflows — 37 commits
  • .github/dependabot.yml — 5 commits
  • docs/tutorial — 4 commits
  • tests/test_tutorial — 3 commits
  • typer/_click — 3 commits
  • docs/contributing.md — 2 commits
  • tests/test_completion — 2 commits
  • tests/test_launch.py — 2 commits
  • tests/test_others.py — 2 commits
  • typer/.agents — 2 commits
  • .github/latest-changes.yml — 1 commit
  • .github/pr-push.yml — 1 commit
  • docs/css — 1 commit
  • docs/help-typer.md — 1 commit
  • docs/js — 1 commit
  • tests/assets — 1 commit
  • tests/test_rich_markup_mode.py — 1 commit
  • tests/test_termui.py — 1 commit

Notable commits

  • fix: ✅ Fix flaky app_dir and launch tutorial tests under xdist (#1951)
  • fix: 🐛 Fix showing fast button as external link in animated terminals in docs (#1912)
  • fix: 👷 Fix alls-green test dependency (#1848)
  • fix: 👷 Fix latest-changes checkout target (#1883)
  • fix: 📝 Fix categorization of PR 1475 in release notes (#1769)
  • fix: 🔒️ Add zizmor and fix audit findings (#1705)
  • fix: 🔧 Fix GitHub link in docs (#1754)
  • change: ♻️ Create exceptions module and TyperException base class (#1942)
  • change: ♻️ Unify the testing functionality (#1792)
  • change: ✅ Add Fish shell completion tests for colon options (#1475)
  • change: ✅ Extend completion unit tests for zsh, powershell and pwsh (#1767)
  • change: ✨ Make epilog formatting consistent with other parts of the help string (#1405)
  • change: ➖ Vendor Click and streamline Typer's functionality and code base (#1774)
  • change: ⬆ Bump actions/add-to-project from 1.0.2 to 2.0.0 (#1731)
  • change: ⬆ Bump actions/cache from 5.0.4 to 5.0.5 (#1700)
  • change: ⬆ Bump actions/github-script from 7.1.0 to 9.0.0 (#1746)
  • change: ⬆ Bump actions/labeler from 6.0.1 to 6.1.0 (#1734)
  • change: ⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1 (#1701)
  • change: ⬆ Bump annotated-doc from 0.0.4 to 0.0.5 (#1949)
  • change: ⬆ Bump astral-sh/setup-uv from 7.6.0 to 8.1.0 (#1699)
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

fastapi/typer was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit a80f6e5ecd74f32b983cca336a2f3cba98d9853a — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.