Всем привет!

За последние пару лет компания Astral буквально разрывает Python-мир своими инструментами. Даже если вы не слышали это имя напрямую, с большой вероятностью вы уже пользовались их продуктами — ruff или uv.

И это не преувеличение. И ruff, и uv сегодня фактически стали стандартом индустрии. Например, в свежем релизе PyCharm 2025.3 при создании нового проекта по умолчанию инициализируется именно окружение uv, а не привычный venv. Для open source-проекта — это очень серьёзный показатель доверия со стороны экосистемы.

Открытый исходный код и массовое принятие инструментов Python-разработчиками дали Astral тот самый «кредит доверия», который компания, судя по всему, пока что уверенно оправдывает.

И вот буквально на днях Astral объявили, что их новый «революционный» тайп-чекер ty переходит в стадию бета-тестирования. А если учитывать, что и uv, и ruff формально тоже всё ещё находятся в бете, то можно считать, что ty уже фактически вышел в релиз. Собственно, о нём и поговорим дальше.

Если вам интересны подобные материалы — подписывайтесь на Telegram-канал «Код на салфетке». Там я делюсь гайдами для новичков и полезными инструментами. А прямо сейчас у нас ещё и проходит новогодний розыгрыш.


Кто такие Astral?

Astral — компания, основанная в 2022 году Чарли Маршем. Основной фокус команды — разработка высокопроизводительных инструментов для Python-экосистемы.

Если коротко, Astral делает Python быстрее, удобнее и предсказуемее для повседневной разработки. Компания последовательно развивает набор инструментов, которые закрывают реальные боли разработчиков: скорость, воспроизводимость окружений и качество кода.

Отдельный и принципиальный момент — открытость. Все проекты Astral распространяются под лицензией MIT, а разработка ведётся полностью в open source.

Официальный сайт компании: https://astral.sh/


Что Astral уже выпустили?

Ruff — это сверхбыстрый линтер и форматтер кода для Python, написанный на Rust. На практике он способен заменить сразу целый зоопарк инструментов: Flake8, Black, isort, pydocstyle, pyupgrade, autoflake и многие другие. При этом Ruff работает в десятки, а иногда и в сотни раз быстрее каждого из них по отдельности.

Проект был выпущен в августе 2022 года и практически сразу стал стандартом де-факто во многих командах и open source-проектах.
Страница проекта: https://astral.sh/ruff

uv — быстрый менеджер пакетов и проектов для Python, тоже написанный на Rust. По скорости он превосходит традиционный pip в 10–100 раз и одинаково хорошо работает на macOS, Linux и Windows. Сегодня uv всё чаще выбирают как основу для новых проектов — во многих случаях он уже воспринимается как стандарт индустрии.

Страница проекта: https://github.com/astral-sh/uv

Оба инструмента в своё время наделали много шума в сообществе — и это при том, что формально они до сих пор находятся в статусе Beta.


Новое слово в тайп-чекинге — ty

ty — это сверхбыстрый тайп-чекер и языковой сервер для Python, написанный на Rust. Он создаётся как альтернатива таким инструментам, как mypy, Pyright и Pylance. В декабре 2025 года Astral объявили о выходе ty в стадию бета-тестирования, и инструмент уже можно использовать в реальных проектах.

ty стал третьим крупным продуктом Astral — после менеджера пакетов uv и линтера/форматтера Ruff — и логично продолжает их стратегию: делать базовые инструменты разработки для Python быстрыми и удобными по умолчанию.

Зачем создан ty: миссия и цели

Astral создаёт ty с достаточно амбициозной целью — сделать Python сам��й продуктивной экосистемой программирования в мире. При разработке инструмента команда опирается на три ключевых принципа:

  • Одержимый фокус на производительностиty работает в 10–60 раз быстрее mypy и Pyright без какого-либо кэширования. В режиме работы через редактор разница становится ещё заметнее.

  • Корректность, прагматичность и эргономика — Задача не просто сделать «самый быстрый» тайп-чекер, а создать инструмент с разумным балансом строгой типизации, практичности и удобства для разработчика.

  • Открытая разработкаty распространяется под лицензией MIT и разрабатывается основной командой Astral вместе с десятками активных контрибьюторов.

