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 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

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-1.0.2.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-1.0.2-cp310-abi3-win_arm64.whl (21.8 MB view details)

Uploaded CPython 3.10+Windows ARM64

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

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+Windows x86

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

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

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

Uploaded CPython 3.10+musllinux: musl 1.2+ i686

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.10+manylinux: glibc 2.31+ riscv64

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

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

ultravin-1.0.2-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-1.0.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (22.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ s390x

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

Uploaded CPython 3.10+manylinux: glibc 2.17+ ppc64le

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

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARMv7l

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

Uploaded CPython 3.10+manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

ultravin-1.0.2-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-1.0.2.tar.gz.

File metadata

  • Download URL: ultravin-1.0.2.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-1.0.2.tar.gz
Algorithm Hash digest
SHA256 b1aa74d2fcc3c63fe8248f9d9a474354474bdaa92ce497ecd5ff4541b0631887
MD5 01940205d4c498a982180889cb2a9fe5
BLAKE2b-256 075c3d57c5d7d4ebba9d5a736fae954221b9bf009f463f21b5a19dc7ac9b8144

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ultravin-1.0.2-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-1.0.2-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 115380fe76405f9eda7bb425e661255fa081f08bf9eaf164bc8d00b937985df8
MD5 38c70d1f77eabde91754d19a18e8f59e
BLAKE2b-256 a99ed3f860993076641166ff4a66b233384537e6b9d4b5d8e6853ef258a6e3fb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ultravin-1.0.2-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-1.0.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 469ccbedae016ea9efc9f3da1d54d09e75d6ddc3f04da8673aa2dfb9f0d45747
MD5 90dc18163a919b0701527c9938735246
BLAKE2b-256 3f276220a7d73f78ca013f0ba5a742861c7986c41e328d64ede830f1c15e0449

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ultravin-1.0.2-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-1.0.2-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 d92c08b83595c3dc20501503948ab51466572681ca275aab21952abf15592db6
MD5 885f434696e4f415674f1114708dd247
BLAKE2b-256 109d32a5c78b106a204167de83c06f2d8adc84389da5e2923362248db8ea8948

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b24a9b902bacb00ac2e68ed8950f0a04bb0c53be5866215c7d35b619822d7360
MD5 d2ed2cd731a8a6a5929211f2addcfdbe
BLAKE2b-256 5d07f949d4e261d4201e1e9c9f4c52a5cea812c367968bb7c464fd73de6a47de

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 966143d441bbcad5a9dc381e139793fed64930ab63c076f10f51eab006f4d0e1
MD5 b9a737a80a70efdb1cb8866e038ea6f3
BLAKE2b-256 bd016ba83f7ddfec097ad2daa478d86e40ef1b94e0d682cf10ac685bc035a916

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 c5087dba9d579d2f356ae6d3f356365d1d6ae50e19c2342a866adcbaefcccc1c
MD5 6262164603fced1b30472e13c62858d3
BLAKE2b-256 d731a53cb931a9d88b07c00b90657364451942198908feb5e8eec629f0f66cec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 88973d334c4be84f7292a99e6bc75d26d9ba27ce5dc76e73fefac39cebcfe939
MD5 644bfdf2a2827d3553622e75498e683b
BLAKE2b-256 98ef164def74fb3c252bf49e76312a78df83b8b9a64d2117aba626061ff9b009

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_31_riscv64.whl
Algorithm Hash digest
SHA256 a4ee3dd9cefaa404e3b9d4679ec7e6872088aecbb7904369095ba6cc0a871761
MD5 7759221fee60faedf672ceae7443f861
BLAKE2b-256 965925b8e067d83b610c03c84cd608d1c8a6a49eff2eafba62e117db4d4769d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dca9f7aca8f49d402996bd97009737cde08a1481f4504c350f5da48e315c2928
MD5 58fb5007de746c2ed8898ebaf82443dd
BLAKE2b-256 c8246b1f8140685c5a1e097080332d261f99a8fbabc7c7427970703a6a8a9f3d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 275719afffdb46b7ab6d9f6a3e38f207869c89e8895f8e6636550f7216a30598
MD5 0e0b4b871ceed036b22adedfd5c6539b
BLAKE2b-256 97217a57ee238f6e7877bb986f5fb49839c603978cc3c929255a60e514e44832

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 4781d773c28434696e648b697652379896ffd02a94ee3f84d1e33f119a7e90f9
MD5 5b05a89d372d32753bb60c463cd00157
BLAKE2b-256 970e28439980a4108d86bcb79b58d3ad90fb71334e9f89b9f946116a2afbbdc3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f88f01c75da04645393f099bc0bcc4f08cb507310e6a23f038a9744917917b0e
MD5 71393611c0e198427dbd404ff69d18c4
BLAKE2b-256 5a471eb04910ea35265bd66fbdc6a379fdfe4d3fab331fa0b025937a6596c232

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f65cdb4d25c32272979baa33939353112942b6549ea3ee04c225fb1da5eeb8f1
MD5 31ad0212636b42aa024b77cc6dcf2fef
BLAKE2b-256 73b7de5a702fc03fd95561fe9d0c96e48e15af4ec1e3d0f47ceead01a2ad9e96

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 450251b820187e5acd48d8e1fd2563c8a69cffa17b45f30925a3262551adcfa5
MD5 018f400b7ca114cecbef8f6ee6b60cb2
BLAKE2b-256 3991817cddfe7a689dde5e13fa27b786061e8a508e190407088a739f34f7b72f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d37099078a80037412ead308095950ef0fd7859cc74fa9ca2a1bfbd5dc548dab
MD5 9bb555cd8cf4dca9fddd02bb0394565d
BLAKE2b-256 272996b617d04962bfcb40444e7ff18072017344848eb6127b9e810fb94509da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ultravin-1.0.2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ab3f32ccd2a6c70be9b2e346398c4331c44f63426e5929fb65b550e26b9bba73
MD5 23aa186fad9af8ed3288094d57d87926
BLAKE2b-256 e0ea4dc59aeabef1a087a51655ad72581cdba19557bd387cb31c05cff2c66460

See more details on using hashes here.

Provenance

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

This release

1.0.2 This release

17 files

0.0.7

17 files

0.0.6

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