Skip to main content

vdjtools

vdjtools — immune-repertoire analysis

PyPI CI docs python license

TCR/BCR immune-repertoire analysis — a clean-room Python + C++ rewrite of the legacy Groovy/Java vdjtools, standardised on the AIRR schema and polars DataFrames with minimal object-orientation.

Built on the antigenomics ecosystem: seqtree (fuzzy search / e-value engine), vdjmatch (overlap + TCRnet), arda (AIRR annotation + markup repair).

Status: v2.2.0 — the native V(D)J model engine plus the full analytics suite (diversity, overlap/TCRnet, preprocessing, biomarkers, single-cell), CDR features, and legacy-format ingestion (MiXcr, MiGec, immunoSEQ, IMGT/HighV-QUEST, Vidjil, RTCR, TRUST4, arda). Clonotype columns follow the AIRR junction convention (junction_nt / junction_aa). The legacy v1.x tool lives on the legacy-1.x branch and its releases remain available under the repository tags (v0.0.11.2.1).

Install

pip install vdjtools

Prebuilt wheels ship for CPython 3.10–3.13 on Linux, macOS (Apple Silicon), and Windows; the native _core C++ extension is bundled (the source distribution compiles it on install). The pure-analytics paths (diversity / spectratype / usage / overlap) work out of the box; the model and annotation paths additionally pull in arda (MMseqs2):

pip install "vdjtools[model]"

Development

conda env create -f environment.yml   # python + mmseqs2 (arda backend) + C++ toolchain
conda activate vdjtools
pip install -e ".[dev,test]"          # builds the _core C++ extension

Or run the bootstrap script: bash setup.sh --dev-parents --tests.

Quickstart — recombination model engine

Precomputed models for all 7 human loci ship in the wheel — no OLGA or download needed:

from vdjtools.model import load_bundled, native
from vdjtools.model.generate import generate

model = load_bundled("TRB", source="olga")     # or source="learned" (fit to real repertoires)

native.pgen_nt(model, "TGTGCCAGCAGC...")        # nucleotide generation probability (native C++)
native.pgen_aa(model, "CASSLAPGATNEKLFF")       # amino-acid Pgen (codon-marginalised)
native.pgen_aa(model, "CASSLAPGATNEKLFF", mismatches=1)   # + the whole Hamming-1 ball
native.pgen_aa_batch(model, seqs, mismatches=1, threads=0)  # Pgen over many CDR3s, thread-parallel (~11×)
generate(model, 1000)                           # sample a repertoire -> polars DataFrame

Matches OLGA's Pgen to machine precision across all 7 loci, and adds tandem-D (D-D) support that OLGA/IGoR lack. Learn a model from your own out-of-frame reads with model.infer.infer_native.

Explore any model's recombination Bayes net interactively (entropy, mutual information, marginals):

pip install "vdjtools[examples]"
marimo edit notebooks/model_explorer.py

Command line

pip install vdjtools installs the vdjtools command — the model engine (OLGA/IGoR-style) and the repertoire analytics (over sample files or a metadata table, like the legacy tool):

# recombination model engine — built-in models for all 7 loci (no download)
vdjtools models                                # list the bundled models
vdjtools generate -m TRB -n 1000 -o gen.tsv    # sample sequences   (cf. olga-generate_sequences)
vdjtools pgen seqs.tsv -m TRB -o pgen.tsv      # Pgen per CDR3       (cf. olga-compute_pgen)
vdjtools pgen seqs.tsv -m TRB --mismatches 1   # + the Hamming-1 ball; --v-col/--j-col to condition

# repertoire analytics — sample files, or a cohort via -m/--metadata + --base-dir
vdjtools diversity      sampleA.tsv sampleB.tsv -o diversity.tsv
vdjtools overlap        *.tsv -o overlap.tsv
vdjtools segment-usage  *.tsv --segment v -o usage.tsv
vdjtools spectratype    *.tsv -o spectra.tsv

