Skip to main content

ultravin

CI Status PyPI Version License

An extremely fast, fully offline NHTSA vPIC VIN decoder, written in Rust.

VINs decoded per second: ultravin on 12 cores 2,375,066 sorted / 1,439,568 random, on 4 cores 1,606,742 / 891,536, on 1 core 473,698 / 226,265 vs corgi v3 83, corgi v2 33, NHTSA MSSQL 22.5, NHTSA Postgres 19.5
VINs decoded per second over twenty million unique VINs, in random or sorted order.

  • ⚡️ ~64,000× faster than NHTSA's own spVinDecode — ~1.44 million VIN/s on 12 cores
  • 🦀 Pure Rust core, shipped as a Python library and a Rust crate
  • 📦 The entire vPIC vehicle database baked into the wheel
  • 🔌 Fully offline — no network, no database, no data files at runtime
  • 🎯 Full-field vPIC parity, tested across decoding rules and their interactions — with documented upstream defects corrected (accuracy policy, evidence)
  • 🐍 Installable via pip, with a CLI and a library API
  • 🗃️ Parquet in, parquet out — decodes a dataset of any size in the memory of one chunk

ultravin brings the complete spVinDecode algorithm into your process: vehicle attributes, model-year resolution, VIN correction, errors, and provenance. It checks every output field against NHTSA's unmodified Postgres procedure and corrects documented defects in the upstream data and procedures. You get vPIC fidelity with better answers on those defective cases, at over 63,000× the NHTSA SQL Server baseline on 12 cores. Benchmarks and reproduction.

The complete vehicle database ships inside the binary. No network, no database server, no runtime data files. Install it and decode.

Getting Started

Installation

uv add ultravin

Prebuilt wheels require Python 3.10+ and nothing else — the data ships inside the wheel.

Usage

From Python:

import ultravin

r = ultravin.decode("1HGCM82633A004352")

r["model_year"]  # 2003
r["wmi"]  # '1HG'
r["check_digit_valid"]  # True
r["error_codes"]  # [0]

# `attributes` is the decoded vehicle, one entry per vPIC variable:
r["attributes"]["Make"]  # 'HONDA'
r["attributes"]["Model"]  # 'Accord'

decode(vin) returns a dict with keys vin, wmi, descriptor, model_year, error_codes, check_digit_valid, corrected_vin, and attributes — a single variable -> value mapping. Values are str, except the free-text note fields listed in ultravin.MULTI_VALUED, which are always list[str]: those are the only vPIC elements allowed to repeat within one decode, and each row is a separate note rather than a competing value.

Decode many at once with decode_batch:

results = ultravin.decode_batch(["1HGCM82633A004352", "5YJ3E1EA7JF000000"])

If you already know a vehicle's model year, pass it — the same optional hint the vPIC API calls modelyear. It matters for pre-2010 vehicles, where the VIN's year character is ambiguous (A means 1980 or 2010): the hinted year gets its own decode pass that competes against the VIN-derived one, and a hint that contradicts the decoded year adds error code 12.

ultravin.decode("1HGCM82633A004352", year=1995)  # decodes as a 1995
ultravin.decode_batch(vins, years=[2011, None, 1987])  # one entry per VIN

Provenance: full=True

The default keeps the value and drops the provenance. If you need to know where a value came from — source, over half of all rows being vehicle-type defaults rather than something the VIN encodes — or the raw vPIC attribute_id, pass full=True:

r = ultravin.decode("1HGCM82633A004352", full=True)

next(e for e in r["elements"] if e["variable"] == "Make")
# {'group_name': 'General', 'variable': 'Make', 'value': 'HONDA', 'source': 'pattern - model', …}

full=True replaces attributes with elements, a list of per-attribute dicts (group_name, variable, value, element_id, attribute_id, source, pattern_id, …), and works the same on decode_batch, decode_json and decode_batch_json. It is ~2× slower end to end: decoding is not the expensive part, and elements costs ~615 dict entries per VIN against the default's ~41.

ultravin.ELEMENTS maps each variable name to its static metadata (element_id, group_name, data_type, …). Pin to element_id if you need a key that survives NHTSA renaming a variable between data releases.

From the command line:

ultravin decode 1HGCM82633A004352             # JSON object
ultravin decode 1HGCM82633A004352 --year 1995 # with a caller model-year hint
ultravin decode 1HGCM82633A004352 --full      # with per-element provenance
ultravin decode-batch vins.txt                # one VIN per line -> JSON array
ultravin decode-batch - --jsonl < vins.txt    # stdin -> streaming JSON Lines
ultravin decode-batch vins.txt --jsonl --batch-size 1000
ultravin info                                # decoder version + data identity as JSON
ultravin version

