fastapi/typer
68.9
Adequate · 19 September 2026
15.6k
lines of production code
Python
primary language
1
measurement over time
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.