Skip to main content

IsoSpec

IsoSpec is a fine-structure isotopic distribution calculator for chemical formulas — given a molecule, it computes the masses and probabilities of its isotopologues. It is fast enough to handle large molecules (proteins, oligonucleotides) where the full distribution has astronomically many configurations, and it returns provably-optimal subsets that cover a chosen fraction of the total probability mass.

IsoSpec is primarily used as a library by mass spectrometry software. It is implemented in C++ (src/IsoSpec++/) and shipped with first-class bindings for Python (IsoSpecPy, on PyPI), R (IsoSpecR, on CRAN) and Rust (isospec, the crate in rust/).

Installation

Python

pip install IsoSpecPy

The wheel bundles the C++ library — no separate native install required. Compatible with CPython and PyPy on Linux, macOS, Windows, and Cygwin/MinGW. Python ≥ 3.9.

To build from source: pip install . from a checkout. A C++20 compiler is required.

R

install.packages("IsoSpecR")

From source: cd src && R CMD build IsoSpecR && R CMD INSTALL IsoSpecR_*.tar.gz.

Rust

[dependencies]
isospec = "0.1"

The build script compiles the bundled C++ library; a C++20 compiler is all that is needed. See rust/README.md.

C++ library

cd src/IsoSpec++
make            # produces libIsoSpec++.so

Or via CMake from the repo root:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
sudo cmake --install build

Requires a C++20 compiler. CMake produces both shared and static libraries and installs headers under ${CMAKE_INSTALL_INCLUDEDIR}/IsoSpec++.

Quick start

The most common usage is IsoTotalProb: ask for the smallest set of isotopologues whose summed probability covers a chosen fraction of the spectrum (typically 0.99–0.9999). The result is a materialized envelope — arrays of masses and probabilities you can read directly.

Python

import IsoSpecPy

# Isotopologues covering at least 99.9% of the probability mass of water.
iso = IsoSpecPy.IsoTotalProb(formula="H2O1", prob_to_cover=0.999)

for mass, prob in zip(iso.masses, iso.probs):
    print(mass, prob)

# From an amino-acid sequence:
iso = IsoSpecPy.IsoTotalProb(peptide_sequence="AAAPPGQAAC", prob_to_cover=0.999)
print(list(zip(iso.masses, iso.probs)))

# ...optionally carrying [UNIMOD:<id>] modification tags (the notation this
# monorepo's SAGE search-engine fork writes: [UNIMOD:<id>]-SEQUENCE prefix
# for an N-terminal mod, X[UNIMOD:<id>] inline for an internal one,
# SEQUENCE-[UNIMOD:<id>] suffix for a C-terminal one):
iso = IsoSpecPy.IsoTotalProb(peptide_sequence="PEPTC[UNIMOD:4]DEK", prob_to_cover=0.999)
print(list(zip(iso.masses, iso.probs)))

# Mind the water: peptide_sequence= yields the *residue* composition, without
# the terminal H2O of a free peptide, so the masses above are 18.0106 Da
# lighter than the neutral molecule. Add it explicitly for the real peptide
# (the C++ Iso::FromFASTAWithMods below adds it by default -- the two APIs
# differ here, and this is the older Python behaviour kept for compatibility):
iso = IsoSpecPy.IsoTotalProb(peptide_sequence="PEPTC[UNIMOD:4]DEK", formula="H2O1",
                             prob_to_cover=0.999)

# Or get just the composition (element -> atom count), no envelope:
composition = IsoSpecPy.ParsePeptideSequence("PEPTC[UNIMOD:4]DEK")
print(dict(composition))  # {'H': 60, 'C': 39, 'N': 10, 'O': 16, 'S': 1}