decode-batch accepts VIN,year on each input line. JSONL mode processes bounded chunks and emits complete JSON objects in input order, ready for shell pipelines. Its automatic default adapts under an 8 MiB working-buffer target; pass --batch-size N to pin a measured size or --batch-memory-mb N to change the automatic target. If a later input line is malformed, the command exits with an error; already-emitted lines remain valid results.

Reproducible results

Every batch automatically captures one clock for the whole job. That includes Python and Rust batches, CLI input loading, every JSONL chunk, and every file in a Parquet stream. A job that spans a date or year boundary keeps using its starting instant.

Pin the package version and freeze the decode clock when a job needs to produce the same answers on a later date:

from datetime import datetime, timezone

as_of = datetime(2026, 9, 1, tzinfo=timezone.utc)
r = ultravin.decode("1HGCM82633A004352", now=as_of)
results = ultravin.decode_batch(vins, now=as_of)
identity = ultravin.provenance()
# data_month, artifact_blake3, decoder_version

now= also works on the JSON APIs and decode_stream. It controls publication dates and year resolution; year= remains the vehicle's model-year hint. Naive datetimes mean UTC. Each stream captures one clock reading for the whole job, and its Arrow/Parquet metadata records the data identity and decode clock: ultravin.data_month, ultravin.artifact_blake3, ultravin.decoder_version, and ultravin.now_micros (Unix epoch microseconds).

Rust

The engine is its own crate, ultravin: cargo add ultravin, then

let r = ultravin::decode("1HGCM82633A004352", None);
assert_eq!(r.model_year, Some(2003));

The 83 MB vPIC database is too big for crates.io, so the first build fetches it from the matching GitHub release, verifies it, caches it per machine and bakes it into your binary — runtime stays fully offline. Offline builds and runtime loading: crates/ultravin/README.md.

Datasets

For bulk work there is decode_stream — a stream of decoded Arrow batches, without a single row ever becoming a Python object:

import ultravin

rows = ultravin.decode_stream("registrations.parquet").to_parquet("decoded.parquet")

rows  # 4812004 — the rows written, not the rows themselves

Parquet output replaces its destination only after every batch and the footer have been written successfully. A failed decode leaves an existing output intact.

The source is a parquet file, a directory of *.parquet read in sorted order, or anything speaking the Arrow C data interface — so the same call takes a pandas DataFrame (pandas ≥ 2.2, with pyarrow installed), a pyarrow Table, a polars DataFrame, a duckdb result, or a RecordBatchReader. A DecodeStream is itself an Arrow source, which is what lets it hand the decode straight to whatever you already use:

import pandas as pd, polars as pl, pyarrow as pa, duckdb

df = pd.DataFrame({"vin": ["1HGCM82633A004352", "5YJ3E1EA7KF328931"]})

pl.DataFrame(ultravin.decode_stream(df))  # -> polars
pa.table(ultravin.decode_stream(df))  # -> pyarrow
ultravin.decode_stream(df).to_pandas()  # -> pandas (needs pandas + pyarrow)

stream = ultravin.decode_stream(df)  # duckdb resolves the name from scope
duckdb.sql("select Make, count(*) from stream group by 1")

Each stream is single-use — note the fresh decode_stream(...) on every line above. It pulls from a source that has already moved on, so a second consumer would get a silently truncated result; consuming one twice raises RuntimeError rather than handing back a short answer. Call decode_stream again to re-read.

Picking columns

columns= takes vPIC variable names, element_ids, or both together; omit it for every publicly decodable element:

ultravin.decode_stream("registrations.parquet", columns=["Make", "Model", 13])

Pin to element_id for anything long-lived. The id is the one key NHTSA does not rename between monthly data releases.

Column naming and schema drift

Naming output columns after vPIC variables means a data refresh can silently change your table's shape — NHTSA renames variables, and Displacement (L) becoming something else takes every downstream query with it. column_names="id" labels each projected column attr_<element_id> instead, which never moves:

ultravin.decode_stream(src, columns=[26, 13], column_names="id")
# -> vin, decoded_model_year, attr_26, attr_13

Passthrough columns (the source VIN column, the source year column, and decoded_model_year) keep their own names in both modes; only the projection is renamed. The default is "variable" — reach for "id" when the output feeds a persisted schema rather than a human.

You never lose the other name. Every projected column carries both keys as Arrow field metadata, in both modes, and they survive the parquet round-trip:

