Universal Dependency Resolver
Your Python backend needs PyPI. Your React frontend needs npm. Your Rust CLI needs crates.io. Your Go service needs Go modules. One udr lock gives you one lock file for all of them.
# Resolve across ecosystems in one command
udr resolve flask>=2.0 torch@pypi react@^18
# Lock your project across all manifests
udr lock
# Check system + CVE + deprecated packages — 18 ecosystems at once
udr check --cve --deprecated
Install
pip install ud-resolver
# For full capacity — Rust-backed PubGrub + Z3 + richer system data:
pip install "ud-resolver[z3,pubgrub,system]"
The base install resolves dependencies, detects GPU/OS/CPU, and handles GPU variant selection — no extras needed. The extras add speed (Rust PubGrub on large graphs), conflict detection (Z3 for CUDA XOR rules), and richer telemetry (GPU temperature, per-process memory). All solvers fall back gracefully when an extra is missing.
Optional extras
| Extra | What it adds |
|---|---|
[system] |
Richer system data via Python libs (pynvml → GPU temp/util, psutil → per-process memory, cpuinfo → detailed model). Base ud-resolver already detects GPU/OS/CPU via nvidia-smi/lspci/platform — no extra needed for constraint resolution. |
[z3] |
Z3 SAT solver (46MB) for CUDA XOR conflict rules + cross-eco constraints. GPU version filtering works without Z3 (pre-filtered before solver). |
[pubgrub] |
Rust-backed PubGrub solver (faster CDCL on 100+ package graphs). Falls back to pure-Python automatically if wheel unavailable / build fails. |
[postgres] |
PostgreSQL support |
[monitoring] |
OpenTelemetry, Sentry, Prometheus instrumentation |
[all] |
Everything above |
Features
| Capability | Detail |
|---|---|
| 25 ecosystems (18 resolvable + 7 query-only) | Resolvable: PyPI, Conda, npm, Crates.io, Maven, Go Modules, APT, APK, CocoaPods, Homebrew, NuGet, Packagist, RubyGems, Pub, Gradle, Swift, Hex, Haskell — Query-only (version info, manifest parsing, no SAT traversal): Nix, GNU Guix, Docker, Helm, Terraform, Vcpkg, Conan — Internal: Docs DB, Custom DB |
| SAT-solver resolution | AutoSolver (default, profiles graph → Z3/PubGrub/Hybrid per workload) with per-ecosystem isolation, CUDA-aware conflict detection. |
| System-aware | Detects OS, CPU, GPU, CUDA, Python, Node.js, GCC, Java — resolution adapts to your environment. |
| GPU-aware | Automatically selects CUDA variants (e.g. torch 2.1.2+cu121) when NVIDIA GPU detected. Supports CUDA, ROCm, Intel GPU, and Metal. For PyPI torch, consults the pytorch wheel index and caps + rewrites to the matching +cu<ver> build (e.g. --cuda 12.1 → torch 2.5.1+cu121). |
| 15 export formats | requirements.txt, package.json, Dockerfile, docker-compose.yml, pyproject.toml, environment.yml, Cargo.toml, build.gradle, pom.xml, CMakeLists.txt, install.sh, install.bat, Gemfile, composer.json, go.mod |
| 26 CLI commands | serve, check, resolve, lock, graph, verify, list-ecosystems, update, install, init, migrate, completion, scan, why, outdated, diff, search, sbom, export, details, system-info, auth, index, tools, versions, dependencies |
| 59 REST API endpoints | Full programmatic API with auto-generated Swagger docs. |
| Desktop GUI | Standalone Electron app — no Python or Node.js needed. |
| Zero config | SQLite by default, in-memory cache, no Docker required. |
| Lock file | Reproducible udr.lock with full system snapshot, integrity hashes, and dependency provenance. |
Why UDR?
- Cross-ecosystem resolution: A Python package that transitively depends on an npm package gets solved in one pass, not two.
- SAT-solver engine: Real Z3/PubGrub CDCL solver, not greedy backtracking. Finds valid solutions dependency graph heuristics miss.
- System-aware: GPU type + CUDA version are resolution constraints —
torch 2.1.2+cu121selected automatically when NVIDIA GPU detected; for PyPItorchthe pytorch wheel index is consulted to cap and rewrite to the matching+cu<ver>build (e.g.--cuda 12.1→torch 2.5.1+cu121). - Supply chain built-in: CVE scanning, license compliance, deprecation checks, lock-file signing (Ed25519), SBOM export (SPDX/CycloneDX), policy engine.
- 3 solver backends: AutoSolver profiles your graph and selects Z3, PubGrub, or Hybrid — with fallback chain if the first choice fails.
Quick Start
# Resolve cross-ecosystem packages
udr resolve numpy pandas scikit-learn
udr resolve react vue -e npm
udr resolve serde tokio -e crates
# Lock a project's dependencies
udr lock
udr lock --manifest requirements.txt --dry-run
# Validate lock file
udr verify
# Show dependency tree
udr graph flask django
# Scan a GitHub repo without cloning
udr scan --github https://github.com/user/repo
# List all supported ecosystems
udr list-ecosystems
🐍 Use as a Python Library
import asyncio
from backend.core.data_aggregator import DataAggregator
from backend.core.system_scanner import SystemScanner
from backend.orchestrator.resolve import create_solver
async def main():
scanner = SystemScanner()
system_info = await scanner.scan_all()
aggregator = DataAggregator()
info = await aggregator.get_package_info(
"torch", ecosystem="pypi",
include_dependencies=True, include_versions=True,
)
resolver = create_solver()
result = resolver.resolve_dependencies(
packages=[{"name": "flask", "version": ">=2.0"}],
system_info=system_info,
)
asyncio.run(main())
🔄 How It Works
Your request ──► Fetch metadata from registry APIs
│
▼
Scan target system (OS, GPU, CUDA, runtimes)
│
▼
Resolve conflicts with AutoSolver (Z3 / PubGrub / Hybrid)
│
▼
Export to 15 formats or write lock file
Links
- GitHub — source, issues, releases
- Documentation — hosted docs site (User Guide, CLI, API, Architecture)
- CLI Reference
- Architecture
- API Docs
- Changelog
- License: MIT
Release files for ud-resolver 1.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ud_resolver-1.4.3.tar.gz | 438.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ud_resolver-1.4.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 956.6 kB
Release files / ud_resolver-1.4.3.tar.gz
| Download URL | ud_resolver-1.4.3.tar.gz |
|---|---|
| Size | 438.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c3d8aa06600cd005a0a4713e0d3b5053fb025ccb2b2c16768794cfae6f410038
|
|
BLAKE2b-256 checksum How to use checksums |
40ef0e817039aa0f2f52da16a5bcc6d0e774f53cca5db966b87dc0865cb11179
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / ud_resolver-1.4.3-py3-none-any.whl
| Download URL | ud_resolver-1.4.3-py3-none-any.whl |
|---|---|
| Size | 517.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
730197bcbd0a2ca81c8312204fba2d97139d04e3f5519c54917e2ff1028c875a
|
|
BLAKE2b-256 checksum How to use checksums |
f06d416158fcd1a284c4769f7368073d7e1ace8cbe5cb5a6aa36ca3beb42ea33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency log