A fork of Astral's ty with support for semantic plugins.
It keeps the ty command and language server.
Run with uvx:
uvx --from ty-extended ty checkOr add it to your project:
uv add --dev ty-extended
uv run ty checkflowchart 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 inside Monty<br/>embedded by default, optional worker"]
monty -->|declarative patch| router
checker --> output["Types + diagnostics"]
- Rust plugins compile to WebAssembly and run in Wasmtime, using
ty_plugin_sdk. - Python plugins run in Monty, using the bundled
ty.plugin_sdk. No compilation is needed.
Monty runs in-process by default, with no external runtime dependency. Separate
worker processes are opt-in through the
monty-workers extra and project configuration.
Enable installed plugins in ty.toml:
[plugins]
auto-discover = true- Installation and editor setup
- Plugin authoring and runtime configuration
- FAQ and changelog
- Upstream ty documentation for checker and typing features
Report fork or plugin issues in the issue tracker.
Rust implementation changes belong in ruff-extended,
which is pinned by the ruff submodule. See CONTRIBUTING.md.
Versions track the upstream ty base: ty-extended 0.84.2 builds on ty 0.0.84, with fork-only
releases incrementing the patch. SDK and protocol crates are versioned independently; breaking
changes may occur between their pre-1.0 releases.
MIT (LICENSE).
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.