hyperuuid
Python 3.14 finally added uuid.uuid7() to stdlib, with a real monotonic counter — genuinely well done. If you're stuck on 3.11-3.13 like most production code still is, stdlib has no v6/v7 at all, and this package gives you both today without waiting for a runtime upgrade — and on any version, the native extension below outruns stdlib outright.
RFC 9562 UUID v4 (random), v5 (deterministic), v6 and v7 (time-sortable) generation. A
native extension built with PyO3 — the Rust core linked directly into the
CPython extension module, no dlopen, no C-ABI hop, no ctypes marshalling, no runtime
bridge.
Install
pip install hyperuuid
Real platform-specific wheels, so it lands at native speed with nothing to compile, the same
way numpy or cryptography does — no compiler needed and no dependencies at all; the PyO3
extension is the package. The wheels are abi3, so one per platform covers every CPython
from the 3.11 floor up — eight native ones, plus a ninth for Pyodide in the browser
(below):
| x64 | arm64 | |
|---|---|---|
Linux, glibc 2.28 or newer (manylinux_2_28) |
✓ | ✓ |
Linux, musl 1.2 or newer (musllinux_1_2 — Alpine) |
✓ | ✓ |
| macOS | ✓ | ✓ |
| Windows | ✓ | ✓ |
Only wheels are published — there is no sdist. An interpreter none of the wheels matches
(a glibc older than 2.28, PyPy, free-threaded CPython) gets No matching distribution found
from pip, not a source build.
On Alpine the musl wheel needs nothing beyond the base image — it carries its own copy of
libgcc_s — and the whole suite passes on a bare python:3.14-alpine.
Not yet covered: free-threaded (no-GIL) CPython (3.13t/3.14t). An abi3 wheel is
ignored by a free-threaded interpreter (it's a genuinely separate ABI, not a compatibility
flag), so closing this gap means building and shipping additional version-specific
cp313t/cp314t wheels alongside the existing ones, not just a build-flag change. PyO3
itself has supported free-threading (opt-in, gil_used = false) since 0.23; the cleaner
long-term fix — PEP 803's abi3t stable ABI, one build
covering both GIL and no-GIL — needs Python 3.15+, not yet released. Revisiting once that
lands or free-threaded adoption justifies the extra wheel legs. The stance in the code
today: the extension module does not declare gil_used = false, so a build from a checkout
for a free-threaded interpreter imports with the GIL switched back on (CPython says so in a
RuntimeWarning) — correct, just not parallel. And no call releases the GIL: each is
nanoseconds to microseconds of pure Rust, less than the handoff would cost.
The package is typed: it ships py.typed and a stub for the extension module, so mypy and
pyright see uuid.UUID and datetime.datetime rather than Any.
Usage
import uuid
import hyperuuid
hyperuuid.new_v4()
hyperuuid.new_v5(uuid.NAMESPACE_DNS, "example.com")
hyperuuid.new_v6()
id4 = hyperuuid.new_v7()
hyperuuid.v7_timestamp(id4) # recover the embedded UTC datetime.datetime
hyperuuid.v7_unix_millis(id4) # the same instant as Unix-epoch milliseconds, an int
hyperuuid.get_timestamp(id4) # None instead of assuming id4 is v6/v7
hyperuuid.v7_to_sql_order(id4) # byte order SQL Server's uniqueidentifier needs to sort by creation order
# One native call, one random-bytes fetch, one counter reservation for the whole batch:
batch = hyperuuid.new_v7_batch(1000)
Returns stdlib uuid.UUID objects — built through the
fastuuid-style fast path (UUID.__new__ plus
object.__setattr__ of the int/is_safe slots), since UUID.__init__'s own validation
costs more than the entire native call; the test suite pins constructor indistinguishability
so this can't silently drift from a real UUID(bytes=...) construction. For v5's namespace
argument, use the RFC 9562
Section 6.6 well-known namespaces already in the standard library —
uuid.NAMESPACE_DNS, NAMESPACE_URL, NAMESPACE_OID, NAMESPACE_X500 — no need
for this package to redefine them. hyperuuid.NIL/MAX are the RFC 9562
§5.9/§5.10 special-value UUIDs. hyperuuid.v7_timestamp(id) recovers the embedded
UTC datetime.datetime from a version 7 UUID (raises OverflowError past year
9999 — the RFC's 48-bit field holds values up to year 10889, but
datetime.datetime cannot); hyperuuid.v6_timestamp(id) does the same for version
6, and can never raise that way — v6's 60-bit tick count, offset from the 1582 UUID
epoch, tops out around the year 5236. hyperuuid.v6_unix_millis(id) and
v7_unix_millis(id) return the same instant as an int of Unix-epoch milliseconds, with
no datetime built around it — the cheaper call, and for version 7 the one that carries
the whole 48-bit field. new_v6/new_v7 also accept a
datetime.datetime directly in place of a raw millisecond count — converted in exact
integer arithmetic and truncated to the millisecond, never rounded into the next one; a
naive datetime is read as local time, the way datetime.timestamp() reads it.
get_timestamp(id)
is the version-agnostic counterpart to v6_timestamp/v7_timestamp — it checks
id.version itself and returns None for anything but a genuine v6/v7 UUID, instead
of assuming the caller already knows. hyperuuid.new_v6_batch(count)/
new_v7_batch(count) generate count UUIDs sharing one timestamp capture and one
native call, instead of count of each. hyperuuid.v7_to_sql_order(id)/
v7_from_sql_order(id) convert a version 7 UUID to and from the byte order SQL
Server's uniqueidentifier needs on the wire to sort by creation order — computed
once in the native Rust core rather than reimplemented in Python, and verified
there (and independently against the real System.Data.SqlTypes.SqlGuid
comparator in the C# binding's test suite). v6_to_sql_order(id)/
v6_from_sql_order(id) do the same for version 6, though same-millisecond v6
UUIDs aren't guaranteed to sort correctly afterward — v6 has no counter, so
clock_seq/node (not the timestamp) decide ties, the same pre-existing RFC 9562
v6 limitation plain order already has.
A caller's bug is an exception: an argument of the
wrong type is a TypeError; a timestamp no field can hold (negative, or past v7's 48 bits
or v6's 60) and a batch count outside 0 to 4294967295 are a ValueError; a batch too
large to allocate is a MemoryError, never a batch of some other size.
hyperuuid.native_version() names the core actually loaded, "major.minor.patch", decoded
from the same packed hyperuuid_version export every other binding probes.
hyperuuid.BACKEND is always "native", the PyO3 extension.
In the browser (Pyodide)
The same PyO3 extension, compiled for Pyodide's Emscripten target, is published to PyPI as
hyperuuid-X.Y.Z-cp311-abi3-pyemscripten_2026_0_wasm32.whl (about 74 KB), so micropip finds
it the way pip finds the native wheels:
import micropip
await micropip.install("hyperuuid")
import uuid, hyperuuid
hyperuuid.new_v7()
hyperuuid.new_v5(uuid.NAMESPACE_DNS, "example.com")
It is the native backend (hyperuuid.BACKEND == "native"), with the same API and no
JavaScript bridge: randomness comes from Emscripten's getentropy (the browser's
crypto.getRandomValues), and the clock is Date.now(), so v6/v7 timestamps have
millisecond resolution there, as everywhere. CI installs the wheel into Pyodide and runs this
package's whole pytest suite in it twice, under Node and in headless Chrome.
The wheel is for Pyodide 314.x (Python 3.14, platform pyemscripten_2026_0). It is
abi3, but a Pyodide ABI is one Python minor built with one exact Emscripten, so each
Pyodide ABI year needs its own wheel: earlier Pyodide lines (0.29.x and older) find no wheel,
and the next line is covered by the release that adds its build.
Bulk generation into a buffer
fill_v7(buffer) and fill_v6(buffer) write raw RFC 9562-ordered bytes — 16 per UUID — straight into a bytearray you already own, in one native call, without constructing a single uuid.UUID:
import hyperuuid
buf = bytearray(1000 * 16)
hyperuuid.fill_v7(buf) # 1000 v7 UUIDs, one timestamp capture
first = bytes(buf[0:16]) # ready for a BYTEA / uniqueidentifier parameter
This is roughly 15x faster than new_v7_batch, and the reason is worth understanding, because it decides whether you should use it at all:
| path | µs / 1000 UUIDs |
|---|---|
new_v7_batch(1000) → list[UUID] |
142 |
fill_v7(bytearray) |
9.7 |
fill_v7, then build uuid.UUID objects in Python |
940 |
new_v7_batch does not spend its time in the native call — it spends it building a thousand uuid.UUID instances. Skip that and Python lands at 9.7 µs, which is the same native ceiling the Go (9.8 µs) and C# (9.6 µs) bindings hit for identical work.
The third row is the catch, and it inverts the advice: if you need uuid.UUID objects, keep using new_v7_batch. Filling bytes and constructing UUIDs from them in Python is more than six times as slow, because the extension builds them through a much faster path internally than you can from Python. Reach for fill_v7 only when bytes are the destination — a database parameter, a wire format, a bulk COPY — not a step on the way to objects.
len(buffer) must be a multiple of 16, and a zero-length buffer writes nothing. Both functions take an optional datetime or Unix-epoch millisecond timestamp, same as the rest of the API.
One deliberate limitation: these take a bytearray, not any writable buffer. Supporting memoryview, mmap or NumPy arrays needs Py_buffer, which entered CPython's stable ABI in 3.11. That is this extension's floor as of this release (abi3-py311), so the wider buffer protocol is no longer ruled out; it is simply not built yet.
Why not stdlib uuid?
This is the one binding where the honest answer genuinely depends on which Python you're running — this package supports 3.11+, and stdlib's own v6/v7 story changed dramatically partway through that range:
- Python 3.11-3.13: stdlib has
uuid1/uuid3/uuid4/uuid5— no v6, no v7, at all. This package is the only way to get either without a third-party dependency, and the native extension outruns stdlib's v4/v5 on top of that. - Python 3.14+: stdlib added
uuid.uuid6()/uuid7()/uuid8(), anduuid7()genuinely implements RFC 9562 §6.2's monotonic counter (42 bits of it) — this isn't a naive random-bits implementation, it's a real, well-built addition, and it's what the benchmarks below measure against. This package still wins across the board there — see Benchmarks — plus:- Cross-language consistency. The same Rust core mints v5 namespace UUIDs for Go, C#, Ruby, and every other binding in this repo — verified in CI to match stdlib's own
uuid.uuid5byte-for-byte. If your stack isn't Python-only, or you need every service minting IDs from the literal same engine rather than N independent (if individually correct) implementations, that's not something stdlib can offer regardless of version. - Batch generation.
new_v7_batch(count)shares one timestamp capture, one random-bytes fetch, and one counter reservation across the whole batch — stdlib'suuid7()has no bulk-generation entry point, so a loop of individual calls is the only option there. - One behavior across your whole supported range. If your package needs to run on 3.11 and 3.14, this avoids
sys.version_info-gated code paths for v6/v7 support.
- Cross-language consistency. The same Rust core mints v5 namespace UUIDs for Go, C#, Ruby, and every other binding in this repo — verified in CI to match stdlib's own
Benchmarks
Measured with pyperf (linux-x64 on an Intel Core i9-11900H, CPython 3.14.7 as Fedora builds it, python bench_uuid.py --fast; see bench_uuid.py). Linking the core directly into the extension module — no ctypes boundary to cross — puts every generator ahead of stdlib's own C-accelerated implementations:
| Call | hyperuuid | vs. closest stdlib equivalent |
|---|---|---|
hyperuuid.new_v4() |
243 ns | uuid.uuid4(): 718 ns — 3.0x faster |
hyperuuid.new_v5(...) |
374 ns | uuid.uuid5(...): 1.58 µs — 4.2x faster |
hyperuuid.new_v6(...) |
351 ns | uuid.uuid6() (3.14+): 1.26 µs — 3.6x faster |
hyperuuid.new_v7(...) |
354 ns | uuid.uuid7() (3.14+): 1.28 µs — 3.6x faster |
Most of what a call costs is the uuid.UUID it hands back, so the extension builds that through the C API's own entry points — an instance allocated and its two slots set, no Python-level call — all of it inside the stable ABI, so one wheel still covers every CPython from 3.11.
Batch generation amortizes the rest of the per-call cost:
| Mean | vs. individual calls | |
|---|---|---|
new_v6_batch(1000) |
139 µs ± 5 µs | vs. 1000x new_v6(): 333 µs ± 8 µs — 2.4x |
new_v7_batch(1000) |
135 µs ± 6 µs | vs. 1000x new_v7(): 339 µs ± 11 µs — 2.5x |
Timestamp extraction vs. stdlib's .time property
CPython 3.14's uuid.UUID.time has real version-aware extraction logic of its own (branches on version, computes the right thing for v6/v7, not just a v1-only stub), so this is a genuine head-to-head — each call measured against a UUID generated once outside the timed loop, so only the extraction itself is timed:
| Call | hyperuuid | vs. stdlib .time |
|---|---|---|
hyperuuid.v6_unix_millis(...) → int |
163 ns | UUID.time (v6): 479 ns — 2.9x faster |
hyperuuid.v7_unix_millis(...) → int |
161 ns | UUID.time (v7): 401 ns — 2.5x faster |
hyperuuid.v6_timestamp(...) → datetime |
250 ns | UUID.time (v6): 479 ns — 1.9x faster |
hyperuuid.v7_timestamp(...) → datetime |
252 ns | UUID.time (v7): 401 ns — 1.6x faster |
.time returns an int, so the *_unix_millis rows are the like-for-like ones; the *_timestamp rows hand back a timezone-aware datetime and are still ahead. Reach for the integer form when the value is going to be stored, compared or forwarded as a number.
Worth noting: stdlib's .time for v6 returns raw Gregorian-epoch 100ns ticks, not Unix
milliseconds like hyperuuid.v6_timestamp — different units if you actually need the value,
but a fair timing comparison of "the cost of pulling the embedded time out" either way.
Reproduce: maturin develop --release (from python/, inside a virtualenv — pyproject.toml
already points maturin at ../rust/Cargo.toml and the python feature) to build the release
extension — pip install -e ".[bench]" alone builds debug by default and will understate
every number above — then pip install pyperf and
python bench_uuid.py --fast -o results.json.
Verifying provenance
Every wheel PyPI serves, the Pyodide one included, carries a GitHub build-provenance attestation. The wheels are built,
installed and attested in CI by the shared hyper-build-wheels.yml workflow in
SkunkWerkx/.github, and release.yml verifies each one before publishing it unchanged, so
the verify command names that signer:
pip download hyperuuid==X.Y.Z --no-deps -d .
gh attestation verify hyperuuid-X.Y.Z-*.whl \
--repo SkunkWerkx/HyperUuid --signer-repo SkunkWerkx/.github
# or: gh attestation verify hyperuuid-X.Y.Z-*.whl --owner SkunkWerkx
This is a separate thing from the PEP 740 attestations
gh-action-pypi-publish already sends to PyPI itself, which PyPI-side tooling checks on its
own — this is the GitHub/Sigstore transparency-log route, checked with gh attestation verify, the same route every other artifact in this project uses. See
csharp/README.md's provenance section for why
an artifact signed by the shared workflow needs --signer-repo.
License
Metadata
Release files for hyperuuid 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| hyperuuid-0.6.1-cp311-abi3-win_arm64.whl | CPython 3.11 | abi3 | Windows ARM64 | Details |
| hyperuuid-0.6.1-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details |
| hyperuuid-0.6.1-cp311-abi3-pyemscripten_2026_0_wasm32.whl | CPython 3.11 | abi3 | PyEmscripten 2026.0+ WebAssembly | Details |
| hyperuuid-0.6.1-cp311-abi3-musllinux_1_2_x86_64.whl | CPython 3.11 | abi3 | Linux musl 1.2+ x86-64 | Details |
| hyperuuid-0.6.1-cp311-abi3-musllinux_1_2_aarch64.whl | CPython 3.11 | abi3 | Linux musl 1.2+ ARM64 | Details |
| hyperuuid-0.6.1-cp311-abi3-manylinux_2_28_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| hyperuuid-0.6.1-cp311-abi3-manylinux_2_28_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| hyperuuid-0.6.1-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| hyperuuid-0.6.1-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 2.0 MB
Release files / hyperuuid-0.6.1-cp311-abi3-win_arm64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-win_arm64.whl |
|---|---|
| Size | 132.3 kB |
| Tags | CPython 3.11 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e2c5a54799cd53917b24d743fe7aff5bc2f5df6ae53679916f76dbffb09919b1
|
|
BLAKE2b-256 checksum How to use checksums |
772899535e4e8b1088b592fbda4245af7a1da35eaee67c83ebf900c3e186266e
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-win_amd64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 135.2 kB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
11be2b115fc99b5c36d1132878e1886375fa2c396918a63e11327a4abb7308ed
|
|
BLAKE2b-256 checksum How to use checksums |
c859324902229673985d199a19b6ba411c410c62ca9404bb1aeb6bd47cf81796
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-pyemscripten_2026_0_wasm32.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-pyemscripten_2026_0_wasm32.whl |
|---|---|
| Size | 73.4 kB |
| Tags | CPython 3.11 PyEmscripten 2026.0+ WebAssembly abi3 |
|
SHA-256 checksum How to use checksums |
128b20b2e4b70f718441027cc4784ec68c7e26ede8127d4ca4f98849dc3a998d
|
|
BLAKE2b-256 checksum How to use checksums |
5ccc8cd21b845869d032c4c8b36586fd0a404d00cbd811f8794b72f0fa5f9632
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-musllinux_1_2_x86_64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 433.1 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
dc2b0b96b0f6b61dc1b66780584ed8537a6e7152edb2886ab1c672e2dbb0eee9
|
|
BLAKE2b-256 checksum How to use checksums |
3fdce64a3a789268cbb1119f9a3d83196b544b7ebeb21b2ac03f8841b22ff3d1
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-musllinux_1_2_aarch64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 394.0 kB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
2834961064f9a0538535ef46d18fb809adc8907afb9b2987e1bb45e14b3121c1
|
|
BLAKE2b-256 checksum How to use checksums |
e164a1e26f9c217021ea6b461a7ee7bf9bd3718e2c1cdc3b163f5e9156e14fc1
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-manylinux_2_28_x86_64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 221.4 kB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9e7a2f7f55a417ae65db4ca7c8eb976d875f1f441e31622d7a7e3bd942734aa4
|
|
BLAKE2b-256 checksum How to use checksums |
a1ef47a4b9abfb45c509374afa8b3678dfe24213dc4e7f535faa525d5c8ef849
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-manylinux_2_28_aarch64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 216.4 kB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
0dc46084ed4435db43e05cc0b0ecd79311bf232778956f20a3cea390e7af9779
|
|
BLAKE2b-256 checksum How to use checksums |
4f81384ca548cf6ed67105211129366d6be0a6387dbe553e843a2b8d0a4e1c3f
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 204.5 kB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
763a146aee68f205293cd8de8f109c3c4e5df2425a069ab9679e6ed0b5e47982
|
|
BLAKE2b-256 checksum How to use checksums |
9ebe18f50c4dded318c1d4296dd893c27740ba6a8edd269d9689d2124cd2404a
|
| 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 Oct 3, 2026.
Transparency logRelease files / hyperuuid-0.6.1-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | hyperuuid-0.6.1-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 215.8 kB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
b04c52bf9bef04aad02229bedcae58ad545936dd71cd91f4d0c5c727f6963b9e
|
|
BLAKE2b-256 checksum How to use checksums |
56b3d452b67513acec52c3365a2dd8f6df07cde7b6c951c79ad1b348470d63c2
|
| 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 Oct 3, 2026.
Transparency log