Resolves against a table of ~980 Unimod entries embedded in the library (isotope-labelled and glycan/derivatization "brick" modifications are excluded -- they aren't representable as a pure elemental delta). Pass unimod_db_path="/path/to/table.csv" to either function to resolve against a different table instead (same id,name,mono_mass,composition CSV shape as the embedded default).

See Examples/Python/ for radiolabelling, custom elements, binned spectra, and FASTA/Unimod modifications.

C++

#include "IsoSpec++/isoSpec++.h"
#include "IsoSpec++/fixedEnvelopes.h"

using namespace IsoSpec;

int main() {
    FixedEnvelope iso = FixedEnvelope::FromTotalProb("H2O1", 0.999, true, true);

    for (size_t i = 0; i < iso.confs_no(); ++i) {
        std::cout << iso.mass(i) << '\t' << iso.prob(i) << '\n';
    }
}

From a peptide sequence, optionally carrying [UNIMOD:<id>] modification tags (fasta_mods.h; same notation as the Python/R examples above):

#include "IsoSpec++/isoSpec++.h"
#include "IsoSpec++/fasta_mods.h"
#include "IsoSpec++/fixedEnvelopes.h"

using namespace IsoSpec;

int main() {
    FixedEnvelope iso = FixedEnvelope::FromTotalProb(
        Iso::FromFASTAWithMods("PEPTC[UNIMOD:4]DEK"), 0.999, true, true);

    for (size_t i = 0; i < iso.confs_no(); ++i) {
        std::cout << iso.mass(i) << '\t' << iso.prob(i) << '\n';
    }
}

Iso::FromFASTAWithMods takes an optional trailing unimod_db_path argument to resolve against a different Unimod table instead of the one embedded at compile time. For just the composition, no envelope, call parse_fasta_with_mods/parse_fasta_with_mods_full directly (or the allocation-free _into forms, for a hot loop over many sequences) — see fasta_mods.h.

Quickest way to build:

clang++ -std=c++20 water.cpp src/IsoSpec++/unity-build.cpp -o water

(unity-build.cpp is a single translation unit that #includes every source file — see Examples/C++/COMPILING.)

Rust

use isospec::{Iso, PeptideOptions};

fn main() -> Result<(), isospec::Error> {
    let iso = Iso::from_formula("H2O1")?;
    for (mass, prob) in iso.envelope().total_prob(0.999)?.iter() {
        println!("{mass}\t{prob}");
    }

    // A modified peptide; unlike Python's peptide_sequence=, the default
    // here includes the terminal water.
    let peptide = Iso::from_peptide("PEPTC[UNIMOD:4]DEK", &PeptideOptions::default())?;
    println!("{}", peptide.monoisotopic_mass());
    Ok(())
}

See rust/examples/ for binned spectra, generators with configurations, and labelled elements.

R

library(IsoSpecR)
water <- c(H = 2, O = 1)
IsoSpecify(molecule = water, stopCondition = 0.999)

IsoSpecify only ever takes a raw named-integer-vector molecule -- it has no sequence-string parameter -- so a [UNIMOD:<id>]-annotated peptide sequence takes two calls instead of one: RParsePeptideSequence() to resolve the sequence into a composition, then IsoSpecify() as above.

composition <- RParsePeptideSequence("PEPTC[UNIMOD:4]DEK")
print(composition)  #  H  C  N  O  S
                     # 60 39 10 16  1
IsoSpecify(molecule = composition, stopCondition = 0.999)

Like the Python ParsePeptideSequence, this returns the residue composition without a free peptide's terminal H2O -- add c(H = 2, O = 1) to it for the neutral molecule. A modification whose delta removes more atoms of an element than the bare sequence provides gives a negative count ("G[UNIMOD:11]" nets H -1, S -1); IsoSpecify rejects such a vector rather than quietly dropping those elements.

The rest of the API takes the same named vector, and treats an envelope as what IsoSpecify returns, a matrix with columns mass and prob:

insulin <- c(C = 254, H = 377, N = 65, O = 75, S = 6)
IsoProperties(insulin)$averageMass            # also mono/lightest/heaviest/mode peaks, variance
IsoBinned(insulin, binWidth = 1)              # unit-resolution distribution, computed directly
IsoStochastic(insulin, ionicCurrent = 1e4, seed = 1)   # simulated, reproducible measurement
wassersteinDistance(IsoSpecify(insulin, 0.999), IsoSpecify(c(C = 254, H = 377, N = 65, O = 74, S = 7), 0.999))

with envelopeConvolve, envelopeLinearCombination, envelopeBin and envelopeResample for envelope arithmetic, and orientedWassersteinDistance, abyssalWassersteinDistance and wassersteinMatch beside wassersteinDistance.

See Examples/R/ for radiolabelling, full-spectrum extraction, Unimod-annotated sequences, and binned, simulated and compared envelopes.

Advanced features

  • Alternative algorithms — for cases where IsoTotalProb isn't the right shape:
    • IsoThreshold — all isotopologues with probability above a fixed threshold.
    • IsoStochastic — simulate a measured spectrum by sampling integer ion counts.
    • IsoBinned — histogram-style envelope at a chosen bin width.
  • FASTA/peptide-sequence support — build an Iso directly from an amino-acid sequence, with [UNIMOD:<id>] modification tags recognized inline; optionally include the N/C-terminal water.
  • Custom isotopic tables — override natural abundances per element (e.g. for radio- or stable-isotope labelling). See Examples/*/radiolabelling.*.
  • Fixed-envelope arithmetic — addition, normalization, convolution, binning, resampling, Wasserstein distances.
  • Reproducible sampling — stochastic envelopes and resampling take a seed (seed= in Python and R, seeded_rng() in C++, with_seed in Rust); a seed gives the same counts on every platform and in every binding.
  • Nominal-mass mode — compute distributions over nucleon counts instead of real masses.
  • Thread safety — the library never parallelises its own work, but independent molecules and envelopes may be used from any number of threads, and a shared molecule or envelope may be read from several at once.
  • Streaming generators (for performance) — the tabulated functions above materialize the full envelope into arrays. For large molecules where that uses too much memory, or for pipelines that consume one configuration at a time (e.g. binning on the fly), use the generator classes instead: IsoThresholdGenerator, IsoLayeredGenerator, IsoOrderedGenerator, IsoStochasticGenerator. They yield one isotopologue per call to advanceToNextConfiguration() without ever storing the full set. IsoOrderedGenerator additionally streams in strict order of decreasing probability. Generators are in C++, Python and Rust; R has the materialized functions only.

Algorithmic details are in the papers cited below; the Supporting Information of each is the better starting point for implementation specifics.

Repository layout

src/IsoSpec++/    C++ core library (the algorithms live here)
src/IsoSpecPy/    Python binding, loaded via cffi
src/IsoSpecR/     R binding, via Rcpp
rust/             Rust crate (Cargo.toml at the repository root), via cxx
Examples/         Working examples in each language
tests/            C, C++, and Python test suites (R's are in src/IsoSpecR/tests, Rust's in rust/tests)
skbuild/          scikit-build-core entry point used when installing the Python wheel

Changes

CHANGELOG lists the major changes in each release (the Rust crate keeps its own, rust/CHANGELOG.md).

Citation

If IsoSpec is useful in your research, please cite:

The Supporting Information of each paper has the algorithmic detail.

License

2-clause BSD (see LICENCE). If you need different licensing terms, contact the authors. The authors appreciate (but do not require) being told when IsoSpec is used in other software.

Metadata

Release files for IsoSpecPy 2.6.0

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

Source distribution (sdist)

Source distribution for IsoSpecPy 2.6.0
File Size Uploaded Provenance Actions
isospecpy-2.6.0.tar.gz 196.1 kB With provenance Details for isospecpy-2.6.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for IsoSpecPy 2.6.0
File Actions
isospecpy-2.6.0-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details for isospecpy-2.6.0-py3-none-win_arm64.whl
isospecpy-2.6.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for isospecpy-2.6.0-py3-none-win_amd64.whl
isospecpy-2.6.0-py3-none-win32.whl Python 3 none Windows x86-32 Details for isospecpy-2.6.0-py3-none-win32.whl
isospecpy-2.6.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details for isospecpy-2.6.0-py3-none-musllinux_1_2_x86_64.whl
isospecpy-2.6.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details for isospecpy-2.6.0-py3-none-musllinux_1_2_aarch64.whl
isospecpy-2.6.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for isospecpy-2.6.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
isospecpy-2.6.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.28+ ARM64, Linux glibc 2.24+ ARM64 Details for isospecpy-2.6.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
isospecpy-2.6.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for isospecpy-2.6.0-py3-none-macosx_11_0_arm64.whl
isospecpy-2.6.0-py3-none-macosx_10_9_x86_64.whl Python 3 none macOS 10.9+ x86-64 Details for isospecpy-2.6.0-py3-none-macosx_10_9_x86_64.whl

Total release size: 5.5 MB

Release files / isospecpy-2.6.0.tar.gz

Download URL isospecpy-2.6.0.tar.gz
Size 196.1 kB
Tags Source
SHA-256 checksum
How to use checksums
07fa8c17928792720e5f8889d10048f5cb6d69fd4c05cd5a4da0b2308c39f348
BLAKE2b-256 checksum
How to use checksums
c5b05fb919d938e26ad693f0ca7f7458b90c001f1384337421295d7b47d3ec7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-win_arm64.whl

Download URL isospecpy-2.6.0-py3-none-win_arm64.whl
Size 261.8 kB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
76c76129735770a4b1d5dcf75fc29615dc67c748a890623808ab969b3f9d4a05
BLAKE2b-256 checksum
How to use checksums
a2475c3843e4709d23e22130d1e0e5f816ba91d0583688cf8e17f1e513c31f45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-win_amd64.whl

Download URL isospecpy-2.6.0-py3-none-win_amd64.whl
Size 269.9 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
32d21a3a44d0c7b1812eaae8837b208b98a150b4e068281edf95de73ade78d39
BLAKE2b-256 checksum
How to use checksums
f4e5a456175a8e4de9be77d1822aa5855075b903f0ce1a6de4b96e0257390f19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-win32.whl

Download URL isospecpy-2.6.0-py3-none-win32.whl
Size 257.8 kB
Tags Python 3 Windows x86-32
SHA-256 checksum
How to use checksums
5ecf265eddeefd5a2983f38a7768aba09087a6da995714de4ac70f4b9e44f128
BLAKE2b-256 checksum
How to use checksums
459b553ba7e14ab1b9ed56057a426af25af43cfe5fde49edaf25facd1254298c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-musllinux_1_2_x86_64.whl

Download URL isospecpy-2.6.0-py3-none-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
424463a3fc74b02280f388d33fea5ce3292338405d821b72f392c96fd265cde8
BLAKE2b-256 checksum
How to use checksums
5cd1613560f38a81c0526edfec5236dadf511a156d2ddeb9a5815c43aaa2119b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-musllinux_1_2_aarch64.whl

Download URL isospecpy-2.6.0-py3-none-musllinux_1_2_aarch64.whl
Size 1.3 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
1efda91c5f442869e282b39544c544b13678a36544d5b7c741dc04f191bc16ac
BLAKE2b-256 checksum
How to use checksums
009760b2b17734a6f1b3bbee9d9d436a63a453a4c8e8223048b8541cfcee0ba4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL isospecpy-2.6.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 304.6 kB
Tags Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
03bdde865284a0a4837adfde6a368f1eee95e6e02d07436e32c92b6a7e19c0aa
BLAKE2b-256 checksum
How to use checksums
91336f838567e27ffea13003fbd7f18d7317ab665668d19fb8919493eb06097b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL isospecpy-2.6.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 290.8 kB
Tags Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
02d5214ebafd840fb3ad0966eae30d962946ca2cdf51c9d73b12bff5561a269c
BLAKE2b-256 checksum
How to use checksums
0cccf48934a3cb92fa91312e3529598414c292a64b554bcdd3297b8e6fd2a9d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-macosx_11_0_arm64.whl

Download URL isospecpy-2.6.0-py3-none-macosx_11_0_arm64.whl
Size 636.7 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
60c05ca2f5be4387a054239d3d6dc866c84af972bea26660ca5c56a01f430ff5
BLAKE2b-256 checksum
How to use checksums
8e67616eb02e736cd0f0e0465d142e4278454639ddda22216c0ce365fa4b4613
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Release files / isospecpy-2.6.0-py3-none-macosx_10_9_x86_64.whl

Download URL isospecpy-2.6.0-py3-none-macosx_10_9_x86_64.whl
Size 682.3 kB
Tags Python 3 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
986427aab8353004c2ea616fcd33092e8a41881bc2952174efc5dd278097e0b0
BLAKE2b-256 checksum
How to use checksums
e0e2899dc0b125372f47a8cabcc1009d31350a4a62912dfc2098e4fbbda8bd19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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

Transparency log

Security for IsoSpecPy 2.6.0

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 10 files in this release have been uploaded with provenance metadata.

Select from 10 files

Attestation for isospecpy-2.6.0.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 26, 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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.6.0 This release

10 release files Full provenance

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