La santa trinidad del Python moderno: uv, ruff y ty

En pleno 2025, el ecosistema Python está en su mejor momento. Hoy vamos a hablar de tres herramientas que están redefiniendo cómo es nuestra experiencia de desarrollo.

Astral

Todo lo que vamos a ver hoy está creado por Astral.

Astral es una empresa que está poniendo patas arriba el ecosistema Python creando herramientas modernas, rápidas y centradas en la experiencia del desarrollador. Fundada por Sebastian McKenzie (el creador de Babel y Rome en el mundo JavaScript), Astral aplica su filosofía de rendimiento y diseño minimalista por encima de todo.

Sus tres principales creaciones son:

  • uv: un gestor de entornos (pipenv), versiones de Python (asdf) y dependencias (poetry).
  • ruff: un linter (flake8) y formateador de código (black).
  • ty: un verificador de tipos (mypy) y servidor LSP (pyright).

Su objetivo principal es hacer que el ecosistema Python sea rápido y atractivo, como tendría que haber sido desde el principio. Mejorando drásticamente la experiencia de usuario de los desarrolladores, dándoles herramientas que hagan el trabajo mucho más eficiente para que puedan centrarse en lo realmente importante: solucionar problemas.


uv

Empezamos por un viejo conocido del blog, del que ya os he hablado anteriormente.

uv es un todo en uno de manual que ha venido a solucionar un montón de problemas que antes requerían varias herramientas. Ahora todo está unificado aquí. Hablo de cosas como:

  • Gestión de dependencias (poetry).
  • Gestión de versiones de Python (asdf).
  • Gestión de entornos virtuales (pipenv).
  • Gestión de workspaces.
  • etc.

Dando siempre prioridad absoluta a que la experiencia de uso sea lo más simple posible, existe documentación como esta sobre cómo usar uv con Docker, que nos permitirá mejorar enormemente la velocidad y eficiencia de nuestras aplicaciones.

Para acabar, diría que una vez que lo pruebas, es difícil no empezar a usarlo en todas partes. Su velocidad es tal que puede parecer que no está funcionando bien.


ruff

Una vez que tenemos nuestro proyecto configurado y funcionando, llega el turno de asegurar la máxima calidad de nuestro código en términos de formato y buenas prácticas. Por suerte, esto es trivial gracias a ruff.

Comúnmente —yo mismo pasé mucho tiempo pensándolo— ruff es conocido por ser un formateador de código ultrarrápido que parece instantáneo. Pero es mucho más que eso: ruff también es un linter, como veremos más adelante.

ruff, como formateador, no tiene como objetivo principal innovar en cuanto al estilo del código. Su propósito inicial es servir como un reemplazo directo y sin complicaciones para Black, manteniendo una experiencia similar para los desarrolladores.

Esta herramienta, además, pone un énfasis especial en el rendimiento y en la integración directa con su propio ecosistema, lo que la convierte en una opción atractiva para quienes ya utilizan uv. Además, ofrece soporte para configurar diversos aspectos del formato del código, como el estilo de comillas preferido, el tipo de indentación, los finales de línea, entre otros parámetros.

Para más detalles sobre su configuración, consulta la documentación oficial.


ruff, en su faceta como linter, ha sido diseñado para actuar como un reemplazo directo de herramientas ampliamente utilizadas en el ecosistema Python, tales como Flake8, isort, pydocstyle, pyupgrade, autoflake, entre otras. Esto significa que puede integrarse fácilmente en flujos de trabajo existentes sin necesidad de realizar grandes cambios. Una de sus características más destacadas es su capacidad para aplicar correcciones automáticas a una gran variedad de errores de lint, lo que facilita el mantenimiento de un código limpio y consistente.

ruff admite más de 800 reglas de linting, lo que le proporciona una cobertura muy amplia. De forma predeterminada, activa las reglas F de Flake8, así como un subconjunto de las reglas E de pycodestyle.

Para consultar la lista completa de reglas disponibles y obtener más información sobre su uso, visita la documentación oficial.


ty

Si todo esto fuera poco, Astral está trabajando en su siguiente herramienta para el chequeo de tipos, además de un servidor LSP, que viene a cambiar las reglas del juego.

Si has trabajado en proyectos grandes en Python haciendo un uso intensivo de los tipos, seguro que conoces mypy y, por tanto, también habrás sufrido su lentitud —por no hablar de sus falsos positivos. Por suerte, este tipo de experiencias tiene los días contados. Pese a que ty aún está en fase beta y no se recomienda su uso en producción, os puedo asegurar que su estado actual impresiona.

Es posible que, si lo usas, eches en falta alguna funcionalidad que aún no está implementada, pero al menos en mis pruebas no he visto nada que mypy haga y ty no. Lo mejor de todo es que lo hace de forma casi instantánea, con una experiencia de desarrollo increíble y heredando todo lo aprendido al crear uv y ruff.

Para consultar la lista completa de reglas disponibles y obtener más información sobre su uso, visita la documentación oficial.


Conclusiones

En resumen, uv, ruff y ty representan una nueva generación de herramientas para desarrolladores Python: rápidas, modernas y pensadas para simplificarte la vida sin renunciar a la potencia. Si aún no las has probado, te animo a darles una oportunidad.

Os dejo por aquí varios repositorios en los que he aplicado todo lo comentado en el artículo por si os sirven de ayuda: