Skip to main content

ty-extended

PyPI

ty-extended is Astral's ty with a sandboxed semantic plugin system. It keeps the ty command and language server while allowing libraries to contribute library-aware types and diagnostics without linking to checker internals.

Plugin showcase

django-ty is a live plugin for Django ORM semantics, available now from PyPI. It covers model fields, relations, managers, querysets, lookups, settings, forms, and requests, with its behavior measured against django-stubs in a reproducible differential-conformance suite.

What ships

Distribution Published at Purpose
ty-extended PyPI The ty checker and language server with semantic plugin loading and WASM execution.
ty_plugin_sdk crates.io · docs.rs The Rust API used to build a plugin: manifest builders, typed hooks, patch helpers, JSON dispatch, and WASM exports.
ty_plugin_protocol crates.io · docs.rs The stable serialized manifest, request, response, claim, and patch types shared by plugins and the host.

Most plugin authors only need ty_plugin_sdk; it re-exports the protocol crate as ty_plugin_sdk::protocol. The Rust implementation lives in the ruff submodule, backed by ruff-extended.

How plugins run

flowchart LR
    subgraph host["ty-extended"]
        checker["ty semantic checker"] -->|claimed hook| router["Plugin router"]
        router -->|validated patch| checker
    end

    project["Python project"] --> checker
    config["ty.toml + plugin manifest"] --> router
    router -->|JSON request| wasm["WASM plugin<br/>inside Wasmtime"]
    wasm -->|declarative patch| router
    checker --> output["Types + diagnostics"]

The manifest tells ty which symbols and hooks a plugin owns. At a matching semantic query, ty serializes a small request, executes the plugin inside a Wasmtime sandbox, validates the returned patch, and feeds the result back into type inference. Plugins receive protocol data, not ty's internal types, AST ids, or Salsa database.

Getting started

Run the checker directly with uvx:

uvx --from ty-extended ty check

Or add it to a project:

uv add --dev ty-extended
uv run ty check

See installation, type checking, and editor integration for the regular ty workflow.

Configure plugins

An installed plugin package can be discovered from the project's Python environment:

# ty.toml
[plugins]
auto-discover = true

To load a WASM artifact explicitly, configure and trust it for the project:

# ty.toml
[plugins]
enabled = true

[[plugins.plugin]]
id = "my-plugin"
path = ".ty/plugins/my_plugin.wasm"
runtime = "wasm"
manifest-path = ".ty/plugins/my-plugin.json"
trusted = true

Use [tool.ty.plugins] and [[tool.ty.plugins.plugin]] for the same settings in pyproject.toml. See plugin runtime for loading, trust, and sandbox details.

Everything from ty

ty-extended tracks ty's checker and language server. That includes:

  • fast incremental type checking;
  • rich diagnostics and configurable rule levels;
  • gradual typing, advanced narrowing, and intersection types;
  • editor support for navigation, completion, code actions, auto-imports, inlay hints, and hover;
  • the same ty check, ty server, configuration, and project discovery behavior.

The upstream ty documentation remains the reference for those shared features.

Documentation

For information on upstream ty's timeline to a stable release, see its Stable milestone.

FAQ

Is ty-extended a separate checker?

It is a fork of ty that preserves the ty CLI and language server and adds semantic plugins.

Why does it execute plugins as WASM?

WASM gives plugins a stable, serialized boundary and lets the host enforce deterministic fuel, memory, and response-size limits without exposing checker internals or ambient system access.

Where are general ty questions answered?

See ty's upstream typing FAQ. The ty-extended FAQ covers only fork and plugin behavior.

Getting help

For ty-extended packaging, plugin runtime, SDK, or protocol issues, open an issue. For behavior inherited unchanged from ty, check the upstream documentation first.

Contributing

Most implementation work happens in the ruff submodule, which points at regularkevvv/ruff-extended. See the contributing guide for the repository workflow.

Version policy

ty-extended uses SemVer-compatible fork versioning that records the upstream ty base:

  • upstream 0.0.58 maps to the initial ty-extended 0.58.0 release;
  • later fork releases on the same upstream base increment the patch, such as 0.58.1 and 0.58.2;
  • upstream 0.0.59 maps to ty-extended 0.59.0;
  • later releases on that base increment the patch, such as ty-extended 0.59.1;
  • upstream 0.0.60 maps to ty-extended 0.60.0;
  • upstream 0.0.61 maps to ty-extended 0.61.0;
  • upstream 0.0.62 maps to ty-extended 0.62.0;
  • upstream 0.0.63 maps to ty-extended 0.63.0;
  • upstream 0.0.64 maps to ty-extended 0.64.0;
  • upstream 0.0.65 maps to ty-extended 0.65.0;
  • upstream 0.0.66 maps to ty-extended 0.66.0;
  • upstream 0.0.67 maps to ty-extended 0.67.0;
  • upstream 0.0.68 maps to ty-extended 0.68.0;
  • upstream 0.0.69 maps to ty-extended 0.69.0;
  • upstream 0.0.70 maps to ty-extended 0.70.0;
  • upstream 0.0.71 and 0.0.72 were merged but not released: both abort on deeply nested expressions, which upstream fixed in 0.0.73;
  • upstream 0.0.73 maps to ty-extended 0.73.0;
  • upstream 0.0.74 maps to ty-extended 0.74.0;
  • upstream 0.0.75 maps to ty-extended 0.75.0;
  • upstream 0.0.76 maps to ty-extended 0.76.0;
  • upstream 0.0.77 maps to ty-extended 0.77.0;
  • upstream 0.0.78 maps to ty-extended 0.78.0;
  • upstream 0.1.50 maps to ty-extended 0.150.0;
  • once upstream reaches 1.0.0, ty-extended follows that shape directly as 1.0.x.