Производительность: ключевое преимущество

Скорость проверки типов

На больших кодовых базах ty показывает действительно впечатляющие результаты.

Например, проверка проекта home-assistant без использования кэша занимает считанные секунды — это в 10–60 раз быстрее, чем у mypy и Pyright.

Ещё более показательный пример — работа в редакторе. При редактировании ключевого файла в репозитории PyTorch ty пересчитывает диагностику за 4,7 мс. Для сравнения:
Pyright тратит около 386 мс, а Pyrefly — порядка 2,38 секунды. Разница — в десятки и сотни раз.

Инкрементальная архитектура

ty спроектирован с нуля с прицелом на работу в режиме языкового сервера. Вся архитектура инструмента построена вокруг инкрементальности: при изменении файла или отдельной функции пересчитываются только действительно затронутые части программы.

Благодаря детальной (fine-grained) инкрементальности повторные проверки выполняются значительно быстрее, чем при каждом новом запуске ty check. Именно это делает отклик в редакторе почти мгновенным и отличает ty от многих существующих решений.

Как работает ty: технические особенности

Продвинутая система типов

ty приносит в Python-тайп-чекинг несколько возможностей, которых либо нет в других инструментах, либо они реализованы заметно проще.

  • Пересечения типов первого класса (intersection types)ty поддерживает типы вида A & B. На практике это даёт более точное сужение типов после проверок isinstance и других условий, без костылей и ручных cast.

  • Продвинутое сужение типов (type narrowing) — Помимо стандартных проверок, ty умеет сужать типы через hasattr и другие, менее очевидные конструкции, которые часто встречаются в реальном коде.

  • Анализ достижимости (reachability analysis)ty использует вывод типов для поиска недостижимых ветвей кода. Это особенно полезно в библиотеках с версионной логикой и условными импортами — например, в проектах уровня pydantic.

  • Итерации до фиксированной точки (fixpoint iteration) — Инструмент способен корректно выводить типы для символов, которые циклически зависят друг от друга, постепенно уточняя их до момента сходимости. Такие сценарии традиционно сложны для тайп-чекеров.

  • Переопределения (redeclarations)ty допускает повторное объявление одного и того же символа с другим типом в пределах функции, если это логически оправдано. Это делает работу с динамическим Python-кодом менее болезненной.

Система диагностики мирового класса

Отдельный акцент в ty сделан на диагностике ошибок. Она вдохновлена сообщениями компилятора Rust и ориентирована не только на указание проблемы, но и на её объяснение.

Ключевые особенности:

  • Контекст из нескольких файлов — Одна диагностика может собирать информацию сразу из нескольких файлов, показывая не только где ошибка, но и почему она возникла — а иногда и как её исправить.

  • Трёхуровневая система серьёзности — Каждое правило можно настроить как error, warning или info, в зависимости от требований проекта и этапа внедрения типизации.

  • Структурированный и понятный вывод — Сообщения содержат точное расположение (файл, строка, колонка), имя правила в квадратных скобках и читаемое описание проблемы.

  • Цветовое кодирование — Разные уровни серьёзности подсвечиваются разными цветами, что заметно упрощает восприятие ошибок при работе в терминале или редакторе.

Поддержка градуального типизирования

ty изначально разрабатывался с прицелом на существующие кодовые базы. Он старается избегать ложных срабатываний на нетипизированном коде и следует принципу gradual guarantee: частично типизированный код анализируется ровно настолько строго, насколько это возможно без превращения отчёта в шум.

Благодаря этому ty можно внедрять постепенно — без необходимости сразу переписывать весь проект под строгую типизацию.


Как работать с ty

Установка

ty можно установить несколькими способами — Astral традиционно даёт выбор под разные сценарии использования.

