mypy-to-ty

v2026.09.24

Migrate Python type checking from mypy to ty (Astral). Use when mirrors-mypy is in .pre-commit-config.yaml or [tool.mypy] config exists.

GitHub
Install command
npx skhub add laurigates/mypy-to-ty
Markdown
SKILL.md

/migration-patterns:mypy-to-ty

Migrate from mypy to ty — Astral's new fast Python type checker. Replaces the mirrors-mypy pre-commit hook with a local repo: local hook using uvx ty check, migrates config from [tool.mypy] to [tool.ty], and removes mypy.ini.

When to Use This Skill

Use this skill when...Keep mypy when...
.pre-commit-config.yaml contains mirrors-mypyty does not yet support a specific mypy plugin you rely on
[tool.mypy] section exists in pyproject.tomlCI pipeline depends on mypy-specific exit codes or plugins
You want faster type checking (ty is written in Rust)Project uses mypy daemon (dmypy) for incremental checks
Repo uses uv and the astral stack alreadyTeam prefers mypy's error message format

Context

  • Pre-commit config: !find . -maxdepth 1 -name '.pre-commit-config.yaml'
  • pyproject.toml: !find . -maxdepth 1 -name 'pyproject.toml'
  • mypy.ini: !find . -maxdepth 1 -name 'mypy.ini'
  • uv available: !find . -maxdepth 1 -name 'uv.lock'

Parameters

ParameterDescription
--check-onlyReport what would change without modifying files
--fixApply migration automatically

Execution

Execute this mypy-to-ty migration:

Step 1: Audit current mypy configuration

  1. Read .pre-commit-config.yaml and locate any mirrors-mypy or mypy entries.
  2. Read pyproject.toml and extract the [tool.mypy] section.
  3. Check for mypy.ini.
  4. Report findings:
    mypy → ty migration audit
    ==========================
    pre-commit hook:   mirrors-mypy found at rev <rev>
    pyproject.toml:    [tool.mypy] section found (N lines)
    mypy.ini:          FOUND / NOT FOUND
    uv.lock:           EXISTS (uv available) / MISSING
    
    If --check-only, stop here.

Step 2: Update .pre-commit-config.yaml

Remove the mirrors-mypy repo block. Add a repo: local hook for ty:

- repo: local
  hooks:
    - id: ty
      name: ty type check
      entry: uvx ty check
      language: system
      types: [python]
      pass_filenames: false

Note: astral-sh/ty-pre-commit does not yet exist as a hosted pre-commit repo. The repo: local pattern with uvx ty check is the correct approach until an official mirror is published.

If an entry: mypy hook in a non-mirrors-mypy repo exists, replace it similarly.

Step 3: Migrate [tool.mypy] → [tool.ty] in pyproject.toml

Read the [tool.mypy] section and convert each key to the ty equivalent:

mypy keyty equivalentNotes
python_versionpython-versionRename only
strictstrictSame
warn_return_anywarn-return-anyKebab-case
disallow_untyped_defsdisallow-untyped-defsKebab-case
ignore_missing_importsNot neededty resolves stubs natively
excludeexcludeSame
Per-module [[tool.mypy.overrides]]Drop or convert manuallyNote for manual review

Remove the [tool.mypy] section (and any [[tool.mypy.overrides]] sections). Add [tool.ty] with converted keys. Annotate any options that need manual review.

Step 4: Remove mypy.ini

If mypy.ini exists, delete it. Its content should already be in [tool.ty] after Step 3.

Step 5: Remove mypy from dependencies

If mypy appears in pyproject.toml dev/lint dependencies, remove it:

# With uv
uvx --from uv uv remove --dev mypy 2>/dev/null || true

If not using uv, note it for manual removal.

Step 6: Verify migration

Run the new hook to confirm it works:

pre-commit run ty --all-files

If it exits 0, the migration is complete. If it exits non-zero:

  • Summarize ty errors
  • Suggest addressing them before committing

Step 7: Report

Print a summary of all changes made and list files to commit:

mypy → ty migration complete
=============================
.pre-commit-config.yaml   UPDATED (removed mirrors-mypy, added local ty hook)
pyproject.toml            UPDATED ([tool.mypy] → [tool.ty])
mypy.ini                  DELETED / NOT FOUND

Manual review needed:
  - [[tool.mypy.overrides]] sections were dropped — verify ty handles them
  - Check ty docs for any unsupported mypy options

Files to stage:
  git add .pre-commit-config.yaml pyproject.toml

Agentic Optimizations

ContextCommand
Audit only/migration-patterns:mypy-to-ty --check-only
Apply migration/migration-patterns:mypy-to-ty --fix
Verify after migrationpre-commit run ty --all-files
Test ty directlyuvx ty check .

Quick Reference

ItemValue
ty docshttps://github.com/astral-sh/ty
Pre-commit hook typerepo: local, entry: uvx ty check
Config section[tool.ty] in pyproject.toml
Key differencety uses kebab-case keys; mypy uses underscore

See Also

  • /migration-patterns:black-to-ruff-format — Migrate from black to ruff format
  • /migration-patterns:flake8-to-ruff — Migrate flake8/isort to ruff
  • /configure:repo — End-to-end repo config driver
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

migration-patterns-plugin/skills/mypy-to-ty

Default branch

main

Latest commit

1668324

Tree SHA

b2d4cc3