Native vdjtools and AIRR Rearrangement inputs are auto-detected; every command writes TSV to -o (or stdout, so it pipes). Run vdjtools <command> --help for options.

Analytics (Python API)

Every reader returns one canonical polars clonotype frame (AIRR junction columns), and every analysis function takes and returns such frames — so results chain together and drop straight into plotting. A tour of the analysis modules (full runnable walkthrough in the User guide):

from vdjtools import io as vio, stats, features, overlap, preprocess

# load (auto-detects MiXcr / immunoSEQ / AIRR / native / … and converts), or a whole cohort:
sample = vio.read("clones.tsv")
cohort = vio.read_samples(vio.read_metadata("metadata.txt"), base_dir="samples/")

# diversity, rarefaction, segment usage, spectratype
stats.diversity_stats(sample)                 # observed, Chao1, Shannon, inverse-Simpson, d50, …
stats.inext(sample, q=(0, 1, 2))              # Hill-number rarefaction/extrapolation + bootstrap CIs
stats.segment_usage(sample, "v")              # V (or "j") usage;  stats.spectratype(sample)

# CDR3 physicochemistry & k-mers
features.physchem_profile(sample, region="all")

# repertoire overlap & TCRnet (fuzzy/similarity/TCRnet via the [overlap] engine)
overlap.overlap_metrics(sampleA, sampleB)     # F / D / Jaccard / Morisita-Horn …
overlap.tcrnet(sample)                         # per-clonotype neighbourhood enrichment

# preprocessing: downsample to a common depth, error-correct, filter, pool
preprocess.downsample(sample, 100_000)
preprocess.correct(preprocess.filter_functional(sample))

Incidence-based biomarkers (Fisher association, Emerson-2017 design) and single-cell paired-chain Pgen are one call each:

from vdjtools.biomarker import fisher_association
from vdjtools import sc

fisher_association(cohort, phenotype, pheno_col="cmv")   # enriched/depleted clonotypes + p-values
sc.paired_pgen(sc.pair_chains(sc.read_10x("filtered_contig_annotations.csv")))  # pgen_alpha·pgen_beta

Performance

The Pgen / generation / EM / diversity hot paths are a native C++ (pybind11) core; everything else is polars. Amino-acid Pgen matches OLGA to machine precision (1e-15) across all 7 loci while being several times faster, and the built-in models keep the resident set small. Single thread, Apple M3 (arm64), bundled human TRB model:

operation throughput vs OLGA
nucleotide Pgen (single-D VDJ) ~0.5 ms/seq
amino-acid Pgen ~0.6–0.9 ms/seq 8.6×
Pgen + Hamming-1 ball (1 substitution) ~15 ms/seq 8.7×
sequence generation ~32 000 seq/s

Nucleotide Pgen (via the same transfer-matrix DP as the aa path — an in-frame CDR3 is an aa query with one codon fixed per position) is exact vs OLGA across all loci. Batched Pgen / 1-mismatch over many CDR3s parallelises over sequences (native.pgen_aa_batch, ~11× on 16 cores, bitwise-identical to the serial result); the EM E-step parallelises over reads (~6.7× on 8 threads); diversity/rarefaction run on a native iNEXT kernel (bootstrap + parallel batch). Memory stays light — ~63 MB resident for import vdjtools plus one loaded model, ~123 MB with all seven bundled models resident. Reproduce with appendix/bench_pgen.py and the test_*_benchmark.py suites (RUN_BENCHMARK=1).

