Awesome Python Typing Awesome Gitter

Collection of awesome Python types, stubs, plugins, and tools to work with them.

Full list of typed projects on PyPi is here.

Static type checkers

  • mypy - Optional static typing for Python 3 and 2 (PEP 484).
  • pyre - Performant type-checker for Python 3.
  • pytype - Tool to check and infer types for Python code - without requiring type annotations.
  • PyCharm - IDE for Professional Developers.
  • pyright - Fast type checker meant for large Python source bases. It can run in a “watch” mode and performs fast incremental updates when files are modified.
  • pyanalyze - Extensible static analyzer and type checker for Python.

Dynamic type checkers

  • beartype - Unbearably fast O(1) runtime type-checking in pure Python.
  • pytypes - Provides a rich set of utilities for runtime typechecking.
  • pydantic - Data parsing using Python type hinting. Supports dataclasses.
  • typeguard - Another one runtime type checker.
  • typical - Data parsing and automatic type-coercion using type hinting. Supports dataclasses, standard classes, function signatures, and more.

Stub packages

Backports and improvements

  • typed-ast - Modified fork of CPython's ast module that parses # type: comments.
  • typing-extensions - Backported and experimental type hints.
  • typingplus - Backport support, dynamic is_instance and cast for abstract types.
  • typet - Length-bounded types, dynamic object validation.
  • typing_utils - Backport 3.8+ runtime typing utils(for eg: get_origin) & add issubtype & more.




Working with types

  • merge_pyi - Part of pytype toolchain, applies stub files onto source code.
  • retype - Another tool to apply stubs to code.
  • mypy-protobuf - Tool to generate mypy stubs from protobufs.
  • mypyc - Compiles mypy-annotated, statically typed Python modules into CPython C extensions.
  • typing_inspect - The typing_inspect module defines experimental API for runtime inspection of types defined in the Python standard typing module.
  • typing-json - Lib for working with typed objects and JSON.
  • com2ann - Tool for translation of type comments to type annotations in Python.
  • mypy-silent - Silence mypy by adding or removing code comments.

Helper tools to add annotations to existing code

  • MonkeyType - Collects runtime types of function arguments and return values, and can automatically generate stub files or even add draft type annotations directly to your Python code based on the types collected at runtime.
  • pytest-monkeytype - MonkeyType plugin for pytest.
  • pyannotate - Insert annotations into your source code based on call arguments and return types observed at runtime.
  • pytest-annotate - Pyannotate plugin for pytest.
  • pyre infer - Pyre has a powerful feature for migrating codebases to a typed format. The infer command-line option ingests a file or directory, makes educated guesses about the types used, and applies the annotations to the files.
  • pytype annotate-ast - A work-in-progress tool to annotate the nodes of an AST with their Python types.
  • Typilus - A deep learning algorithm for predicting types in Python. Also available as a GitHub action
  • Type4Py - Deep Similarity Learning-Based Type Inference for Python.

Mypy plugins




  • PEP-3107 - Function Annotations.
  • PEP-482 - Literature Overview for Type Hints.
  • PEP-483 - The Theory of Type Hints.
  • PEP-484 - Type Hints.
  • PEP-526 - Syntax for Variable Annotations.
  • PEP-544 - Protocols: Structural subtyping (static duck typing).
  • PEP-557 - Data Classes.
  • PEP-560 - Core support for typing module and generic types.
  • PEP-561 - Distributing and Packaging Type Information.
  • PEP-563 - Postponed Evaluation of Annotations.
  • PEP-585 - Type Hinting Generics In Standard Collections.
  • PEP-586 - Literal Types.
  • PEP-589 - TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys.
  • PEP-591 - Adding a final qualifier to typing.
  • PEP-593 - Flexible function and variable annotations.
  • PEP-604 - Complementary syntax for Union[].
  • PEP-612 - Parameter Specification Variables.
  • PEP-613 - Explicit Type Aliases.

Python docs

  • typing - Support for type hints.

Tools' docs

  • MyPy docs - General information about stubs.

Third-party articles


  • awesome-python - Curated list of awesome Python frameworks, libraries, software and resources.
  • python-typecheckers - List of Python type checkers: static and runtime.