awesome-python-typing
by typeddjango
Collection of awesome Python types, stubs, plugins, and tools to work with them.
AI summary
Type checker
A collection of tools and libraries for Python type checking and static analysis.
- stars
- 1.7K
- forks
- 69
- watching
- 48
- awesome lists
- 4
- entries
- 134
What's in the list
134 links in 15 sections, with live GitHub stats.activeno commit in 2y
Static type checkers
basedmypy
Based static typing with baseline functionality
basedpyright
Pyright fork with improvements to VSCode support and various other fixes
mypy
Optional static typing (PEP 484)
pyanalyze
Extensible static analyzer and type checker
- pycharm
IDE for Professional Developers
pylyzer
A fast static code analyzer & language server for Python, written in Rust
- pyre
Performant type-checker
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
pytype
Tool to check and infer types - without requiring type annotations
Dynamic type checkers
beartype
Unbearably fast runtime type-checking in pure Python
pydantic
Data parsing using Python type hinting. Supports dataclasses
pytypes
Provides a rich set of utilities for runtime typechecking
strongtyping
Decorator which checks whether the function is called with the correct type of parameters
typedpy
Type-safe, strict Python. Works well with standard Python
typeguard
Another one runtime type checker
typical
Data parsing and automatic type-coercion using type hinting. Supports dataclasses, standard classes, function signatures, and more
trycast
Parse JSON-like values whose shape is defined by typed dictionaries (TypedDicts) and other standard Python type hints
Stub packages
asgiref
ASGI specification, provides module with type annotations for ASGI servers
- boto3-stubs
Stubs for
botostubs
Gives you code assistance for any boto3 API in any IDE
celery-types
Type stubs for and its related packages , , , , and
django-stubs
Stubs for
djangorestframework-stubs
Stubs for
grpc-stubs
Stubs for
lxml-stubs
Stubs for
PyQt5-stubs
Stubs for
python-phonenumbers-stubs
Stubs for
pythonista-stubs
Stubs for
scipy-stubs
Stubs for
sqlalchemy-stubs
Stubs for
- sqlalchemy2-stubs
Official stubs and mypy plugin for
torchtyping
Enhanced type annotations for
- types-aiobotocore
Stubs for
typeshed
Collection of library stubs, with static types
Additional types
meiga
Simple, typed and monad-based Result type
option
Rust like Option and Result types
optype
Opinionated and alternative: Flexible single-method protocols and typed operators with predictable names
phantom-types
Phantom types
returns
Make your functions return something meaningful, typed, and safe
safetywrap
Fully typesafe, Rust-like Result and Option types
typet
Length-bounded types, dynamic object validation
useful-types
Collection of useful protocols and type aliases
Backports and improvements
future-typing
Backport for type hinting generics in standard collections and union types as
typing-extensions
Backported and experimental type hints
typing-utils
Backport 3.8+ runtime typing utils(for eg: get_origin) & add issubtype & more
Tools / Linters
flake8-annotations-complexity
Plugin for flake8 to validate annotations complexity
flake8-annotations
Plugin for flake8 to check for presence of type annotations in function definitions
flake8-pyi
Plugin for Flake8 that provides specializations for type hinting stub files
flake8-type-checking
Plugin to help you guard any type-annotation-only import correctly
flake8-typing-imports
Plugin which checks that typing imports are properly guarded
flake8-typing-only-imports
flake8 plugin that helps identify which imports to put into type-checking blocks, and how to adjust your type annotations once imports are moved
- flake8-type-ignore
flake8 plugin to disallow type: ignore comments in your typed Python code
wemake-python-styleguide
The strictest and most opinionated Python linter ever
Ruff
Extremely fast linter which supports lint rules from many other lint tools, such as flake8
Tools / Testing
mypy-test
Test mypy plugins, stubs, custom types
pytest-mypy-plugins
Pytest plugin for testing mypy types, stubs, and plugins
pytest-mypy-testing
Pytest plugin to test mypy static type analysis
pytest-mypy
Mypy static type checker plugin for Pytest
Tools / Working with types
com2ann
Tool for translation of type comments to type annotations
merge-pyi
Part of pytype toolchain, applies stub files onto source code
mypy-baseline
Integrate mypy with existing codebase. A CLI tool that filters out existing type errors and reports only new ones
mypy-protobuf
Tool to generate mypy stubs from protobufs
mypy-silent
Silence mypy by adding or removing code comments
mypyc
Compiles mypy-annotated, statically typed Python modules into CPython C extensions
retype
Another tool to apply stubs to code
typeforce
CLI tool that enriches your Python environment with type annotations, empowering mypy
typesplainer
A Python type explainer
typing-inspect
The typing_inspect module defines experimental API for runtime inspection of types defined in the module
- typing-json
Lib for working with typed objects and JSON
Tools / Helper tools to add annotations to existing code
autotyping
Automatically add simple return type annotations for functions (bool, None, Optional)
infer-types
CLI tool to automatically infer and add type annotations into Python code
jsonschema-gentypes
Generate Python types based on TypedDict from a JSON Schema
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 code based on the types collected at runtime
no_implicit_optional
A codemod to make your implicit optional type hints compliant
pyannotate
Insert annotations into your source code based on call arguments and return types observed at runtime
PyTypes
Infer Types by Python Tracing
pyre infer
Pyre has a powerful feature for migrating codebases to a typed format. The command-line option ingests a file or directory, makes educated guesses about the types used, and applies the annotations to the files
pytest-annotate
Pyannotate plugin for pytest
pytest-monkeytype
MonkeyType plugin for pytest
pytype annotate-ast
A work-in-progress tool to annotate the nodes of an AST with their Python types
type4py
Deep Similarity Learning-Based Type Inference
typilus
A deep learning algorithm for predicting types in Python. Also available as a
auto-optional
Makes typed arguments Optional when the default argument is
Tools / Mypy plugins
kubernetes-typed
Plugin for kubernetes type checking
loguru-mypy
Plugin for support
mypy-zope
Plugin for support
mypy/plugins
Plugins already integrated into mypy
- numpy
Plugin for support
pynamodb-mypy
Plugin for support
Integrations
emacs-flycheck-mypy
Mypy integration for Emacs
mypy-playground
Online playground for mypy
mypy-pycharm-plugin
Mypy integration for PyCharm
pylance
PyRight integration for VSCode
vim-mypy
Mypy integration for Vim
nbQA
Run type checkers (e.g. Mypy) on Jupyter Notebooks
Articles / PEPs
- 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
Articles / Third-party articles
- 1-minute guide to real constants in Python
Full tutorial about constants and inheritance
- Simple dependent types in Python
Full tutorial about types
- Testing mypy stubs, plugins, and types
Full tutorial about testing mypy types
- Our journey to type checking 4 million lines of Python
Dropbox has been one of the first companies to adopt Python static type checking at this scale
- PyTest MonkeyType Introduction
Type Annotate an existing Python Django Codebase with MonkeyType
- The state of type hints in Python
As of May 2018
- Type hints cheat sheet
Cheat sheet on writing type annotations by MyPy team
- Typechecking Django and DRF
Full tutorial about type-checking django
- Type Check Your Django Application
An article based on two recent talks on adding type checks to Django
- typing
Official Python documentation for module
Python-typing-koans
A set of examples to learn optional static typing in Python
- Python Type Checking (Guide)
In this guide, you will get a look into Python type checking
- Adding type hints to urllib3
Tests are not enough: Case study adding type hints to urllib3
- Adam Johnsons Blog
Adam Johnson blogs about typing practices
- ParamSpec Guide
Newly released feature in allows you do a lot of advanced typing things with functions and their signatures
- Static Typing Python Decorators
Accurately static typing decorators in Python is an icky business. The wrapper function obfuscates type information required to statically determine the types of the parameters and the return values of the wrapped function
Communities
- python/typing
Official typing gitter chat
- TypedDjango
Official organisation gitter chat
- PythonRu#typing
Russian slack chat (invites are ) about types
Related
awesome-python
Curated list of awesome Python frameworks, libraries, software and resources
python-typecheckers
List of Python type checkers: static and runtime
Nothing in this list matches your filter.
Featured in 4 awesome lists
Each link jumps to the spot where the list mentions awesome-python-typing.
More related projects
aviksaikat/cookiecutter-pdm-pypackage7
hacksoftware/django-styleguide5.2K
schmidtdse/afscgap5
fannheyward/coc-pyright1.3K
pawamoy/copier-pdm87
stevanmilic/nvim-lspimport65
josverl/micropython-stubber184
xavdid/advent-of-code-python-template19
wemake-services/wemake-django-template2K
evanleck/vim-svelte321
lervag/vimtex5.6K