Skip to main content

Persistent in-process execution engine for uv — internal dependency of omnipkg

Project description

uv-ffi

Persistent in-process execution engine for uv's package resolver and installer.

While uv is designed as a world-class CLI tool, uv-ffi re-architects its core as a resident engine. By keeping a Tokio runtime, HTTP connection pools, site-packages metadata, and interpreter state warm in memory across calls, it achieves execution speeds limited only by filesystem I/O.

Used internally by omnipkg, but directly callable from any long-lived Python process.


Installation

Standard platforms

pip install uv-ffi

Covers Linux x86_64/aarch64, macOS arm64/x86_64/universal2, Windows amd64/arm64 — all via ABI3 wheels (Python ≥ 3.8).

Exotic platforms (musl Alpine, armv7, riscv64, s390x, ppc64le, free-threaded CPython 3.13t, PyPy, GraalPy, Windows x86)

pip install uv-ffi --extra-index-url https://1minds3t.github.io/uv-ffi/

400+ wheels hosted on GitHub Releases, indexed at the URL above. These were removed from PyPI to stay under the 10 GB storage limit.

Build from source (requires Rust toolchain)

pip install uv-ffi --no-binary uv-ffi

If the Rust build fails, pre-built wheels for your platform are almost certainly available via the extra-index-url above.


Usage

from uv_ffi import run, invalidate_site_packages_cache, patch_site_packages_cache, get_site_packages_cache, clear_registry_cache

PY = '/path/to/your/python'
BASE = f'pip install --python {PY} --link-mode symlink'

# First call initializes the engine (~65-75ms, one-time cost)
rc, installed, removed = run(f'{BASE} rich==14.3.2')

# Subsequent calls use the warm engine (~5-6ms)
rc, installed, removed = run(f'{BASE} rich==14.3.3')
# -> installed=[('rich', '14.3.3')] removed=[('rich', '14.3.2')]

# Isolated install into a target directory (bubble install)
rc, installed, removed = run(f'pip install --python {PY} --target /tmp/myenv rich==14.3.2')
# Main site-packages cache is untouched

# Inspect engine's current in-memory view of the environment
state = get_site_packages_cache()
# -> [('rich', '14.3.3'), ('requests', '2.31.0'), ...]

The key is keeping the import alive in a long-lived process. Each new Python subprocess pays ~70ms (interpreter startup + engine init). In a warm daemon worker, the same operation costs ~6ms.


Performance

Measured wall-clock time on Linux (NVMe SSD, Python 3.11, pre-warmed uv cache).

No-op (package already satisfied)

Method Wall time user sys
uv pip install (subprocess) ~11–12ms 0.007s 0.006s
uv-ffi in-process (warm engine) ~0.4–2ms 0.000s 0.000s
Speedup ~6–8×

Real swap (uninstall + reinstall different version)

Method Wall time user sys
uv pip install (subprocess) ~17–20ms 0.010s 0.013s
uv-ffi in-process (warm engine) ~5.4–6.5ms 0.000s 0.002s
Speedup ~2.5–3×

Cache operations

Method Latency Notes
uv full site-packages rescan ~2.5ms paid on every CLI invocation
invalidate_site_packages_cache() ~2.5ms forced rescan, same cost as uv
patch_site_packages_cache(installed, removed) ~25µs ~100× faster than full rescan
Post-install cache update (internal) 0.0ms zero-disk: built from resolver changelog

The ~5–6ms floor on a real swap is the hardware limit — VFS symlink create/unlink on NVMe. uv-ffi eliminates all software overhead above that floor.

Important: calling uv-ffi via a new subprocess each time (~73ms avg) is slower than calling uv directly (~19ms). The gains only materialize when the engine stays warm across multiple calls in the same process.


API

run(cmd: str) -> (int, list[tuple[str,str]], list[tuple[str,str]])

Execute a uv command in-process. Returns (exit_code, installed, removed) where installed/removed are lists of (name, version) tuples.

rc, installed, removed = run('pip install --python /usr/bin/python3 rich==14.3.3')

Supports all flags omnipkg uses on the fast path: --python, --link-mode, --target, --index-url, --extra-index-url, --reinstall, -q. Any unrecognized flag falls back to the full clap parse path automatically.

get_site_packages_cache() -> list[tuple[str, str]]

Returns the engine's current in-memory view of the environment as [(name, version), ...]. Returns an empty list if the cache has not been populated yet (before first install call). Zero disk I/O.

state = get_site_packages_cache()
# [('rich', '14.3.3'), ('requests', '2.31.0'), ...]

invalidate_site_packages_cache()

Forces a full disk rescan on the next install call. Use when an external tool has modified the environment and you don't have the changelog. Cost: ~2.5ms on next call.

