Skip to content
CAI
Software that uses CAICheck a score

astral-sh/uv

69.5

Adequate · 29 July 2026

262.6k

lines of production code

Rust

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 66 → 70 (+3.7)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.08.18) — scores are not directly comparable.

Lenses

  • Code Health 68 → 65 (-2.4)
  • Architecture 97 → 96 (-0.9)
  • Maturity 58 → 70 (+11.6)
  • Readiness 65 → 65 (+0.0)
  • Security 76 → 81 (+4.3)
  • Domain Modelling 100 → 100 (+0.0)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (81)

  • BatchPrefetcherRunner.send_prefetch (cyclomatic 16) (crates/uv-resolver/src/resolver/batch_prefetch.rs)
  • CacheControl.from_iter (cognitive 21) (crates/uv-client/src/httpcache/control.rs)
  • Change coupling: abi_tag.rs ↔ language_tag.rs (crates/uv-platform-tags/src/abi_tag.rs)
  • Change coupling: install.rs ↔ sync.rs (crates/uv/src/commands/pip/install.rs)
  • Change coupling: lib.rs ↔ build_backend.rs (crates/uv-build-backend/src/lib.rs)
  • Change coupling: remove.rs ↔ run.rs (crates/uv/src/commands/project/remove.rs)
  • Change coupling: remove.rs ↔ sync.rs (crates/uv/src/commands/project/remove.rs)
  • Dependency hygiene not measured — no supported dependency manifest was read
  • DerivationChainBuilder.from_state (cognitive 31) (crates/uv-resolver/src/resolver/derivation.rs)
  • DisplaySafeUrl.try_from (cognitive 20) (crates/uv-pypi-types/src/direct_url.rs)
  • DistributionDatabase.build_wheel (cognitive 18) (crates/uv-distribution/src/distribution_database.rs)
  • FlatDependencyGroups.from_dependency_groups (cognitive 20) (crates/uv-workspace/src/dependency_groups.rs)
  • FlatDependencyGroups.from_dependency_groups (cyclomatic 16) (crates/uv-workspace/src/dependency_groups.rs)
  • High: security finding (details withheld)
  • Hotspot: crates/uv-resolver/src/pubgrub/report.rs (crates/uv-resolver/src/pubgrub/report.rs)
  • Hotspot: crates/uv-resolver/src/resolver/mod.rs (crates/uv-resolver/src/resolver/mod.rs)
  • IncompatibleDist.plural_message (cyclomatic 18) (crates/uv-distribution-types/src/prioritized_distribution.rs)
  • IncompatibleDist.singular_message (cyclomatic 18) (crates/uv-distribution-types/src/prioritized_distribution.rs)
  • InstallTarget.validate_groups (cognitive 18) (crates/uv/src/commands/project/install_target.rs)
  • IterativeReporter.build (cyclomatic 18) (crates/uv-resolver/src/pubgrub/report.rs)
  • …and 61 more

New (120)

  • Change coupling: build_requires.rs ↔ requires_dist.rs (crates/uv-distribution/src/metadata/build_requires.rs)
  • Change coupling: lib.rs ↔ mod.rs (crates/uv-cli/src/lib.rs)
  • Change coupling: prerelease.rs ↔ resolution_mode.rs (crates/uv-resolver/src/prerelease.rs)
  • Change coupling: registry_client.rs ↔ base_url.rs (crates/uv-client/src/registry_client.rs)
  • Change coupling: sync.rs ↔ uninstall.rs (crates/uv/src/commands/pip/sync.rs)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • DerivationChainBuilder::from_state::find_path (cognitive 30) (crates/uv-resolver/src/resolver/derivation.rs)
  • DistributionDatabase::download_wheel (cyclomatic 16) (crates/uv-distribution/src/distribution_database.rs)
  • DistributionDatabase::stream_wheel (cognitive 16) (crates/uv-distribution/src/distribution_database.rs)
  • FileTooLong: commands/build_frontend.rs (crates/uv/src/commands/build_frontend.rs)
  • FileTooLong: commands/reporters.rs (crates/uv/src/commands/reporters.rs)
  • FileTooLong: commands/self_update.rs (crates/uv/src/commands/self_update.rs)
  • FileTooLong: export/metadata.rs (crates/uv-resolver/src/lock/export/metadata.rs)
  • FileTooLong: export/pylock_toml.rs (crates/uv-resolver/src/lock/export/pylock_toml.rs)
  • FileTooLong: httpcache/mod.rs (crates/uv-client/src/httpcache/mod.rs)
  • FileTooLong: lock/installable.rs (crates/uv-resolver/src/lock/installable.rs)
  • FileTooLong: lock/mod.rs (crates/uv-resolver/src/lock/mod.rs)
  • FileTooLong: lock/serialize.rs (crates/uv-resolver/src/lock/serialize.rs)
  • FileTooLong: lock/tree.rs (crates/uv-resolver/src/lock/tree.rs)
  • FileTooLong: marker/algebra.rs (crates/uv-pep508/src/marker/algebra.rs)
  • …and 100 more

Changes since last survey

  • 201 commits — 182 feature/other, 19 fixes

By area

  • crates/uv — 54 commits
  • (root) — 53 commits
  • .github/workflows — 43 commits
  • crates/uv-resolver — 8 commits
  • crates/uv-python — 6 commits
  • .github/automations-dispatch.json — 5 commits
  • .github/ost-simple-sts.json — 4 commits
  • crates/uv-cli — 3 commits
  • docs/concepts — 3 commits
  • (repo) — 2 commits
  • agents/prompts — 2 commits
  • crates/uv-client — 2 commits
  • crates/uv-preview — 2 commits
  • crates/uv-pypi-types — 2 commits
  • agents/references — 1 commit
  • crates/uv-dev — 1 commit
  • crates/uv-distribution — 1 commit
  • crates/uv-distribution-types — 1 commit
  • crates/uv-fs — 1 commit
  • crates/uv-install-wheel — 1 commit

Notable commits

  • fix: Add integration tests for reproducible bugs (#20475)
  • fix: Classify source-confirmed correctness issues as bugs (#20619)
  • fix: Enable Ruff default lint rules across the repository (and fix all the errors) (#20650)
  • fix: Fix JSON schema validation with fastjsonschema (#20550)
  • fix: Fix discrepancies in argument parsing of exclude-newer (#20679)
  • fix: Fix inclusion of extra specified in dependency group when listed in a conflict (#20237)
  • fix: Fix misleading pip compile --emit-options error (#20582)
  • fix: Fix more assorted comments (#20624)
  • fix: Fix more overzealous snapshot filters (#20627)
  • fix: Fix up uv-fs::path::Simplified::simple_canonicalize comment (#20581)
  • fix: Fix uv check workspace snapshots and ruff lints (#20649)
  • fix: Fix validate-pyproject-schema-store 2026.07.20 regression (#20547)
  • fix: Fix various comments (#20597)
  • fix: Fix windows test warnings (#20755)
  • fix: Ignore Codex runtime files when creating bug tests (#20674)
  • fix: Keep bug reproduction tests passing and colocated (#20750)
  • fix: Replace ignored regression tests with new packse versions (#20629)
  • fix: Revert changes to workflows for 0.11.30 (#20563)
  • fix: fix(python): allow managed python temp_dir to clean up on drop (#20752)
  • change: Abort panics in release builds for smaller binaries (#20271)
  • …and 181 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

astral-sh/uv was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 July 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit ddc1deb0c9f088ee0d6f4086110c0dd159849726 — the exact code this score is about.
  • Scored under rubric-2026.08.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.