uv
A Python package and project manager written in Rust that resolves, locks and installs dependencies, and installs Python itself, from one fast binary.
- What it is
- Package managers
- Type
- Open source
- Made by
- Astral
- License
- Apache 2.0 or MIT
- Facts checked
- 9 October 2026
What it is
uv is a single static binary with no Python dependency of its own. It covers jobs that used to need pip, pip-tools, pipx, Poetry, pyenv, twine and virtualenv: uv add writes a dependency into pyproject.toml, resolves it with pubgrub-rs (a Rust port of the PubGrub algorithm), records the answer in uv.lock and installs it into a .venv next to the project. uv run locks and syncs before running anything, so the environment is never out of date; in CI, uv sync --locked fails instead of updating a stale lockfile. uv.lock is universal: one TOML file covers every operating system, architecture and Python version, and uv export turns it into the standard pylock.toml for other installers. Around that sit uvx (run a command-line tool in a throwaway environment), uv python install (portable CPython builds from python-build-standalone, which Astral maintains), PEP 723 single-file scripts, Cargo-style workspaces and a uv pip interface that works as a drop-in for pip commands. A global cache with hardlinks or copy-on-write keeps repeated installs fast and small on disk.
uv is built by Astral, the company behind Ruff. In March 2026 Astral announced an agreement to join OpenAI as part of the Codex team; Charlie Marsh wrote that OpenAI will keep supporting the open-source tools, and the astral-sh GitHub organisation now describes its tools as “from @OpenAI”. uv is still versioned 0.x: minor releases carry breaking changes, as 0.13.0 (October 2026) did by making Python 3.15 the default download.
Why teams pick it
- Fast: in Astral’s launch benchmark it was 8 to 10 times faster than pip and pip-tools without a cache and 80 to 115 times faster with a warm one
- One tool from Python install to lockfile to running tools, with no Python needed to install it
- A universal lockfile, so a Mac laptop and a Linux CI runner install from the same
uv.lock - Follows the packaging standards:
[project]metadata, PEP 735 dependency groups, PEP 723 scripts andpylock.tomlexport
Watch out for
uv.lockis uv’s own format; other tools need an export, and some uv features can’t be expressed inpylock.toml- Pre-1.0 versioning: a minor version bump can break builds, so pin the uv version in CI
- One company sets the roadmap, and that company agreed in March 2026 to join OpenAI; OpenAI has said it will keep supporting the open-source tools
- Universal resolution is stricter than resolving for one machine: every dependency must work across the project’s whole
requires-pythonrange
Alternatives
What all package managers have in common →How it fits with other technologies
A project, a lockfile, a one-off tool and a standard export (uv 0.13.0) · bash
uv init --bare app && cd app # just a pyproject.toml
uv add httpx # resolve, write uv.lock, create .venv, install
# Resolved 8 packages in 10ms
# + httpx==0.28.1 (plus 6 dependencies)
uv tree --depth 1
# app v0.1.0
# └── httpx v0.28.1
uv run python -c "import httpx; print(httpx.__version__)" # 0.28.1
uvx ruff --version # a tool in a cached, throwaway environment: ruff 0.17.0
uv export -o pylock.toml # the PEP 751 lockfile, for installers other than uv
uv sync --locked # in CI: install exactly what uv.lock says, or failSee it in a real stack
No architecture uses uv yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2024–2026
By the early 2020s a Python project could need half a dozen tools: pyenv for the interpreter, virtualenv for environments, pip to install, pip-tools to lock, pipx for command-line tools, Poetry or PDM to manage the project. Astral, the company Charlie Marsh founded in 2023 around the Ruff linter, set out to build “a Cargo for Python” instead.
uv shipped in February 2024 as a deliberately narrow first step: a Rust drop-in for pip, pip-tools and virtualenv that existing projects could adopt with no configuration. Astral took over Armin Ronacher’s experimental Rye project at the same time, folding its ideas in. In August 2024 uv grew into the full tool: uv lock, uv sync and uv run with cross-platform lockfiles, uv tool and uvx, uv python install and PEP 723 scripts. Astral adopted python-build-standalone, the portable CPython builds uv installs, from Gregory Szorc in December 2024.
By August 2025 Astral counted over 100 million installs a month across its tools and 500 million requests a day to uv, and launched pyx, a hosted package registry designed as a backend for uv. In March 2026 Astral agreed to join OpenAI’s Codex team, promising to keep building the tools in the open.
Why it’s built this way
- Start as a drop-in for pip and pip-tools
- Copying an interface people already used made adoption nearly free, and solving installation first gave the later, more opinionated project commands a solid base.
- A single static binary with no Python dependency
- uv can be installed before any Python exists and then install Python itself, avoiding the
pipversuspip3versuspip3.7confusion of tools that live inside an interpreter. - One universal lockfile
- The first release locked for one platform, like pip-tools. Since August 2024
uv.lockrecords the packages for every OS, architecture and Python version, so teams on mixed machines share one file. - A global cache linked into environments
- Hardlinks and copy-on-write let many virtual environments share one copy of each package, so recreating an environment avoids downloading or building anything again and uses little extra disk.
Timeline
- 2024
uv released in February as a pip and pip-tools replacement; Astral takes over Rye
- 2024
August: project management, cross-platform lockfiles, tools and Python installs
- 2024
December: python-build-standalone moves to Astral
- 2025
pyx, Astral’s package registry for uv, enters beta
- 2026
March: Astral agrees to join OpenAI’s Codex team
- 2026
June:
uv auditand opt-in malware checks in preview - 2026
October: uv 0.13.0 makes Python 3.15 the default
- Astral blog: Announcing Astral, the company behind Ruff (Apr 2023)
- Astral blog: uv, Python packaging in Rust (Feb 2024)
- Astral blog: uv, unified Python packaging (Aug 2024)
- Astral blog: A new home for python-build-standalone (Dec 2024)
- Astral blog: pyx, a Python-native package registry, now in beta (Aug 2025)
- Astral blog: Astral to join OpenAI (Mar 2026)
- Astral blog: Vulnerability and malware checks in uv (Jun 2026)
- uv 0.13.0 release notes (Oct 2026)
Sources15 · facts checked 9 October 2026
- uv README (highlights, licence)
- uv docs: Project structure and files (uv.lock, .venv, pylock.toml)
- uv docs: Locking and syncing
- uv docs: Resolution (universal resolution)
- uv docs: Resolver internals (pubgrub-rs)
- uv docs: Managing dependencies (PEP 735 dependency groups)
- uv docs: Exporting lockfiles
- uv docs: Tools
- uv docs: Python versions
- uv docs: Using uv in GitHub Actions (setup-uv)
- uv docs: Versioning policy
- Astral blog: uv, Python packaging in Rust (Feb 2024; benchmarks, cache)
- Astral blog: Astral to join OpenAI (Mar 2026)
- GitHub: astral-sh organisation (“from @OpenAI”)
- uv 0.13.0 release notes (Oct 2026)