patch_site_packages_cache(installed, removed)

Surgically update the in-memory cache with a known delta. ~100× faster than a full rescan. Returns True if the cache was live and patched, False if no cache was active.

patch_site_packages_cache(
    installed=[['rich', '14.3.3']],
    removed=[['rich', '14.3.2']],
)

clear_registry_cache()

Drops the persistent RegistryClient memory cache. Use this if you suspect the internal PyPI Simple API cache is stale. Note: The engine already auto-heals on install failures, so manual invocation is rarely needed.

C ABI: omnipkg_uv_run_c

int omnipkg_uv_run_c(const char *cmd, char *out_json, int max_out);

Runs a uv command and writes a JSON changelog to out_json:

{"installed":[["rich","14.3.3"]],"removed":[["rich","14.3.2"]]}

Returns the exit code. Safe to call from Go, C++, Rust, or any language with C FFI.


Isolated "Bubble" Installs (--target)

uv-ffi provides cache-safe isolated directory installs via --target. Standard uv evaluates --target against the host interpreter's installed packages, which can produce incorrect results and poisons in-memory state. uv-ffi routes --target installs through a pre-warmed BUBBLE_ENVIRONMENT:

  • The resolver sees a clean slate — no existing packages, no cross-contamination
  • SITE_PACKAGES_CACHE (which reflects main env state) is never read or written during a bubble install
  • The BUBBLE_INSTALL atomic flag ensures the main env cache is fully protected for the duration
  • After the install, the flag is reset and the next main-env call proceeds normally
# Install into isolated dir — main env cache untouched
rc, installed, _ = run(f'pip install --python {PY} --target /tmp/app_env flask==3.0.0')

This is how omnipkg generates multiversion isolated environments entirely in-memory.


Cache Coherency

uv-ffi holds site-packages state in RAM and trusts it completely. If an external tool (uv, pip, conda) modifies the environment without notifying uv-ffi, the next call may return rc=0, inst=[], rem=[] — a silent false no-op.

Verified behavior:

[1] uv-ffi swap:                   6.51ms  installed=[('rich','14.3.3')] removed=[('rich','14.3.2')]
[2] uv pip install rich==14.3.2:  18.65ms  (disk=14.3.2, cache still thinks 14.3.3)
[3] uv-ffi ask for rich==14.3.3:   0.46ms  inst=[] rem=[]  ← silent no-op, wrong answer
[4] uv-ffi ask for rich==14.3.2:  11.35ms  inst=[('rich','14.3.2')]  ← rescan + swap

If uv-ffi is the only thing modifying the environment, no action is needed. After every install, the cache is updated directly from the resolver's in-memory changelog at zero disk I/O cost — it's always coherent with no overhead.

For environments shared with external tools, two options:

Option A — FS watcher + delta patch (omnipkg's approach) Watch site-packages for filesystem events. On each change, call patch_site_packages_cache(installed, removed). Cost: ~25µs per patch. Full coherency at near-zero overhead.

Option B — Force rescan Call invalidate_site_packages_cache() before any call where external modification is possible. Cost: ~2.5ms on next call. Simple, no watcher needed.


Architecture

Python API  →  run() / patch_site_packages_cache() / get_site_packages_cache()
C ABI       →  omnipkg_uv_run_c() → JSON changelog
Fast path   →  try_parse_ffi_install() → run_pip_install_direct() [bypasses clap entirely]
Slow path   →  clap parse → uv::run() [pip freeze, uninstall, etc.]
Globals     →  ENGINE / BUBBLE_ENVIRONMENT / SITE_PACKAGES_CACHE / REGISTRY_CLIENT / PYTHON_ENVIRONMENT

Persistent UvEngine singleton Interpreter discovery, platform tagging, cache init, and TLS pool setup happen once at import time and are held in a OnceLock. All subsequent calls skip directly to resolution. Includes a pre-warmed BUBBLE_ENVIRONMENT for --target installs.

Zero-clap fast path pip install commands are parsed directly via try_parse_ffi_install() — a hand-written token parser covering all flags omnipkg uses. Internal Rust structs are constructed directly, skipping clap entirely (~2ms saved per call). Unrecognized flags fall back to clap automatically.

Persistent RegistryClient and PythonEnvironment The HTTP client (TLS pools, connection pools) and Python environment (interpreter metadata, marker environment) are stored as global singletons after first use. Subsequent calls reuse them directly — no socket teardown, no filesystem search.

PyPI Registry Auto-Healing The FFI engine keeps PyPI API responses in RAM for maximum speed. If a newly published package version is requested and not found in the RAM cache, the engine detects the internal failure, automatically drops its registry cache, and retries the network fetch transparently. You never need to restart the process to see newly published packages.

Zero-disk post-install cache update After a successful install, SITE_PACKAGES_CACHE is updated directly from the resolver's changelog using in-memory InstalledRegistryDist construction. No dist-info directory scan, no try_from_path I/O. Post-install cache update cost: 0.0ms.

SitePackages::add_dist() A new method added to uv-installer's SitePackages that surgically inserts a distribution into the in-memory index without touching disk. Used by both the post-install zero-disk update and patch_site_packages_cache().

Idempotent initialization Logging setup (setup_logging) and miette::set_hook are now called with let _ = — safe to call repeatedly in a long-running process without double-init panics.

Persistent Tokio runtime The main() path previously created a new Tokio runtime on every call and called shutdown_background() on exit (leaving pending HTTP requests). The runtime is now stored in a OnceLock and reused across calls — no teardown overhead, no leaked requests.


Profiling

Set UV_FFI_PROFILE=1 to enable millisecond-precision phase tracing:

[UV-PROFILE] cache-reused: 0.12ms
[UV-PROFILE] post-site-packages-scan: 0.08ms (cached)
[UV-PROFILE] post-settings-resolve: 0.31ms
[UV-PROFILE] post-execute-plan: 4.82ms
[UV-PROFILE] post-changelog-from-local: 4.83ms
[UV-PROFILE] post-changelog-write: 4.91ms
[UV-SYNC] Zero-disk cache update: done
[UV-PROFILE] post-explicit-drop: 0.02ms
[UV-PROFILE] post-await: 5.14ms

Coexistence with vanilla uv

uv-ffi installs are fully compatible with vanilla uv operations in the same environment. uv-ffi writes complete dist-info including RECORD, INSTALLER, and REQUESTED — so uv pip uninstall, uv pip install, and other standard toolchain operations work correctly on packages uv-ffi installed.

Coexistence means no corruption, not automatic cache synchronization — see cache coherency section above.


Platform Support

Platform Architectures Python Index
Linux glibc ≥ 2.17 x86_64, aarch64 3.8–3.14 PyPI + Extra
Linux glibc ≥ 2.17 i686, armv7, ppc64le, s390x 3.8–3.14 Extra only
Linux glibc ≥ 2.31 riscv64 3.8–3.14 Extra only
Linux musl ≥ 1.2 x86_64, aarch64 3.8–3.14 PyPI + Extra
Linux musl ≥ 1.2 armv7, i686, ppc64le 3.8–3.14 Extra only
macOS (universal2) x86_64 + arm64 3.8–3.14 PyPI + Extra
Windows x64 / ARM64 amd64, aarch64 3.8–3.14 PyPI + Extra
Windows x86 i686 3.8–3.14 Extra only
CPython 3.13t (free-threaded) x86_64, aarch64 3.13t Extra only
PyPy 3.9/3.10 x86_64 3.9–3.10 Extra only
GraalPy x86_64 Extra only

Version Correspondence

uv-ffi versions track the upstream uv release they are built against.

uv-ffi uv upstream Notes
0.10.8 0.10.8 Initial release
0.10.8.post1 0.10.8 Persistent UvEngine, delta cache patching, zero-clap fast path, verified uv coexistence
0.10.8.post2 0.10.8 Windows cache path fix (%LOCALAPPDATA%), platform-safe temp dir fallback
0.10.8.post3 0.10.8 Windows ARM64 wheels, Tokio PathError fix on Windows runners
0.10.8.post4 0.10.8 Bubble environments (--target isolation), persistent RegistryClient + PythonEnvironment, zero-disk post-install cache update, JSON C ABI
0.10.8.post5 0.10.8 CI hardening, per-platform PyPI checks, sdist publishing, Windows PowerShell fixes
0.10.8.post6 0.10.8 Auto-healing PyPI registry cache, detailed FFI error messages (4-tuple return), clear_registry_cache()
0.10.8.post7 0.10.8 ABI3 wheels (one wheel per arch, Python ≥ 3.8), split PyPI/GitHub Releases distribution, GH Pages index

Benchmark Methodology

  • In-process tests: 10-run alternating swap (rich==14.3.2rich==14.3.3) in a single warm Python session
  • Subprocess tests: 8 separate subprocess.run calls, new Python process each time
  • Interference test: uv subprocess between uv-ffi calls, 1s settle time
  • uv cache pre-warmed before all runs
  • Hardware: Linux, NVMe Gen4, Python 3.11.14

Attribution

This crate links against uv source code from astral-sh/uv, copyright Astral Software Inc., used under the MIT License. See NOTICE for full attribution.

Not affiliated with, endorsed by, or sponsored by Astral Software Inc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uv_ffi-0.10.8.post9.tar.gz (4.0 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

uv_ffi-0.10.8.post9-cp38-abi3-win_arm64.whl (22.6 MB view details)

Uploaded CPython 3.8+Windows ARM64

uv_ffi-0.10.8.post9-cp38-abi3-win_amd64.whl (24.5 MB view details)

Uploaded CPython 3.8+Windows x86-64

uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_x86_64.whl (23.5 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ x86-64

uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_aarch64.whl (22.3 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_x86_64.whl (23.3 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ x86-64

uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_aarch64.whl (22.1 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

uv_ffi-0.10.8.post9-cp38-abi3-macosx_11_0_arm64.whl (20.3 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.whl (21.5 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (41.7 MB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file uv_ffi-0.10.8.post9.tar.gz.

File metadata

  • Download URL: uv_ffi-0.10.8.post9.tar.gz
  • Upload date:
  • Size: 4.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for uv_ffi-0.10.8.post9.tar.gz
Algorithm Hash digest
SHA256 64c7c045c8639c97b331dc0f38be1ca0ce116b9a615f360408cba6dab9859609
MD5 f2acbf2ab51f083f4fb7e6d20d9f87af
BLAKE2b-256 2b210d58e4bc606ceda589317f2f546e71574f4adf7e0bf8b741483479f5baf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9.tar.gz:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 8aa9d58639ada4b44605c32d367a6b829f8ad8095f6bacf627c8254f88f1d213
MD5 e0646a320af7a45284146f5be84c07e7
BLAKE2b-256 481e1f81abcf5fa77cb77ca3a2b56c2fce872009c3530e5e0fd0f17d0c8a75ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-win_arm64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: uv_ffi-0.10.8.post9-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 24.5 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ef094fcf1e2f64c91def95f01d84cd036dba9dbabf07db955828b716cb81779a
MD5 015f9203c3f6c262fe0eb53b7f87da78
BLAKE2b-256 4d8440db2196e06dbe2b5cef4a7f1dc1154e2b37d29ebc4782106584f1469528

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-win_amd64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a154357a2865cbfc6af4977be758f69920f7d1ce1c6c68380a12e1fa735a0949
MD5 64f9f852ea41c7cca7d2b5a024c2a80d
BLAKE2b-256 7cd5e7aa9e2a06e60f119722c051bd36ee2b081e5ba39e94f8346845e3a761c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 192b125463ed43e23bb5d37f2ca58ca8811a5aaf5b66c534390e38d30262c19b
MD5 12e47862e82177ab225c178b581698a5
BLAKE2b-256 19714c88b76c8ee5409c6cbd36510b1169a7e8ac19c9b69ecca2fa6e988caa96

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 52531fadfb1529d77429ea1d9654ab3c685f6a14a3e3d755e4d3e2d67dfa7c2f
MD5 2477af2aa1aaf71c2b810a61893bd1e2
BLAKE2b-256 b0b3ccea3fe20201592c0bcb9b1077092031667993001f3cf1b589bda0a2be60

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0cc5bbb3022d1905d04a0fca0e7b0569507ac130443d723a47d98898993cc381
MD5 4d2f9a4c986200a377e9578f277cf7ec
BLAKE2b-256 97112a3a24be32e38bb7b77fd0267ad530c10d077912d53be79711c265eb31aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 464760dc8cd6132cd45eb99900ac123eb808a6aa4c41583cd515150728783718
MD5 e36eb6062cad0c1c6a367aec9bd60440
BLAKE2b-256 3e97129fe08107e9824e5422863daa0373485dc386246e82acfc6c5d09ae691f

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b56e5014043231322006fefaacb5563246f489cd3bf988e620d0d8f7b70a165a
MD5 74fa8f75e4ca0f19ecd24c53c116c28f
BLAKE2b-256 de05bafba09c9ef50cd3257bc0c701781bbc58b7c8032e36364a3838038ad985

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 324c439ceb12d1e892bbba4c0457650401a42241e9a8748e2c1b4537ca7639c5
MD5 45dfae3e16516da0c664543086fe991f
BLAKE2b-256 c27201b5b967513d597554b15b70715ade356dddcc2fc8a62e397aef111be2ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 fc9445d1651fb624dc5a3858fb571a49b248b98fc2f902f7d90e88e3b3d297ae
MD5 bce7beebba4a55664d7c205b43bcaa25
BLAKE2b-256 a229770da0b84c7901b1021ab9df855042a018197e629bf572817defa0fc0d86

See more details on using hashes here.

Provenance

The following attestation bundles were made for uv_ffi-0.10.8.post9-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: publish.yml on 1minds3t/uv-ffi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page