py-uv-audit
A fast vulnerability scanner for uv-managed Python projects, written in Rust and distributed via PyPI as a precompiled binary.
Reads your pyproject.toml + uv.lock, queries the OSV
vulnerability database for every direct and transitive dependency, and prints a
colorized report with actionable fix suggestions.
Installation
pip install py-uv-audit
# or, with uv:
uv tool install py-uv-audit
# or, for Rust users:
cargo install py-uv-audit
Pre-built wheels ship for Linux (x86_64, aarch64), macOS (x86_64, Apple Silicon), and Windows (x86_64). No Rust toolchain required on your machine.
Usage
Run from the root of a uv-managed Python project (directory with pyproject.toml
and uv.lock):
# See what the tool can do (bare invocation prints help)
py-uv-audit
py-uv-audit --help
# Run a scan — both forms work and do the same thing
py-uv-audit audit # scan and report vulnerabilities
py-uv-audit audit --tree # also print dependency tree
py-uv-audit audit --suggest # also print remediation suggestions
py-uv-audit audit --tree --suggest # all of the above
# Flags work at the top level too (subcommand optional)
py-uv-audit --tree --suggest
py-uv-audit --pyproject ./path/to/pyproject.toml --lockfile ./path/to/uv.lock
Example output
=== VULNERABILITY REPORT ===
VULNERABLE: requests v2.31.0
Introduced via: [direct dependency]
- GHSA-9wx4-h78v-vm56: requests vulnerable to .netrc credentials leak
Severity: MODERATE (CVSS_V3)
Fixed in: 2.32.0
Advisory: https://github.com/advisories/GHSA-9wx4-h78v-vm56
--- 1 vulnerable package(s) found (42 total scanned) ---
How it works under the hood
py-uv-audit is a Rust binary, but you install it through pip. The trick is what
ruff and uv itself do: GitHub Actions
compiles the Rust source for every (OS, arch) combination, wraps each binary in
a Python wheel, and publishes those wheels to PyPI. When you run pip install py-uv-audit, pip picks the wheel matching your platform, extracts the binary into
your venv's bin/, and you can run py-uv-audit from the shell. There is no
Python code at runtime — Python is purely the installer.
Development
Requires Rust (≥ 1.85 for edition 2024) and optionally uv + maturin for testing the PyPI build.
# Iterate on the Rust source
cargo run -- --tree --suggest
# Build a release binary
cargo build --release
./target/release/py-uv-audit --tree
# Build a wheel locally (matches what CI produces)
uv tool install "maturin>=1.7,<2.0"
maturin build --release
ls dist/ # py_uv_audit-0.1.1-py3-none-<platform>.whl
# Install the wheel into a throwaway venv to test
uv venv /tmp/v
uv pip install --python /tmp/v dist/py_uv_audit-*.whl
/tmp/v/bin/py-uv-audit --tree
Releasing
Releases are tagged commits on the default branch. GitHub Actions builds wheels for every platform and publishes to PyPI automatically.
# Bump version in Cargo.toml (single source of truth — pyproject.toml reads it dynamically)
git commit -am "bump to 0.2.0"
git tag -a v0.2.0 -m "Release 0.2.0"
git push origin master --tags
License
MIT
Metadata
Release files for py-uv-audit 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| py_uv_audit-0.1.2.tar.gz | 33.5 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| py_uv_audit-0.1.2-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| py_uv_audit-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| py_uv_audit-0.1.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| py_uv_audit-0.1.2-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
Total release size: 7.6 MB
Release files / py_uv_audit-0.1.2.tar.gz
| Download URL | py_uv_audit-0.1.2.tar.gz |
|---|---|
| Size | 33.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
daa57d9bde31ee2ae0be817598d29bb069fd1639e4fcd9fb2614fdab8451fcfc
|
|
BLAKE2b-256 checksum How to use checksums |
af9ab83d5b857b4dfc7dbac47d55227d766c70481357bcae31d2888f49356360
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency logRelease files / py_uv_audit-0.1.2-py3-none-win_amd64.whl
| Download URL | py_uv_audit-0.1.2-py3-none-win_amd64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d548f407c02272df2c7ff71a420527cb1fbaa7b299decfa4eb5b8d4b167ae443
|
|
BLAKE2b-256 checksum How to use checksums |
f2ee57ba7a9ca253f2854cb62c85643f7dbb9a799a2e7017bc1a8adea1cc1650
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency logRelease files / py_uv_audit-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | py_uv_audit-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
eeeb8743de6af47703880cd856f288db11ae48537237b83722aa4f9f0968c565
|
|
BLAKE2b-256 checksum How to use checksums |
3ec14e4c974800a93c156d5492ea2d1486f3e2c96692ff5313f45c859508e183
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency logRelease files / py_uv_audit-0.1.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | py_uv_audit-0.1.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
a268c2bfcf5ed2faae8a7299249b6400524f45e753823afe703ec740e0f0996d
|
|
BLAKE2b-256 checksum How to use checksums |
7ad00977eaefe1c16d3156988b7c9ba5280c3af0f8300078d1e92b49aca1de38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency logRelease files / py_uv_audit-0.1.2-py3-none-macosx_11_0_arm64.whl
| Download URL | py_uv_audit-0.1.2-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5ea38e9c708bf7e0d56d0e84972ebed55227d7955085a83578c7074b643c4357
|
|
BLAKE2b-256 checksum How to use checksums |
3a23c8773558c778e2c6a9353d6d863f07ca40d227c0f92a67a8c704268d5ae3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency log