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.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.1

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.1
File Size Uploaded Provenance
ty_extended-0.84.1.tar.gz 7.5 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for ty-extended 0.84.1
File
ty_extended-0.84.1-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details
ty_extended-0.84.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
ty_extended-0.84.1-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
ty_extended-0.84.1-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
ty_extended-0.84.1-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.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
ty_extended-0.84.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
ty_extended-0.84.1-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 150.8 MB

Release files / ty_extended-0.84.1.tar.gz

Download URL ty_extended-0.84.1.tar.gz
Size 7.5 MB
Tags Source
SHA-256 checksum
How to use checksums
c66ac733d5365350c1f8a7b874bf07f1f1d2eb3465a1f4c135e968e96e65f5b2
BLAKE2b-256 checksum
How to use checksums
811bd21d807d170cfa0d65753a5d95c0e00b1cd0219defa4113a02017cc05686
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.1-py3-none-win_arm64.whl

Download URL ty_extended-0.84.1-py3-none-win_arm64.whl
Size 17.5 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
3f80f5f07284bca8cec9d9230b4d83439670d25b803b0406bb9987217ea1326a
BLAKE2b-256 checksum
How to use checksums
6d51cd4caa4c3eebb2084e00f9824c2c900954246ba732019991e403f3cd231b
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.1-py3-none-win_amd64.whl

Download URL ty_extended-0.84.1-py3-none-win_amd64.whl
Size 19.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
e2dcc2ca6754a317015daad955d91eb1955c0cefa1e4720a44f7c525284bf906
BLAKE2b-256 checksum
How to use checksums
7b1f1976f391b4fc76a92e0536388c85383ad57ebdd2b1ab81dac6cd0cb9f0f0
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.1-py3-none-musllinux_1_2_x86_64.whl

Download URL ty_extended-0.84.1-py3-none-musllinux_1_2_x86_64.whl
Size 18.9 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
13fc74b9b7f86450bf2be573d9cf846305f7e1f20821a28634f06e8c739e117c
BLAKE2b-256 checksum
How to use checksums
b1ff378244fd29303c7a4e59032a5038b36efd3f4f0a309bb28426628a92f737
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.1-py3-none-musllinux_1_2_aarch64.whl

Download URL ty_extended-0.84.1-py3-none-musllinux_1_2_aarch64.whl
Size 17.1 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
6f83a0296573c7fde2b924d327782d6676745a7e3203b4f87d312f71f83f26e5
BLAKE2b-256 checksum
How to use checksums
cef039c7e57e8c12bd5e4aebd6aabf868c4bab4a073af5263a184e9c41b75158
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.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ty_extended-0.84.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.6 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
3da5e0f8a7c0e64af46b7f2a23ce89ad885b47de548d2716ae2aa93f30c7a232
BLAKE2b-256 checksum
How to use checksums
ec64acdddf26ccb4f33009c660eacaf5cab9ad507d0dc61de753bae280b463ba
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.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ty_extended-0.84.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 17.3 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
72f5ec54d76c5e8a0cf93ad26ec5d4a541485e48c65a0f539e92667e462ea6eb
BLAKE2b-256 checksum
How to use checksums
5604abf7ce6b192b3e1761d3afc7bee66bebb85b9b760d128231113abee9f08c
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.1-py3-none-macosx_11_0_arm64.whl

Download URL ty_extended-0.84.1-py3-none-macosx_11_0_arm64.whl
Size 16.7 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
218e1f3ee06492dbb0ef0fe1c1e47a8e1471d04443ea9605807782f0ce4047a9
BLAKE2b-256 checksum
How to use checksums
b6db0bbd87c579ead9e7801fd66d7b634fa2ec012db8c9c958e63c790085038a
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.1-py3-none-macosx_10_12_x86_64.whl

Download URL ty_extended-0.84.1-py3-none-macosx_10_12_x86_64.whl
Size 17.9 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
6999a0e371e8d0f46cb9c583c8789c30d4bc46ad8786f2d51ae66c6884c0fce4
BLAKE2b-256 checksum
How to use checksums
39a591185c71a7f0f823d9d2d7c1206f11c5fcff3068d28ae84768ea4e2b471a
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.1

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