Skip to main content

Pure-Rust NHTSA vPIC VIN decoder — CLI + library, with spVinDecode parity.

Project description

ultravin

CI Status PyPI Version License

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

VINs decoded per second: ultravin 54,801 batched / 14,291 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.07 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 ~55,000 VIN/s on 10 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; index it by variable name:
attrs = {e["variable"]: e["value"] for e in r["elements"]}
attrs["Make"]           # 'HONDA'
attrs["Model"]          # 'Accord'

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"])

From the command line:

ultravin decode 1HGCM82633A004352          # human-readable table
ultravin decode 1HGCM82633A004352 --json   # full JSON
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, 10 cores):

engine VIN/s vs ultravin (1 core)
ultravin — batched, 10 cores 54,801 ~3.8× faster
ultravin — 1 core 14,291
corgi v3 — @cardog/corgi (binary index) ~83 ~172× slower
corgi v2 — @cardog/corgi 2.0.1 (SQLite) ~33 ~433× slower
NHTSA MSSQL — spVinDecode (SQL Server) 22.5 ~635× slower
NHTSA Postgres — spvindecode 19.5 ~733× slower
NHTSA vPIC web API — public rate limit ~10 ~1,430× 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 ~635× 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

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

ultravin-0.0.3.tar.gz (20.9 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.3-cp310-abi3-win_arm64.whl (21.7 MB view details)

Uploaded CPython 3.10+Windows ARM64

ultravin-0.0.3-cp310-abi3-win_amd64.whl (21.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

ultravin-0.0.3-cp310-abi3-win32.whl (21.6 MB view details)

Uploaded CPython 3.10+Windows x86

ultravin-0.0.3-cp310-abi3-musllinux_1_2_x86_64.whl (22.1 MB view details)

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

ultravin-0.0.3-cp310-abi3-musllinux_1_2_i686.whl (22.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ i686

ultravin-0.0.3-cp310-abi3-musllinux_1_2_armv7l.whl (22.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARMv7l

ultravin-0.0.3-cp310-abi3-musllinux_1_2_aarch64.whl (22.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

ultravin-0.0.3-cp310-abi3-manylinux_2_31_riscv64.whl (21.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ riscv64

ultravin-0.0.3-cp310-abi3-manylinux_2_28_aarch64.whl (21.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

ultravin-0.0.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 MB view details)

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

ultravin-0.0.3-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (21.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ s390x

ultravin-0.0.3-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (21.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ppc64le

ultravin-0.0.3-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (21.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARMv7l

ultravin-0.0.3-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl (21.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.12+ i686

ultravin-0.0.3-cp310-abi3-macosx_11_0_arm64.whl (22.4 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

ultravin-0.0.3-cp310-abi3-macosx_10_12_x86_64.whl (21.8 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: ultravin-0.0.3.tar.gz
  • Upload date:
  • Size: 20.9 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.3.tar.gz
Algorithm Hash digest
SHA256 0dfa637dcf6c942324d20049d47c66fa01ebc7c3fa9dd852eaef4a0637da2963
MD5 d7fff08603936ddabcfa985b618cb4bb
BLAKE2b-256 384dced2a05d9f02fe9e1121dbd8e0b5a438484d5c72260a94c571b5a704e695

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3.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.3-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: ultravin-0.0.3-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 21.7 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.3-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 4a05382b15f642a7b4c1bf00232a3e9f5ff63e24629c3dc575f29a4c800037cf
MD5 6d13d3d961b0a30c5b35e8127995d258
BLAKE2b-256 09941164fe5d0f22864d493523ae57badb722ebe9cd3ad5bf876113324b86685

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: ultravin-0.0.3-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 21.7 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.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c2f3e87b10446c987537d19cb229c21df0f0d6f3c7ed22dbc41fd8662602821a
MD5 b23dae9d733c04819160e58e5042242c
BLAKE2b-256 0660bc3bf3acf3ced42b626567edcc8d32af6c8ec0de05f776a01e7c63d77221

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-win32.whl.

File metadata

  • Download URL: ultravin-0.0.3-cp310-abi3-win32.whl
  • Upload date:
  • Size: 21.6 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.3-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 6f1c502a2a290607ac2b005e466ea1eac492e8bb7db8721df987711d86874392
MD5 d09774add64356cc89e2b4a4e33cf109
BLAKE2b-256 7dce05d61d76cd6557317e09912b24db2c189369417fb21c7d975c9198d2e911

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3d72992ae7f11295992958c35696c943cdd73dac10fc5de87980d5500ef4e503
MD5 1bd796365b61ee118e1489b08221fda4
BLAKE2b-256 89f718b52dc8805749dc535177133ffadee8995d90b89a82f16efa9a3b58cd06

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 f0665e31f794d2765050508666f43aa044c9a1fe88fcf7fffbdd187249f59beb
MD5 2c3c8e9041fa165968e04eaa2dd94bff
BLAKE2b-256 005a9b0a36b62911f6b979ee9066592a877f11c7e3ce8f47ac0a3a33f98b3a85

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 438ff19244175926a27b24dd7e19dadf6c78ef4245412d5a130c4752c9654dd1
MD5 3719f22526383569aaa2721b3a8a04ef
BLAKE2b-256 f0d0cc74877a3bb2cf93be1d61a5e7c3ac4217368e79d7d1d21589ca66a14452

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e8c17643e75ee42410881b5c2aaa57429b5bb50400b68cb6eaf4d6ea699675b9
MD5 8e274621400e47b4df307048ac912a90
BLAKE2b-256 f80d41c18f825424bd69b2a8e71e00edb70fe099f9043a3d54581f9737f9bec6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_31_riscv64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_31_riscv64.whl
Algorithm Hash digest
SHA256 7acfd564406164b7f07685f27799cdc7c48e1b3190e2e20b42b92084e37e1aa1
MD5 1e6c808dcc5b2c56dfa8591aa1d7c9a7
BLAKE2b-256 1591e2c1ed8dbd13aeaf20d190856fcc27b37611a143014b26eb761a073792d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 aca3324be4780bfe5c2ebdbf9e3a2b0589bb46f2149ef2206e54f3da9b9aa2c1
MD5 26f305e63acf207bf2c220ad7c7182da
BLAKE2b-256 d8784708a62b2a4f192503a554861c7f3263afd55c05a9c9243d9ea6a3ef605e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cf3fa602f0a7b18fef87d81b8e3cb162c25cb48397add0e32b529e18af20c464
MD5 3fd2c1dec3c8d681373b1983fcb1c509
BLAKE2b-256 d020531ef018e687d4fabe319125138f0e7877a0a9c09cc4e383a5c094e870e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 432fb911a3de224164dc0a508ab1abb44927d73824837e6f399d087adf52193c
MD5 108ea0a81e7694be4c21b73408798012
BLAKE2b-256 e40787eb6c60abcec4867c10835edc5ddca4119263bdd72393362e6ab3d8395a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 a1a4dd8dc8bfd1677c2435868b2565d0a825505028187b2b3d0acd0d1eca318e
MD5 fac8274fca9e0d36bebec493d1025720
BLAKE2b-256 b2350ad18f120d8035414919354083e9dbdb3dcdc7ad70a23ad5ceabdbe0e537

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 3653acb2028a83a7e331fa9a3025b7bd86512c59429aecd863d41163e5768c6e
MD5 dcf484d88a97d6687f47c551e78f176f
BLAKE2b-256 bb2cc312f99e1649f85a2882a5571da8d587132b8dc5c5c792fad44dceba8cab

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 48c59c1a6468186a6de1255e7a30bf41e4a45bbc413f74cb4599fddd44c570a0
MD5 bcb48188e25b03750419048ce572867c
BLAKE2b-256 081e09990a4c7755f8d6700e19ee4622a3fc3975f60cff38f4a494c36ac2597e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d14e14c653713210dc9ed1e3af5559dba66f931833d58f83b3edb652815454a8
MD5 c6165fa0bab10cccdb1044492ccdb5c6
BLAKE2b-256 64c11dbdf73c4bb64b40e20686c00801a12975e9fc36be9d9dcbc9a34a5a96b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.3-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ultravin-0.0.3-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 59d28541f1578c43ccdf9509722465e1a4872c426033610b4f2fd527da1279c8
MD5 1eeb6ec80e691f5f31275b136eab2426
BLAKE2b-256 2c29a2328771439d8cd49cd69886b4c4184199627507a8fc5a2bda119416f6c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ultravin-0.0.3-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.

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