Types for Python
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Reticulated Python is a tool for experimenting with gradual typing in Python 3. Reticulated Python adds optional static and runtime typechecking to Python. It lets programmers annotate functions and classes with types, and it enforces these types both before and during the execution of the program, providing early detection of errors. Crucially, Reticulated does not require that all parts of a program be given static types, or even any of it. In places where typed and untyped code interact - for example, when an untyped variable is passed into a function whose argument type is Int - Reticulated can perform runtime checks, to ensure that the values in variables always correspond to their expected types, even when this can't be guaranteed statically.

Reticulated Python runs on Python 3.5 and lower, using the syntactic annotations provided by Python 3 as type annotations. The absence of an annotation implies that the parameters or return values are dynamically typed, as in standard Python. We also provide "type functions" for creating types that correspond to higher-order values in Python, like functions and lists, and we provide the type Any (for dynamic) to allow for, for example, heterogeneous lists, which have the type List[Any].

Reticulated Python itself is written in Python 3. Its static, compile-time component is both a "linter" or static analyzer, and a source-to-source translator. This component parses source files (using the Python ast package) and searches for type errors, rejecting programs that have statically detectable errors and syntactically inserting runtime checks or casts at boundaries between typed and untyped code, where type errors may occur.