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 81,948 batched on 4 cores / 25,175 single-core vs corgi v3 83, corgi v2 33, NHTSA MSSQL 22.5, NHTSA Postgres 19.5
VINs decoded per second over a random corpus, single sequential caller — ultravin also batches across cores.

  • ⚡️ ~0.042 ms per decode — orders of magnitude faster than the NHTSA SQL procedures (corgi, Postgres, MSSQL)
  • 🦀 Pure Rust core, shipped as a Python library
  • 📦 The entire vPIC vehicle database baked into the wheel
  • 🔌 Fully offline — no network, no database, no data files at runtime
  • 🎯 Byte-for-byte parity with vPIC's spVinDecode, verified across every decodable VIN
  • 🐍 Installable via pip, with a CLI and a library API
  • 🧵 Batches in parallel to ~82,000 VIN/s on 4 cores

ultravin is a faithful port of NHTSA's spVinDecode — the SQL procedure behind vPIC — reimplemented in Rust and verified against the reference Postgres implementation. Because the vehicle database ships inside the binary, decoding needs no network, no database server, and no 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]

# `elements` is the full decoded attribute list, one dict per attribute:
r["elements"][0]        # {'variable': 'Make', 'value': 'HONDA', 'source': ..., …}

decode(vin) returns a dict with keys vin, wmi, descriptor, model_year, error_codes, check_digit_valid, corrected_vin, and elements — a list of per-attribute dicts (group_name, variable, value, element_id, source, …). Decode many at once with decode_batch:

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

If you only want the values, pass flat=True and skip the per-attribute dicts entirely — ~2× faster end to end. Decoding is no longer the expensive part; building ~615 dict entries per VIN is:

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

r["attributes"]["Make"]   # 'HONDA'
r["attributes"]["Model"]  # 'Accord'

flat=True replaces elements with attributes, a single variable -> value mapping (header keys are unchanged), and works the same on decode_batch, decode_json and decode_batch_json. Two things to know:

  • 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.
  • It keeps the value and drops the provenance. If you need to know where a value came from (source — over half of all rows are vehicle-type defaults rather than something the VIN encodes), or the raw vPIC attribute_id, use the default shape.

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          # human-readable table
ultravin decode 1HGCM82633A004352 --json   # full JSON
ultravin decode 1HGCM82633A004352 --flat   # values only, no provenance
ultravin decode-batch vins.txt --json      # one VIN per line
ultravin version

Benchmarks

How many VINs each engine decodes per second, single sequential caller, over an identical random corpus of 5,000 valid VINs (measured over 60 s; Apple Silicon, batched across 4 cores):

engine VIN/s vs ultravin (1 core)
ultravin — batched, 4 cores 81,948 ~3.3× faster
ultravin — 1 core 25,175
corgi v3 — @cardog/corgi (binary index) ~83 ~303× slower
corgi v2 — @cardog/corgi 2.0.1 (SQLite) ~33 ~763× slower
NHTSA MSSQL — spVinDecode (SQL Server) 22.5 ~1,119× slower
NHTSA Postgres — spvindecode 19.5 ~1,291× slower
NHTSA vPIC web API — public rate limit ~10 ~2,518× slower

ultravin runs in-process with the database embedded — no server, no round-trip. The corgi figures are derived from its project's published per-VIN latency (~12 ms v3 / ~30 ms v2, not re-measured here). The NHTSA Postgres and MSSQL oracles run the unmodified spVinDecode over localhost; MSSQL is SQL Server under amd64 emulation on Apple Silicon, so its number understates native hardware — ultravin is still ~1,119× faster. The NHTSA vPIC web API row is its published ~10 req/s rate limit, not a decode time — a hard ceiling regardless of hardware. Methodology and reproduction: docs/BENCHMARKS.md.

License

MIT

Download files

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

Source Distribution

ultravin-0.0.6.tar.gz (21.1 MB view details)

Uploaded Source

Built Distributions

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

ultravin-0.0.6-cp310-abi3-win_arm64.whl (21.8 MB view details)

Uploaded CPython 3.10+Windows ARM64

ultravin-0.0.6-cp310-abi3-win_amd64.whl (21.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

ultravin-0.0.6-cp310-abi3-win32.whl (21.8 MB view details)

Uploaded CPython 3.10+Windows x86

ultravin-0.0.6-cp310-abi3-musllinux_1_2_x86_64.whl (22.3 MB view details)

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

ultravin-0.0.6-cp310-abi3-musllinux_1_2_i686.whl (22.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ i686

ultravin-0.0.6-cp310-abi3-musllinux_1_2_armv7l.whl (22.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARMv7l

ultravin-0.0.6-cp310-abi3-musllinux_1_2_aarch64.whl (22.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

ultravin-0.0.6-cp310-abi3-manylinux_2_31_riscv64.whl (22.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ riscv64

ultravin-0.0.6-cp310-abi3-manylinux_2_28_aarch64.whl (22.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

ultravin-0.0.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

ultravin-0.0.6-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (22.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ s390x

ultravin-0.0.6-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (22.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ppc64le

ultravin-0.0.6-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (21.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARMv7l

ultravin-0.0.6-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl (22.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.12+ i686

ultravin-0.0.6-cp310-abi3-macosx_11_0_arm64.whl (22.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

ultravin-0.0.6-cp310-abi3-macosx_10_12_x86_64.whl (22.0 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file ultravin-0.0.6.tar.gz.

File metadata

  • Download URL: ultravin-0.0.6.tar.gz
  • Upload date:
  • Size: 21.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ultravin-0.0.6.tar.gz
Algorithm Hash digest
SHA256 1fb5109ec101e1acf766cbac632c107e8670e4435fa5ab72458d93020ab3e609
MD5 eadabe94f6e57c64d54272b85a108be3
BLAKE2b-256 2903e9c12ffedab024e4e14af70e531c87d28dad0462c4696753a1f4ec553602

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6.tar.gz:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: ultravin-0.0.6-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 21.8 MB
  • Tags: CPython 3.10+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 b5ddfdab0b628ec8e8364e92177e8e8baf90b0767410402c03b8d3c3008eea02
MD5 068e8d545e8da9617a245495ea55434d
BLAKE2b-256 fc95460779b74e092388c730243aea4c44323e96c294e3a0968652c342c4a5d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-win_arm64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: ultravin-0.0.6-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 21.9 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 903d1111f71ace549fc691fc36ccf6b7b228608eb625588a385ab5d68ee582cf
MD5 53bca8f747bcea604626287a153353e8
BLAKE2b-256 06d69c19945a16c6492c960a6b76a3a6f5e8899dc50b637f381222c7f871b206

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-win_amd64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-win32.whl.

File metadata

  • Download URL: ultravin-0.0.6-cp310-abi3-win32.whl
  • Upload date:
  • Size: 21.8 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 711e3447befed5493352333427e1e612417537442eaf634b4e1f6c5c5614d1d3
MD5 05b83e1549d7d3fdfaff32b2fc63e20d
BLAKE2b-256 b1d5c59e15d512b39fd452f9420cf970cc0fb40fa5d9f61b86cfee07bc7d5ceb

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-win32.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c1aa5bd84b4b7f624633886aeb044c4de6a5f82632163f12b70afe3be097d4df
MD5 764f729bb1d360e6f3ee719294e71772
BLAKE2b-256 e2ee592843037fd46073f27b4a37dcc090cc22a310e0d78b458338c18f04ad1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 282e0ffa23a5f51d4c12e0e350713b3398240ac8b4827e8a8698fac419deaa35
MD5 a4738277a9af697c550676bdbb2e67fe
BLAKE2b-256 8c9a41e76895f68c47f55f79a4d4f54df2936f1d6a2dc388c248724220f08df6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-musllinux_1_2_i686.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 a858a9a007acefe6bbce5718ae9bb843fb93db76529b45af74459ae8a95fa365
MD5 5138747b5284b400d0dffb511a620018
BLAKE2b-256 582bdecde1c298363791a62a35cc95abf5dbef57a98057f9e0d90c6783ad7820

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-musllinux_1_2_armv7l.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4b78321c98c5ed197d9f23df7d5e5a409f8593c2596465702b0b23a171198468
MD5 328b5b015061a63e0a29eae635332ddb
BLAKE2b-256 abae6362108cba6cf63e53830d52afb4dfc3f458a69bdf5df76b5fa442ff1ced

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_31_riscv64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_31_riscv64.whl
Algorithm Hash digest
SHA256 b91ac19974dc1454abe6fa39174dc67c26720ef8f26e5ac35b15f0d67ee6e814
MD5 eb0c6e9bf3483627d3563d40e8cc2c2b
BLAKE2b-256 8439865864eadb2fa2cff27d9e2ad3568f07563aa87e1abb1cd91cff84b5e2ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_31_riscv64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e9df76723d828df728fc2b37bb29ed097d678ed971f8bcfbbdfaf3365cb51a4b
MD5 7f97f934798667f13367bc1751e82090
BLAKE2b-256 3cceb3385703ddf8f514bfc4db570695a8ad5ca97392aa179c494fb1e2e30a18

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_28_aarch64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a42d3522b7a6192721f8d3c999e9c00b5f33bc07add52f4b4fc251bddae63452
MD5 6bcbd14b2763e0c65950f158cb2666dc
BLAKE2b-256 4454b0f5a9d059f946a8c2c4aafe2018f5299352540ecee46c46b0ec693bdff8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 cd7dec54f326c84073a075379b41d20dd3e0d7d046cb1525e3d7e529e68f6f5d
MD5 1cf521b52a52702cb04da3f2d7823ca8
BLAKE2b-256 9a70c03de064e0ca55876b5746cc20b424664f6c341545e7a3b597b5374e95b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 cebab23efbd93aa56f49fdd6135ecd9f8ce40c5dc05079513785c63a75fe5174
MD5 5cfeb9a633a6554f903d3d097a610b27
BLAKE2b-256 bc9f366e7eab91c6b81560243a1c5806a43a676579e714e4d90236f387fa542f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f60ba20d60a54bd796487a6bbbb7d9424ac34f83b9e665db950bd45c5d121ac3
MD5 0d239aa2ca122e9c0f2b1c1b18d458f0
BLAKE2b-256 b4ad0584a0b148acf8ea411c81fe11def18514a9fcd685bf3914662d5caa4d8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f38edabe90efcd0d2abbe6c0717b7eca1102df5c3d6ffcc2b05298a513bed8ca
MD5 010bd4ef9f9f037ea0aa28fbd2cfa248
BLAKE2b-256 56c0c565c4d0f750aaa1e380d43ea6fb60d0e30e57834be54f679b51cf848cfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed0c7cd08dbc0b3957055ef80d9e386c25221d8a43f57212d3c653f696c05f1a
MD5 9d03d8951be9d0c3ca734720944d2775
BLAKE2b-256 9a8d38ce6627ee2ff026c675f0f6ae37f8653428c2ae1d634a892f0a39715546

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

File details

Details for the file ultravin-0.0.6-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.6-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e44840ddfe04ab2b2af178ea7c05b9031d65c97a3897ec0ea6016643ba712130
MD5 6cd4d32860254db1eec1ebcb70d38dee
BLAKE2b-256 6e33af53ead544a575bc7afca53ace20ac075d8838a7a5fd76e076a1409e1e91

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.6-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yaml on blackthorn-interstellar/ultravin

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

Release history Release notifications | RSS feed

2.1.1

17 files

2.1.0

17 files

2.0.1

17 files

2.0.0

17 files

1.2.0

17 files

1.1.0

17 files

1.0.4

17 files

1.0.3

17 files

1.0.2

17 files

0.0.7

17 files

This release

0.0.6 This release

17 files

0.0.5

17 files

0.0.4

17 files

0.0.3

17 files

0.0.2

17 files

0.0.1

17 files

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