Capabilities (see the User guide, the API reference, and ROADMAP.md)

  • IO — canonical clonotype frame on AIRR junction columns (junction_nt / junction_aa); readers for native vdjtools, AIRR Rearrangement TSV, and Parquet, plus format-detecting converters for MiXcr (v1/2 + v3/4, incl. C-gene / BCR isotype), MiGec, Adaptive immunoSEQ (v1/v2), IMGT/HighV-QUEST, Vidjil, RTCR, TRUST4, and arda AIRR output (vdjtools.io.convert); metadata-driven batch + hive-partitioned cohorts.
  • Model — native V(D)J recombination model: generation probability (Pgen — nt, aa, 1-mismatch, V/J-agnostic, thread-parallel batch), sequence generation, and EM inference, all in a native (pybind11) core. Supersedes OLGA and IGoR: arda-driven scenario enumeration, polars marginal tables, read-parallelised EM, and tandem-D (D-D) support. Concordant with OLGA across all 7 loci; precomputed OLGA + real-data-learned models bundled (load_bundled).
  • Stats — diversity (Chao1/Shannon/Simpson/…), spectratype, V/J/VJ usage.
  • Features — CDR physicochemical profiles, k-mer / V+k-mer summaries.
  • Overlap — sample overlap and TCRnet (via vdjmatch/seqtree), similarity-aware overlap, clustering.
  • Preprocess — downsampling, error-correction, VJ-usage batch-effect correction, pooling/joining.
  • Biomarker — incidence-based association (Fisher) vs HLA / condition / chain-pairing; metaclonotypes.
  • Single-cell — AIRR Cell / 10x interoperability, chain pairing + QC, and paired α/β Pgen.

License

GPL-3.0-or-later.

Download files

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

Source Distribution

vdjtools-2.2.1.tar.gz (684.1 kB view details)

Uploaded Source

Built Distributions

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

vdjtools-2.2.1-cp313-cp313-win_amd64.whl (951.3 kB view details)

Uploaded CPython 3.13Windows x86-64

