Mypy on Twitter is @mypyproject

Follow @mypyproject on Twitter

Why mypy?
Compile-time type checking
Static typing makes it easier to find bugs with less debugging.
Easier maintenance
Type declarations act as machine-checked documentation. Static typing makes your code easier to understand and easier to modify without introducing bugs.
Grow your programs from dynamic to static typing
You can develop programs with dynamic typing and add static typing after your code has matured, or migrate existing Python code to static typing.


Mypy is an experimental optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing. Mypy combines the expressive power and convenience of Python with a powerful type system and compile-time type checking. Mypy type checks standard Python programs; run them using any Python VM with basically no runtime overhead.

Mypy is still in development. Most Python features are supported.

What's new

Dropbox releases PyAnnotate

15 November 2017: Dropbox has released an open source tool for automatically generating type annotations based on runtime type collection. See the blog post for details. -Guido van Rossum

For more mypy news see the mypy blog

24 October 2017: We're increasing mypy's release frequency to about once per three weeks. We no longer will link here to each separate release blog post; just check the mypy blog for news. Two new versions, 0.530 and 0.540, were released since the last news item below. -Guido van Rossum

Mypy 0.521 released

25 July 2017: Mypy 0.521 was released. It is a minor bugfix release for 0.520, and everyone using 0.520 should upgrade. Read the blog post to see what's changed. -Jukka

Mypy 0.520 released

10 July 2017: Mypy 0.520 was released. It adds better control for Any types, __setattr__ support, more flexible NamedTuples, and many more improvements and bug fixes. Read the blog post to see what's changed. -Jukka

Older news

Seamless dynamic and static typing

From Python...
def fib(n):
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a+b statically typed Python
def fib(n: int) -> Iterator[int]:
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a+b

Migrate existing code to static typing, a function at a time. You can freely mix static and dynamic typing within a program, within a module or within an expression. No need to give up dynamic typing — use static typing when it makes sense. Often just adding function signatures gives you statically typed code. Mypy can infer the types of other variables.

Python syntax

Mypy type checks programs that have type annotations conforming to PEP 484. Getting started is easy if you know Python. The aim is to support almost all Python language constructs in mypy.

Powerful type system

Mypy has a powerful, modern type system with features such as bidirectional type inference, generics, callable types, abstract base classes, multiple inheritance and tuple types.

Access to Python libs

Many commonly used libraries have stubs (statically typed interface definitions) that allow mypy to check that your code uses the libraries correctly.

Learn more