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, WASM execution, and Monty Python plugins.
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
    router -->|JSON request| monty["Python plugin<br/>inside Monty"]
    monty -->|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 or Monty 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.0.79 maps to ty-extended 0.79.0;
  • upstream 0.0.80 maps to ty-extended 0.80.0;
  • upstream 0.0.81 maps to ty-extended 0.81.0;
  • upstream 0.0.82 maps to ty-extended 0.82.0;
  • upstream 0.0.83 maps to ty-extended 0.83.0;
  • upstream 0.0.84 maps to ty-extended 0.84.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.84.2

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.84.2
File Size Uploaded Provenance
ty_extended-0.84.2.tar.gz 7.6 MB Without provenance Details

Built distributions (wheels)

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

Total release size: 184.5 MB

Release files / ty_extended-0.84.2.tar.gz

Download URL ty_extended-0.84.2.tar.gz
Size 7.6 MB
Tags Source
SHA-256 checksum
How to use checksums
91645ea1d88e4139207f1fd3dcb8f2d661b44e0f656976dd8c83ed67793a7518
BLAKE2b-256 checksum
How to use checksums
fa9d31263594d35b6e5cd8047db781e4cb7601d6018e1effb3cba4d4ea0a74dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","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.84.2-py3-none-win_arm64.whl

Download URL ty_extended-0.84.2-py3-none-win_arm64.whl
Size 21.7 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
f36c1e13beadf61b4ffc7d899126546170734facd910be871f9235c3a2299188
BLAKE2b-256 checksum
How to use checksums
2923b0793905e2c8f374a87b0014bc109723535a76156f872081b08ccdbbe32e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","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.84.2-py3-none-win_amd64.whl

Download URL ty_extended-0.84.2-py3-none-win_amd64.whl
Size 23.6 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
9c64485d7be4dc3dead0085e7a9c9821e68c434e86676c2e5180bfbd792824c5
BLAKE2b-256 checksum
How to use checksums
0e01137a1142b430e1fa80a7404f4e4e2dd5c4a2c8b32447f779d4eb971bc444
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","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.84.2-py3-none-musllinux_1_2_x86_64.whl

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

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

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

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

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

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

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