vdjtools-2.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (991.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vdjtools-2.2.1-cp313-cp313-macosx_11_0_arm64.whl (949.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vdjtools-2.2.1-cp312-cp312-win_amd64.whl (951.2 kB view details)

Uploaded CPython 3.12Windows x86-64

vdjtools-2.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (991.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vdjtools-2.2.1-cp312-cp312-macosx_11_0_arm64.whl (949.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vdjtools-2.2.1-cp311-cp311-win_amd64.whl (949.6 kB view details)

Uploaded CPython 3.11Windows x86-64

vdjtools-2.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (992.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vdjtools-2.2.1-cp311-cp311-macosx_11_0_arm64.whl (947.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vdjtools-2.2.1-cp310-cp310-win_amd64.whl (948.3 kB view details)

Uploaded CPython 3.10Windows x86-64

vdjtools-2.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (992.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vdjtools-2.2.1-cp310-cp310-macosx_11_0_arm64.whl (945.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file vdjtools-2.2.1.tar.gz.

File metadata

  • Download URL: vdjtools-2.2.1.tar.gz
  • Upload date:
  • Size: 684.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vdjtools-2.2.1.tar.gz
Algorithm Hash digest
SHA256 5cb265159d03b05d413d152bc94ac795dbc66d50d5e50d3b03d8b2f6a7630ea1
MD5 4756a784c62ef79039155e6c869a629d
BLAKE2b-256 2c0e9c959bf1a5457a2cd919e1c498faff3955d6f8fe9699a97489b0deac28fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1.tar.gz:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: vdjtools-2.2.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 951.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vdjtools-2.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cb6258498477e14da6d24c8b2b6d6f1ebdae2e7623de08289a0331cc51bdec14
MD5 1110481afcdc3a85f9e5bec23a82315c
BLAKE2b-256 302c7e46fea17a2cd0e2b73ff2742913fffe6ff2cd9242d817de6d81c69f0862

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b9c728986b93ded0ca68b59173c749437098dd18eda0bff7b0dd9510ab04deeb
MD5 c39261e78969b955026a5b114b3e1132
BLAKE2b-256 ae4614390dda3db88ead2b2753e4e291887612575904330d32c22115cae66c15

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 279fe050466738bcfd50036fb36a85486dff869015a7d652a61366e7f9f0c93e
MD5 526aa3848b5858b9d1fc9f12403a2b68
BLAKE2b-256 e63ff90376e341dc59aab4604e19f3e215a005fafdaf839299095fcf641d9ccc

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: vdjtools-2.2.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 951.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vdjtools-2.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d13d7567c11db5ddb0be9850e4c4899301e947651d0b1b474df660cfa6fc832d
MD5 5cc23aba7e73aa1938181d7012a26c29
BLAKE2b-256 b48227b100641df67a11127e34763004cdf8b98ab3741aa71633d5992edfb5fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 19d228f74f5bf23a23ef8a4ab96f347f991261fe5f72c6521a5efded8928258b
MD5 b08c3711aed8a5c92d57eaaf597f8aa1
BLAKE2b-256 c4f0129ebf269ce31e7300ec0e57a50c113c3e35ea3303fb1d497d0614e9aeff

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29ef1bf350b5c51e9f1f4f93ed6a06f03e9c4e022b0981b8a3abe7f506fc8283
MD5 a6667c489001fda540ab008628a52fe7
BLAKE2b-256 e42a88ecfd680e2d0a50b8a8af1066851fda227103865002025d52752c990d3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: vdjtools-2.2.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 949.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vdjtools-2.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 367f06339108521ebc21f745fdd829af0ddc0b4770fa0cf4daaf0b6aaccdf163
MD5 485f9e4b75e02dd441fde1964a9e4d00
BLAKE2b-256 5380acc1a0a059b633e3a4c5bce4719c1fb46ff684519fdd4674a3d085149402

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1a591faa438c82e86d5f5ec37988862cfefceee8d1ec3b04239a638a6d12d82
MD5 af86bf8f04d66ffe9608fb16fae37e40
BLAKE2b-256 7551443b8c0e965830ec21675b8cd6a33729ec54aca6a81fd4cd6e2e46cf4983

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a474a2a2186bf7dc7f5bc34b3c14d89d00bb27fa8bc7fbb732c22b09a9dad10e
MD5 fa013da491d120da17f2522d01a7ad19
BLAKE2b-256 d948cecc90c206b4ff299f2619a6b6954c7b06b2e7dc38aaca8e7e15fd7b9662

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: vdjtools-2.2.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 948.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vdjtools-2.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1a0360e642680bb1b386fb3c23816db23c44126b5543116b7761ab9a2f93df95
MD5 29a078845b9bd3cedc1adb6277edf69c
BLAKE2b-256 3c071904b1dd683a41c0133c8e49e4a27d6871cf170fa628a6509836439cf881

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05a4215cbbf06d3f3030ebc726e6d46a467cdca62a8f4d4245d2f7c1cf9c0dd7
MD5 b5463856ab02eefb8c060d04354977ba
BLAKE2b-256 d7326fce7f8aa7f9262f4dbca87a14858acb4ba501440a5b612e0c00c830850e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

File details

Details for the file vdjtools-2.2.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vdjtools-2.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 852d99900f35d37df466fd843ed0fdccaf5580ddaa75b2fea6b4f28f6c653349
MD5 27b1a213e23d0f82343914c2e9797021
BLAKE2b-256 b8e702fa99384026620d79a7a914ce401b508e5690b79de9a6b985944ccfc7a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vdjtools-2.2.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on antigenomics/vdjtools

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

Release history Release notifications | RSS feed

3.10.0

13 files

3.9.3

13 files

3.9.2

13 files

3.9.1

13 files

3.9.0

13 files

3.8.0

13 files

3.7.3

13 files

3.7.0

13 files

3.6.1

13 files

3.6.0

13 files

3.4.0

13 files

3.2.0

13 files

3.1.2

13 files

3.1.1

13 files

3.1.0

13 files

3.0.0

13 files

2.9.0

13 files

2.8.0

13 files

2.7.0

13 files

2.6.0

13 files

2.5.1

13 files

2.3.0

13 files

This release

2.2.1 This release

13 files

2.2.0

13 files

2.1.0

13 files

2.0.0

13 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