Добавление в проект как зависимость разработки:

uv add --dev ty
uv run ty

Подходит, если вы хотите зафиксировать версию ty в проекте и использовать его в CI или в команде.

Глобальная установка с uv:

uv tool install ty@latest

Удобный вариант, если вы часто запускаете ty из разных проектов.

Использование автономного установщика:

curl -LsSf https://astral.sh/ty/install.sh | sh

Подойдёт тем, кто хочет получить готовый бинарник без привязки к Python-окружению.

Установка через pipx:

pipx install ty

Классический вариант для CLI-инструментов в Python-экосистеме.

Установка через pip:

pip install ty

Самый простой способ, но обычно менее предпочтительный для CLI-инструментов.

Базовое использование

CLI у ty минималистичный и интуитивный. Основных команд всего несколько:

  • ty check — проверить проект на ошибки типизации.

  • ty server — запустить языковой сервер.

  • ty version — вывести текущую версию ty.

Проверка всего проекта:

ty check

Проверка конкретного файла:

ty check example.py

Режим наблюдения (watch mode):

ty check --watch

В режиме наблюдения ty отслеживает изменения файлов и перепроверяет только затронутые участки кода, а также все файлы, которые от них зависят. Именно здесь особенно хорошо раскрывается его инкрементальная архитектура.

Выбор файлов

По умолчанию ty запускается на всех Python-файлах в текущей рабочей директории и её поддиректориях. Если команда выполнена внутри проекта, ty начинает анализ с директории, где найден pyproject.toml.

При необходимости можно:

  • указать конкретные файлы или директории для проверки;

  • настроить включаемые и исключаемые пути.

ty автоматически учитывает правила из .gitignore и .ignore: все файлы и директории, перечисленные там, будут пропущены при проверке.

Конфигурация

ty поддерживает детальную настройку правил и поведения:

  • Уровни серьёзности — каждое правило диагностики можно задать как error, warning или ignore.

  • Переопределения для отдельных файлов — гибкая настройка правил под конкретные файлы.

  • Комментарии подавления — возможность точечно отключать отдельные проверки прямо в коде.

Конфигурация может располагаться как на уровне проекта, так и на уровне пользователя. ty ищет настройки в следующих файлах:

  • pyproject.toml (секция [tool.ty])

  • ty.toml (отдельный файл конфигурации)

Приоритет конфигурации:
ty.toml имеет приоритет над настройками в pyproject.toml. Также поддерживается пользовательская конфигурация, ��оторая применяется ко всем проектам и может переопределять проектные правила.

Пример настройки правил:

[tool.ty.rules]
unused-ignore-comment = "warn"
redundant-cast = "ignore"
possibly-missing-attribute = "error"
possibly-missing-import = "error"

Интеграция с редакторами

Для пользователей VS Code, Cursor и совместимых редакторов Astral разработала официальное расширение ty для VS Code. Языковой сервер поддерживает весь стандартный набор возможностей: диагностику, подсветку проблем, быстрые обновления и работу в реальном времени.

В PyCharm, начиная с версии 2025.3, доступна нативная поддержка инструментов Astral — ruff и ty работают «из коробки», без дополнительной настройки.


Заключение

Astral в очередной раз сделали очень сильный ход в экосистеме инструментов для Python-разработчиков. ty показывает действительно впечатляющие результаты — как по скорости работы, так и по качеству диагностики.

Статуса beta здесь бояться не стоит. В контексте продуктов Astral это уже вполне зрелое решение, которое можно использовать в продакшене и которое будет активно развиваться на основе обратной связи от сообщества.

Лично я планирую применять ty в своих проектах. Если будет интерес — сделаю отдельный материал с практическим сравнением ty с mypy и Pyright или покажу реальный пример использования в живом коде.

Если вам интересны подобные материалы, подписывайтесь на Telegram-канал «Код на салфетке». Там я делюсь гайдами для новичков и полезными инструментами. А прямо сейчас у нас ещё и проходит новогодний розыгрыш.