The protocol and SDK crates are versioned independently. They are pre-1.0, so breaking changes may occur between any two 0.0.x releases.

License

ty is licensed under the MIT license (LICENSE or https://opensource.org/licenses/MIT).

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in ty by you, as defined in the MIT license, shall be licensed as above, without any additional terms or conditions.

Metadata

Release files for ty-extended 0.78.0

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

Source distribution (sdist)

Source distribution for ty-extended 0.78.0
File Size Uploaded Provenance
ty_extended-0.78.0.tar.gz 7.2 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for ty-extended 0.78.0
File
ty_extended-0.78.0-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details
ty_extended-0.78.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
ty_extended-0.78.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
ty_extended-0.78.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
ty_extended-0.78.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
ty_extended-0.78.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
ty_extended-0.78.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
ty_extended-0.78.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 146.0 MB

Release files / ty_extended-0.78.0.tar.gz

Download URL ty_extended-0.78.0.tar.gz
Size 7.2 MB
Tags Source
SHA-256 checksum
How to use checksums
55932f4d147465cc408ef98249c3f4aa862940ca14477c73d39bab1124bec6e5
BLAKE2b-256 checksum
How to use checksums
1c836e9b1a81ce29dbee878616ee1f39f5740aeda7906ed3bb1afc9c06a9e452
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-win_arm64.whl

Download URL ty_extended-0.78.0-py3-none-win_arm64.whl
Size 17.0 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
346aae0c0e01c25ebdb0f38353020e7fb5a943fb909dfcd967e5b40a03ce653f
BLAKE2b-256 checksum
How to use checksums
98dc2ef8754183c6446d58281c18b92008490d20e3d20751bf68ab12c8640641
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-win_amd64.whl

Download URL ty_extended-0.78.0-py3-none-win_amd64.whl
Size 18.6 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
3933f25779160537d24781bcf7376186a32719e472372b6f9d78c460ce3cac49
BLAKE2b-256 checksum
How to use checksums
e28b7ba94eacd1b6e013022ba87d82637dd6b357d069c424cfb186ece6ceccb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-musllinux_1_2_x86_64.whl

Download URL ty_extended-0.78.0-py3-none-musllinux_1_2_x86_64.whl
Size 18.3 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
ad12fab33088fe85072af2f577d79ced678d0114eb1558cd76236db0accf0190
BLAKE2b-256 checksum
How to use checksums
ca1704601115b7e7b30da014c4761ad3b1d9021c05a98a6f20240929020b03b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-musllinux_1_2_aarch64.whl

Download URL ty_extended-0.78.0-py3-none-musllinux_1_2_aarch64.whl
Size 16.7 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
96b8144b3afe8da6e0c68f95a589bcb6c2202f4c29cfab5692dd5e153821d7d2
BLAKE2b-256 checksum
How to use checksums
b2f03906eac8a9b1cfb056b3cf64dfc66006707ea0ebc2fc0f8c46036a76c47b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ty_extended-0.78.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.1 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
215660da4ba477b9fee53da2a60b9c2e415d6edc6f0120c4b893b2221b2aa281
BLAKE2b-256 checksum
How to use checksums
57d6db539698e7c74a083aaa9278c2398d82e6689c4e374d6ce0bc490a87a183
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ty_extended-0.78.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 16.7 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
87160af9a4083a19ffa50372b44416f68032f0a67ff2b79c516937c7eea890e2
BLAKE2b-256 checksum
How to use checksums
224945b99f9616d3c632852edcbc033bbdb0e2e6619e01675760ea865ffe780c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-macosx_11_0_arm64.whl

Download URL ty_extended-0.78.0-py3-none-macosx_11_0_arm64.whl
Size 16.1 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c4e2908f08cfb2468e1e10f22888364adbb2e90113a609da9aa6145f8c4293d0
BLAKE2b-256 checksum
How to use checksums
f53c93f5d9097769c0d8d35ac405df85c3f3eafa0bde13a51d8364efb5ad43ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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 / ty_extended-0.78.0-py3-none-macosx_10_12_x86_64.whl

Download URL ty_extended-0.78.0-py3-none-macosx_10_12_x86_64.whl
Size 17.3 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b4ac7a073daed0ac51c83870d11631c281031df68bd09a2d782144d431ad4f17
BLAKE2b-256 checksum
How to use checksums
e0a680a5ad9c3431e3b5fcfd1f5ba054ac52ca03f550b7b7f519a0c5f360d77e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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}

Security for ty-extended 0.78.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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