Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

typsht

type checker agnostic parallel type checking tool. run multiple python type checkers (mypy, pyright, ty, pyre) in parallel on the same code.

inspired by tox, but specifically for type checkers. get comprehensive type checking coverage by running multiple type checkers simultaneously.

installation

quick start (no installation)

use uvx to run typsht without installing it:

# check inline code
uvx typsht 'def foo(x: int) -> str: return x'

# check a file
uvx typsht --file my_module.py

install to your project

uv add typsht

usage

check inline code:

# this will catch the type error across all checkers
typsht 'def foo(x: int) -> str: return x'

check a file:

typsht --file my_module.py

run specific type checkers:

typsht --file my_module.py --checkers mypy --checkers ty

show detailed output from each checker:

typsht --file my_module.py --verbose

project support

typsht automatically detects when checking files in a uv project (containing pyproject.toml or uv.lock) and runs type checkers using uv run --project, giving them access to your local development packages.

this is useful for library developers who want to verify type annotations work across multiple checkers:

# in a project with local packages installed in editable mode
uvx typsht --file repros/test_case.py --verbose

# type checkers will have access to your local package imports

inline code always runs in an isolated environment.

pytest plugin

typsht includes a pytest plugin for running type safety tests across multiple type checkers. the key feature is inline assertions that work identically across mypy, pyright, and ty.

inline assertions (checker-agnostic)

use # R: type for reveal_type assertions and # E: pattern for error assertions:

- case: reveal_type_works_across_checkers
  checkers: [mypy, pyright, ty]
  main: |
    x: list[str] = ["a", "b"]
    reveal_type(x)  # R: list[str]

- case: error_detected_across_checkers
  checkers: [mypy, pyright, ty]
  main: |
    def foo(x: int) -> str:
        return x  # E: return

the plugin normalizes type representations (builtins.int -> int, List -> list, Literal[42] -> int) so the same assertion works across all checkers.

legacy format (pytest-mypy-plugins compatible)

also supports the pytest-mypy-plugins format for migrating existing tests:

- case: mypy_specific_output
  main: |
    x: int = 42
    reveal_type(x)
  out: 'Revealed type is "builtins.int"'

- case: should_pass_check
  main: |
    def add(a: int, b: int) -> int:
        return a + b
  should_pass: true

run the tests:

pytest tests/typesafety/

programmatic assertions

for python tests, use the assertion helpers directly:

from typsht import assert_type_equals, assert_type_error, assert_no_errors, CheckerType

def test_reveal_type():
    assert_type_equals('''
        x: int = 1
        reveal_type(x)
    ''', line=2, expected_type="int", checkers=[CheckerType.MYPY, CheckerType.PYRIGHT, CheckerType.TY])

def test_catches_error():
    assert_type_error('''
        def foo(x: int) -> str:
            return x
    ''', error_pattern="return", checkers=[CheckerType.MYPY, CheckerType.PYRIGHT, CheckerType.TY])

def test_valid_code():
    assert_no_errors('''
        def add(a: int, b: int) -> int:
            return a + b
    ''', checkers=[CheckerType.MYPY, CheckerType.PYRIGHT, CheckerType.TY])

supported type checkers

by default, typsht runs:

  • mypy - widely adopted static type checker
  • pyright - fast static type checker from microsoft
  • ty - experimental blazing-fast type checker

also available (requires project configuration):

  • pyre - facebook's type checker (requires .pyre_configuration)

development

install dependencies:

uv sync

run tests:

uv run pytest

install pre-commit hooks:

uv run pre-commit install

Metadata

Release files for typsht 0.0.1a5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for typsht 0.0.1a5
File Size Uploaded
typsht-0.0.1a5.tar.gz 53.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for typsht 0.0.1a5
File Interpreter ABI Platform
typsht-0.0.1a5-py3-none-any.whl Python 3 none any Details

Total release size: 67.0 kB

Release files / typsht-0.0.1a5.tar.gz

Download URL typsht-0.0.1a5.tar.gz
Size 53.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d29fb4a5f6012fa2499a4a23b859ca3d6729a574fb029e9ad6c9dcf6c21cf55c
BLAKE2b-256 checksum
How to use checksums
3c497c8c408fb0add97c0756d8a3f104add93967a1e55a803e5958fc3472ac38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / typsht-0.0.1a5-py3-none-any.whl

Download URL typsht-0.0.1a5-py3-none-any.whl
Size 13.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
63d1a1a6ab43de94d83b844c78b7cc6aa10de33fab3a9e9b062048c1ab9f8d61
BLAKE2b-256 checksum
How to use checksums
fb45df70ab266a0cc7ac214e6508a4cd08d9d43f35b6206503326ba06fd98835
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page