table = pa.table(ultravin.decode_stream(src, columns=[26, 13], column_names="id"))
{f.name: dict(f.metadata) for f in table.schema if f.metadata}
# {'attr_26': {b'element_id': b'26', b'variable': b'Make'},
#  'attr_13': {b'element_id': b'13', b'variable': b'Displacement (L)'}}

Columns and layout

The VIN column is found by name (vin, case-insensitively) and then, for a parquet source, by sniffing the leading rows — as is the optional caller-year column (year, model_year, …); pass vin_column=/year_column= to name them outright. Any text encoding works: Utf8, LargeUtf8, Utf8View, or the dictionary a pandas categorical arrives as.

The output holds the VIN and caller year passed through, then decoded_model_year (named so it cannot collide with an input column called model_year), then one column per projected element — string, int64 or float64 following vPIC's own data_type, with an empty value written as null. Row order and row count always equal the input's: an undecodable VIN is a row of nulls, never a raise and never a dropped row.

By default, batch_size="auto" adapts Parquet and Arrow work chunks to measured throughput under a 64 MiB working-buffer budget. A shipped predictor uses the worker count and a short single-core measurement on real input rows to choose the starting size; runtime feedback then refines it. See the predictor and heatmaps, or call ultravin.predict_batch_size(workers=12, single_core_rows_per_second=100_000) to inspect an estimate. Change the working-buffer target with batch_memory_mb=. It is a budget for buffers ultravin builds for the current batch, not a process-RSS limit, and it does not include buffers retained by an upstream Arrow producer. Adaptation respects RAYON_NUM_THREADS; it never changes the process-global worker pool.

Pass an integer for fixed-size Parquet chunks. With an Arrow source an explicit integer preserves the producer's batches and only sets the parquet row-group size of to_parquet. In either mode the GIL is released while Rust decodes, and memory stays bounded independently of total source rows. Reading and writing parquet is the same Rust as the decoding, so this path needs no pyarrow and no other install; only the pyarrow/polars/pandas hand-offs need those libraries.

From the command line:

ultravin decode-parquet registrations.parquet decoded.parquet --columns Make,Model
ultravin decode-parquet parts/ decoded.parquet --columns 26,28 --vin-column chassis_no
ultravin decode-parquet registrations.parquet decoded.parquet --column-names id

Benchmarks

How many VINs each engine decodes per second, measured against the NHTSA MSSQL spVinDecode baseline of 22.5 VIN/s.

engine VIN/s vs NHTSA MSSQL
ultravin — 12 cores, sorted input 2,375,066 ~105,559× faster
ultravin — 12 cores 1,439,568 ~63,981× faster
ultravin — 4 cores, sorted input 1,606,742 ~71,411× faster
ultravin — 4 cores 891,536 ~39,624× faster
ultravin — 1 core, sorted input 473,698 ~21,053× faster
ultravin — 1 core 226,265 ~10,056× faster
corgi v3 — @cardog/corgi (binary index) ~83 ~3.7× faster
corgi v2 — @cardog/corgi 2.0.1 (SQLite) ~33 ~1.5× faster
NHTSA MSSQL — spVinDecode (SQL Server) 22.5 1× (baseline)
NHTSA Postgres — spvindecode 19.5 ~1.2× slower
NHTSA vPIC web API — public rate limit ~10 ~2.3× slower

Commit 56cf2e9, September 25, 2026, Apple M2 Max (eight performance and four efficiency cores), 20,000,000 unique synthetic VINs on one, four, or twelve workers, medians of two fresh-process trials. About 95% of the VINs are valid and 5% carry one realistic defect (a typo, a wrong check digit, or two swapped characters). Across worker counts ultravin scales to ~3.9× and ~6.4× its own single-core rate. The host was shared with other work; the previous decoder, run back to back, needed 1.12–1.30× more CPU cycles per VIN.

Sorting the same VINs first makes decoding ~1.65–2.1× faster: neighbouring VINs share a manufacturer and pattern tables, so they stay in CPU cache. The work per VIN is unchanged (details).

ultravin runs in-process with the database embedded — no server, no round-trip. The corgi rows are derived from that project's published per-VIN latency, and the vPIC web API row is its published request rate limit rather than a decode time; neither was re-measured here. Methodology, inputs, caveats, reproduction, and prior sessions.

Documentation

  • Vision — what this is, and what it deliberately is not
  • Benchmarks — the numbers, the methodology, how to reproduce them
  • End-to-end performance — throughput, startup, and memory across all output paths
  • Performance improvements — the optimization history, measured gains, tradeoffs, and rejected experiments
  • Acceptance — the parity policy: what counts as passing, how a divergence is adjudicated
  • Known deviations — the vPIC defects ultravin does not reproduce, with evidence
  • Corpora — generate, cover_vins, sweep: hitting every decode behaviour with the fewest VINs
  • Data refresh — how the monthly NHTSA dump is integrated behind parity gates
  • Release — tags, wheels, the embedded artifact, crates.io

