NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #616 most downloaded on PyPI
An extremely fast Python type checker, written in Rust.
Last release 4 days ago
24 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
1 years old
125 releases · first in 2025
One column per month.
Stabilize auto-complete; remove the opt-in experimental setting
bool instances (#18663)self[0] (#18707)TypeIs (#18589)dataclasses.KW_ONLY (#18677)Any / Unknown (#18607)T: Never as a subtype of Never (#18687)python.ty.disableLanguageServices config (#18230)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.11/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.11/ty-installer.ps1 | iex"
Improve support for object. completions
object.<CURSOR> completions (#18629)--python=<system installation> on Unix (#18550)del statement; model implicit deletion of except handler names (#18593)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.10/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.10/ty-installer.ps1 | iex"
Add generic inference for dataclasses
__debug__ constant (#18540)_abc_ from a protocol interface (#18467)list[T] for starred target in unpacking (#18401)list[T] when unpacking non-tuple type (#18438)dataclasses.dataclass as a function (#18440)invalid-type-form for common mistakes (#18543)unresolved-reference diagnostic when variable exists on self (#18444)environment.python setting for better error messages (#18483)--python argument for Windows, and improve error messages for bad --python arguments (#18457)type[..] (#18439)T a subtype of a protocol P if all of P's members are fully bound on T (#18466)ParamSpecs inside Callable type expressions (#18426)UnaryOp expressions inside Literal slices (#18536)Literal type expressions (#18535)Callable type expressions (#18534)types.FunctionType (#18431)Callable and SpecialForm (#18503)object.<CURSOR> completions (#18468)CONDA_PREFIX to --python documentation (#18574)python-version is determined (#18549)"all" option for python-platform (#18548)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.9/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.9/ty-installer.ps1 | iex"
Add subtyping between Callable types and class literals with __init__
__init__ (#17638)Generic[] for PEP-695 generic classes (#18283)Callable types should have all FunctionType attributes available (#18242)None return-type annotation but no return statements (#18359)Literal types are considered assignable to anything their Instance supertypes are assignable to (#18351)@final nominal instance types (#18368)--config-file CLI arg (#18083)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.8/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.8/ty-installer.ps1 | iex"
Implement Python's floor-division semantics for Literal ints
Literal ints (#18249)yield expression not being in a function if the yield expression is in a function (#18008)ClassVar declarations when resolving instance members (#18241)ty_extensions.Intersection[A, B] expression in an IDE context (#18321)MRO_NO_OBJECT_FALLBACK policy when looking up symbols on type instances (#18312)get_protocol_members returns a frozenset, not a tuple (#18284)import <namespace> and from <namespace> import module (#18137)__getattribute__ method indicates arbitrary members can exist on a type (#18280)invalid-return-type is emitted on a method with an empty body on a non-protocol subclass of a protocol class (#18243)invalid-type-form diagnostic where a module-literal type is used in a type expression and the module has a member which would be valid in a type expression (#18244)invalid-base error code into two error codes (#18245)call-possibly-unbound-method to possibly-unbound-implicit-call (#18017)tests to src.root by default if a tests/ directory exists and is not a package (#18286)respect-ignore-files configuration setting under src section (#18322)system_mut (#18252)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.7/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.7/ty-installer.ps1 | iex"
Add rule link to server diagnostics
src.root setting to ['.', '<project_name>'] if an src/ directory does not exist but a <project-name>/<project-name> directory does exist (#18141)type (#18205)typing.TypeAliasType (#18156)bytes returns int (#18218)invalid-exception-caught diagnostics even when the caught exception is not bound to a variable (#18202)unresolved-import diagnostic hinting to users to configure their Python environment (#18207)division-by-zero an opt-in diagnostic rather than opt-out (#18220)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.6/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.6/ty-installer.ps1 | iex"
Fix assignability checks for invariant generics parameterized by gradual types
= (#18144)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.5/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.5/ty-installer.ps1 | iex"
Allow unions including Any/Unknown as bases
Any/Unknown as bases (#18094)NamedTuple 'fallback' attributes (#18127)type[…] is always assignable to type (#18121)__builtins__ global (#18118)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.4/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.4/ty-installer.ps1 | iex"
Include synthesized arguments in displayed counts for too-many-positional-arguments
too-many-positional-arguments (#18098)redundant-cast false positives when casting to Unknown (#18111)--color for verbose output (#18089)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.3/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.3/ty-installer.ps1 | iex"
Improve diagnostics for failure to call overloaded function
invalid-return-type diagnostic (#18084)invalid-type-expression diagnostics (#18104)types.ModuleType (#18077)https://ty.dev/rules when linking to the rules table (#18072)ty server instead of ty lsp (#360)> in HTML anchor tags in CLI reference (#18096)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.2/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.2/ty-installer.ps1 | iex"
`sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.1/ty-installer.sh | sh `
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.1/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.1-alpha.1/ty-installer.ps1 | iex"
.venv or VIRTUAL_ENV (#18003)--python to accept paths to executables in environments (#17954)assert_type and assert_never (#18050)is_disjoint_from (#18043)type (#18055)type[Any] or type[Unknown] (#18060)DataClassInstance protocol for dataclasses (#18018)hasattr() (#18053)__file__ is always a string inside a Python module (#18071)`sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.8/ty-installer.sh | sh `
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.8/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.8/ty-installer.ps1 | iex"
--config CLI arg (#17697)ty check (#17965)unbound-reference to error (#17936)revealed-type diagnostic to be the range of the argument passed in, not the whole call (#17980)possibly-unresolved-reference by default (#17934)global handling and load-before-global-declaration syntax error (#17637)unused-ignore-comment disabled by default for now (#17955)yield from expressions as being generator functions (#17930)Protocol or Generic base classes with [duplicate-base], not [inconsistent-mro] (#17971)typing.Self in methods (#17689)__all__ from an imported module even when the module is not an ExprName node (#17947)__all__ with a literal tuple or set as well as a literal list (#17948)Protocol[] as generic (#17832)py.typed (#276)lint: prefix from top-level diagnostic preamble (#17987)`sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.7/ty-installer.sh | sh `
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.7/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.7/ty-installer.ps1 | iex"
`sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.6/ty-installer.sh | sh `
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.6/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ty/releases/download/0.0.0-alpha.6/ty-installer.ps1 | iex"
`sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.0.0-alpha.5/ty-installer.sh | sh `
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.0.0-alpha.5/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.0.0-alpha.5/ty-installer.ps1 | iex"
`sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.0.0-alpha.4/ty-installer.sh | sh `
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.0.0-alpha.4/ty-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.0.0-alpha.4/ty-installer.ps1 | iex"
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →