vin-decode
Auto-updating VIN decoder. Lookup data is regenerated monthly from the official NHTSA vPIC dump by a CI cron job and shipped embedded in the crate. No network at runtime, no manual provisioning, no stale tables.
VIN parsing and decoding for Rust, backed by the full NHTSA vPIC database
compiled into fst +
rkyv memory-mapped lookup tables.
Example
use Decoder;
let dec = new?;
let v = dec.decode?;
assert_eq!;
assert_eq!;
# Ok::
Catalog (browse all known makes / models)
use Catalog;
let cat = new?;
for make in cat.all_makes
let models = cat.models_for_make;
# Ok::
Features
| Feature | Default | Effect |
|---|---|---|
embedded |
yes | Bundles compressed lookup tables; auto-installs on first decoder construction |
parallel |
yes | rayon-powered batch decoding |
serde |
no | serde::{Serialize, Deserialize} on Vehicle, Vin, BodyClass, FuelType |
build |
no | Exposes the FST/CSV build pipeline (used by CI) |
Data freshness
A weekly GitHub Actions job probes
https://vpic.nhtsa.dot.gov/downloads/vPICList_lite_YYYY_MM.bak.zip for new
NHTSA dumps (NHTSA publishes a fresh one mid-month). A new release is only
cut when a newer dump exists — if the upstream version matches the bundled
one, the job exits without committing, tagging, or publishing. So a cargo update only ever pulls actual data changes; no churn-publishes.
Crate patch versions track data updates; crate minor versions track API changes.
License
0BSD