License

MIT. The embedded NHTSA vPIC data has its own provenance — see NOTICE.

Metadata

Release files for ultravin 3.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ultravin 3.0.2
File Size Uploaded Provenance
ultravin-3.0.2.tar.gz 21.6 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for ultravin 3.0.2
File
ultravin-3.0.2-cp310-abi3-win_arm64.whl CPython 3.10 abi3 Windows ARM64 Details
ultravin-3.0.2-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
ultravin-3.0.2-cp310-abi3-win32.whl CPython 3.10 abi3 Windows x86-32 Details
ultravin-3.0.2-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
ultravin-3.0.2-cp310-abi3-musllinux_1_2_i686.whl CPython 3.10 abi3 Linux musl 1.2+ x86-32 Details
ultravin-3.0.2-cp310-abi3-musllinux_1_2_armv7l.whl CPython 3.10 abi3 Linux musl 1.2+ ARMv7l Details
ultravin-3.0.2-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
ultravin-3.0.2-cp310-abi3-manylinux_2_31_riscv64.whl CPython 3.10 abi3 Linux glibc 2.31+ RISC-V 64 Details
ultravin-3.0.2-cp310-abi3-manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64 Details
ultravin-3.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
ultravin-3.0.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.10 abi3 Linux glibc 2.17+ IBM System/390x Details
ultravin-3.0.2-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.10 abi3 Linux glibc 2.17+ PowerPC 64-le Details
ultravin-3.0.2-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-32 Details
ultravin-3.0.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.10 abi3 Linux glibc 2.17+ ARMv7l Details
ultravin-3.0.2-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
ultravin-3.0.2-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 442.2 MB

Release files / ultravin-3.0.2.tar.gz

Download URL ultravin-3.0.2.tar.gz
Size 21.6 MB
Tags Source
SHA-256 checksum
How to use checksums
f875c7eb5a12299a678aa76c596370765e9f48502e854d00956f5ccc2b7509a9
BLAKE2b-256 checksum
How to use checksums
4f6a4210343bfa1d371ae4e701db3426890399686a2bf5eda5403688b203dff3
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-win_arm64.whl

Download URL ultravin-3.0.2-cp310-abi3-win_arm64.whl
Size 25.7 MB
Tags CPython 3.10 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
c01747e79492c8b4af4b6e6faab061e4cafdbdf61af3a0bd54870f1c221cb102
BLAKE2b-256 checksum
How to use checksums
853b4a39b97241617c8032eca8673e03768a4b27066bd9ab92547962959e2e14
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-win_amd64.whl

Download URL ultravin-3.0.2-cp310-abi3-win_amd64.whl
Size 26.2 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7bbd6b9d5ee637edfc0138274c6ee41280e716ebea6dda3a60576fa351ba2b6e
BLAKE2b-256 checksum
How to use checksums
af507f739e10bbfdec1f6415843153067f9137dd5b038dffef45f09e4030562b
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-win32.whl

Download URL ultravin-3.0.2-cp310-abi3-win32.whl
Size 25.7 MB
Tags CPython 3.10 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
d9b19ef6110b588d52ae34d8b1c5df03b3fe8f16bc987b1b77eed0cd5399902d
BLAKE2b-256 checksum
How to use checksums
4931609ed725d47e3707819eb210aa3fa93913b7d60b02ae0cd0f3d03578ee71
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL ultravin-3.0.2-cp310-abi3-musllinux_1_2_x86_64.whl
Size 26.4 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
bdf5a43280a3e4cbd273696c5592a7daa8372939de8e392d6806512d0656edfd
BLAKE2b-256 checksum
How to use checksums
2ad59de03fc0cfd57ebe04c5b078ff75af026ccfd8f03530fb9e0b7da415650f
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-musllinux_1_2_i686.whl

Download URL ultravin-3.0.2-cp310-abi3-musllinux_1_2_i686.whl
Size 26.5 MB
Tags CPython 3.10 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
f24fb7101a0203cab9591ad4d3fd346acbeef06182b15dbb4149adf52c84bb55
BLAKE2b-256 checksum
How to use checksums
687eaacd4294a5d3064772697cf65f165bf58c670c8ae03afeb298c902ac9c58
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-musllinux_1_2_armv7l.whl

