Skip to content
Tech News
← Back to articles

Uv is fantastic, but its package management UX is a mess

read original more articles
Why This Matters

While uv offers impressive speed and simplicity for Python project management, its user experience for routine maintenance tasks like checking outdated packages and managing version constraints is cumbersome and less intuitive than competitors like pnpm and Poetry. This can hinder productivity and pose risks to production stability due to default unsafe version constraints. Addressing these UX issues could significantly improve uv's adoption and reliability in the Python community.

Key Takeaways

uv is fantastic, but its package management UX is a mess

Astral’s uv has taken the Python world by storm, and for good reason. It is blisteringly fast, handles Python versions with ease, and replaces a half-dozen tools with a single binary. I’ve written multiple articles about it before.

Getting started with a new Python project using uv and adding your first dependencies is very easy. But once you move past the initial setup and into the maintenance phase of a project, i.e. checking for outdated packages and performing routine upgrades, the CLI starts to feel surprisingly clunky compared to its peers like pnpm or Poetry.

Finding outdated packages

In my JavaScript projects, if I want to see what needs an update, I run:

$ pnpm outdated

This gives a clean, concise list of outdated packages, their current version, the latest version, and the version allowed by your constraints.

In uv, there is no uv outdated . Instead, you have to memorize the following mouthful:

$ uv tree --outdated --depth 1

The output is also a problem. It doesn’t just show you what is outdated; it shows you your entire top-level dependency tree, with a small annotation next to the ones that have updates available. If you have 50 dependencies and only two are outdated, you still have to scan a 50-line list.

... continue reading