Download URL ultravin-3.0.2-cp310-abi3-musllinux_1_2_armv7l.whl
Size 26.6 MB
Tags CPython 3.10 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
d74f2137e20f0ee602c07bbf461be1a980db650f088580113b38a9ea40188a23
BLAKE2b-256 checksum
How to use checksums
62af9044a6850de9fa68a70b1e58fc491af40985ed2d52b0496bd9df5c1f3b5e
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL ultravin-3.0.2-cp310-abi3-musllinux_1_2_aarch64.whl
Size 26.1 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
048840997b39881b531ddec6137d4005394885a696fbcc7a1fbe6e2ddbeabbbe
BLAKE2b-256 checksum
How to use checksums
a02ddae9aa04067b826bb2ab616a6eea41c960e942fae2236a8748c7da8e001a
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_31_riscv64.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_31_riscv64.whl
Size 26.1 MB
Tags CPython 3.10 Linux glibc 2.31+ RISC-V 64 abi3
SHA-256 checksum
How to use checksums
39a94fe65f49cd47162b4c7d0b0fffa7a5f680a7630c2d8ba156775953f61fe7
BLAKE2b-256 checksum
How to use checksums
32561a4b4b95ed42e45db3ecc37edea0c9c179f607c0669b98898ce4e04da3a6
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_28_aarch64.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_28_aarch64.whl
Size 25.9 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
523f728380a89fcc006a6773b53b1473fe8d1c02fe3c0186a6a8ccd3da56aa92
BLAKE2b-256 checksum
How to use checksums
ee9ba81fe08fce963694c104b304a4926677821cd53388c565be4f50d0b2afb3
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 26.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
a7aef4a1c11c1e256e5109ee47baeec7b4bfd63d58f4f879d971070a8a50b615
BLAKE2b-256 checksum
How to use checksums
c278370fceb2ae1bdae50207d3e37ed8fba6d2979a77c773221ca3cf5ee5ae6c
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 26.7 MB
Tags CPython 3.10 Linux glibc 2.17+ IBM System/390x abi3
SHA-256 checksum
How to use checksums
1462ff83b20a13346745246cbf252115bbc4984bb802259528027da30658a5e8
BLAKE2b-256 checksum
How to use checksums
a8828f16f0a71667493dcb37f69753c34e3606892b596d67cbe224dd2c4415c0
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 26.4 MB
Tags CPython 3.10 Linux glibc 2.17+ PowerPC 64-le abi3
SHA-256 checksum
How to use checksums
f03a5245e6068388e96b5063e319f5f208c5c04dbda4bf4e4440e08230d72165
BLAKE2b-256 checksum
How to use checksums
7c5acf1f268ce41a100eb0f9c770c02ae9e836c6537cb136e9b133462569764c
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Size 27.6 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-32 abi3
SHA-256 checksum
How to use checksums
8da9272fd1e9d425e3ad257ace452aac1998f93b507dacbf2a5206560e6a1f5b
BLAKE2b-256 checksum
How to use checksums
1e81c192c1dadd15d52067cba63bf2dcf1a8f1af8c538ec21f1488fa04486329
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL ultravin-3.0.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 26.3 MB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l abi3
SHA-256 checksum
How to use checksums
c609202547f7d68023396d72c8c29e32f71ac9b226427798e9570a10a52dcca9
BLAKE2b-256 checksum
How to use checksums
2a7f8ed9cf675804b27bea63b032fbac1f9d25d3c1f0b7facd7e8649859d05c4
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-macosx_11_0_arm64.whl

Download URL ultravin-3.0.2-cp310-abi3-macosx_11_0_arm64.whl
Size 26.3 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
607e2a9a81cd817b6182e925401ff56c7a8d923f7989f14a8faa9507061c60c3
BLAKE2b-256 checksum
How to use checksums
8e7758c324bd1e3a801f1781c2e7cc49f94985a85ee684df62347746402d37c4
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 20, 2026.

Transparency log

Release files / ultravin-3.0.2-cp310-abi3-macosx_10_12_x86_64.whl

Download URL ultravin-3.0.2-cp310-abi3-macosx_10_12_x86_64.whl
Size 26.0 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
06aadba697da62d7e8f6cfc62c79b3f223465e8d1d2d99cea600a9580e7f0037
BLAKE2b-256 checksum
How to use checksums
5644914fec4b99b6710d592e0b7092f5727d9aa1de0d0e9c251caf90d9f2a6d0
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 20, 2026.

Transparency log

Security for ultravin 3.0.2

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.

Full provenance

All 17 files in this release have been uploaded with provenance metadata.

Select from 17 files

Attestation for ultravin-3.0.2.tar.gz

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 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page