Skip to main content

Fast tree distance calculations (Robinson-Foulds, Weighted RF, Kuhner-Felsenstein) for phylogenetic trees

Project description

๐ŸŒฒโšก rapidtrees

Blazingly fast pairwise phylogenetic tree distance calculations โ€” Robinsonโ€“Foulds, Weighted RF, and Kuhnerโ€“Felsenstein โ€” powered by Rust

Crates.io PyPI CI Coverage License: MIT

Overview โ€ข Installing โ€ข Usage โ€ข Python API โ€ข Snap Format โ€ข Benchmarks


๐Ÿ—บ๏ธ Overview

rapidtrees computes pairwise tree distances from BEAST/NEXUS .trees files or from precomputed .snap files and writes a labeled distance matrix. Three metrics are supported:

Metric Flag Output Description
Robinsonโ€“Foulds --metric rf integer Symmetric difference of bipartitions
Weighted RF --metric weighted float Branch-length-weighted bipartition difference
Kuhnerโ€“Felsenstein --metric kf float Euclidean distance on branch lengths

โœจ Why rapidtrees?

  • ๐Ÿฆ€ Rust core โ€” zero-overhead bitset operations with a cache-friendly memory layout
  • ๐Ÿ”€ Parallel by default โ€” powered by rayon, automatically scales across all cores
  • ๐Ÿ Python bindings โ€” drop into any Python/NumPy workflow via PyO3
  • ๐Ÿ“ฆ No Rust toolchain required โ€” pre-built wheels on PyPI for Linux, macOS, and Windows
  • ๐Ÿ—œ๏ธ Gzip output โ€” stream directly to .tsv.gz without a separate compression step

๐Ÿš€ Performance

Benchmarked on a ZIKA dataset (283 taxa ยท 4 000 trees ยท ~8 M comparisons) (non-gzipped output):

Metric Total time Throughput
Robinson-Foulds ~2.7 s ~3.0 M comparisons/sec
Weighted RF ~3.4 s ~2.3 M comparisons/sec
Kuhner-Felsenstein ~3.3 s ~2.3 M comparisons/sec

๐Ÿ”ง Installing

๐Ÿ Python (PyPI) โ€” recommended

Pre-built wheels for Linux, macOS, and Windows. No Rust toolchain needed.

pip install rapidtrees

๐Ÿฆ€ CLI (crates.io)

Install the standalone command-line binary. Requires the Rust toolchain.

cargo install rapidtrees

๐Ÿ› ๏ธ From source

Prerequisites

  • Rust toolchain โ€” for building the Rust core
  • pixi โ€” for managing Python and R dependencies

Setup

git clone https://github.com/Joon-Klaps/rapidtrees.git
cd rapidtrees
# Set up environment โ€” installs Python, R (with phangorn), and builds the package
pixi install

Development tasks

# Run Python API tests (includes R/phangorn cross-validation)
pixi run test-python

# Run Rust unit tests
pixi run test-rust

๐Ÿ’ป Usage

rapidtrees \
  (--input <path/to/file.trees> | --snap-input <path/to/file.snap>) \
  --output <path/to/output.tsv[.gz]> \
  [--burnin-trees <N>] \
  [--burnin-states <STATE>] \
  [--use-real-taxa] \
  [--metric rf|weighted|kf] \
  [-q|--quiet]
Flag Description
-i, --input <INPUT> Path to BEAST .trees (NEXUS) file
--snap-input <SNAP_INPUT> Path to .snap file (currently supports only --metric rf)
-o, --output <OUTPUT> Output path. Use .gz suffix for gzip compression; - for stdout
-t, --burnin-trees <N> Drop the first N trees (default: 0)
-s, --burnin-states <STATE> Keep only trees with STATE > STATE (default: 0)
--use-real-taxa Map numeric taxon IDs via the TRANSLATE block
--metric <rf|weighted|kf> Distance metric (default: rf)
-q, --quiet Suppress progress messages (errors still go to stderr)

The output is a square TSV matrix where both the header row and first column contain tree names formatted as <file_basename>_tree_STATE<state>. Use -o - to write to stdout for easy piping.

๐Ÿ’ก Examples

Compute RF matrix โ†’ gzipped file
rapidtrees \
  -i tests/data/hiv1.trees \
  -o out/hiv1_rf.tsv.gz \
  --metric rf

# Reading in beast 0.003s
# Read in 162 taxons for 21 trees
# Creating tree bit snapshots 0.002s
# Determining distances using RF for 210 combinations
# Determining distances using RF 0.000s
# Writing to output 0.000s
Apply burn-in by tree count
rapidtrees \
  -i tests/data/hiv1.trees \
  -o out/hiv1_rf.tsv \
  -t 2

# Reading in beast 0.003s
# Read in 162 taxons for 19 trees
# Creating tree bit snapshots 0.001s
# Determining distances using RF for 171 combinations
# Determining distances using RF 0.000s
# Writing to output 0.000s
Compute RF matrix directly from a snapshot file
rapidtrees \
  --snap-input out/hiv1.snap \
  -o out/hiv1_rf_from_snap.tsv.gz \
  --metric rf

# Read snap with 21 trees and 2193 bipartitions in 0.001s
# Determined distances using RF in 0.000s
# Writing to out/hiv1_rf_from_snap.tsv.gz in 0.000s

๐Ÿ Python API

rapidtrees exposes four functions from its Rust core. All accept a Python iterator of newick strings, keeping memory constant regardless of tree count.

Function Returns
pairwise_rf_from_newick_iter (names, bytes) โ€” RF matrix as flat uint32 bytes, row-major
pairwise_rf_with_snapshots_from_newick_iter (names, bytes, leaf_names, n_bip, bytes, bytes) โ€” RF matrix + presence matrix + clade bitmasks
pairwise_wrf_from_newick_iter (names, list[float]) โ€” Weighted RF, flat row-major
pairwise_wrf_with_snapshots_from_newick_iter (names, bytes, leaf_names, n_bip, bytes, bytes) โ€” wRF matrix + branch-length matrix + clade bitmasks
pairwise_kf_from_newick_iter (names, list[float]) โ€” Kuhner-Felsenstein, flat row-major
pairwise_kf_with_snapshots_from_newick_iter (names, bytes, leaf_names, n_bip, bytes, bytes) โ€” KF matrix + branch-length matrix + clade bitmasks
import rapidtrees as rtd
import numpy as np

trees = [
    "(A:0.1,(B:0.1,C:0.1):0.1);",
    "(A:0.1,(C:0.1,B:0.1):0.1);",
    "((A:0.1,B:0.1):0.1,C:0.1);",
]
names = ["t1", "t2", "t3"]

tree_names, rf_bytes = rtd.pairwise_rf_from_newick_iter(
    names, iter(trees), [{}], [0, 0, 0]
)
rf = np.frombuffer(rf_bytes, dtype=np.uint32).reshape(len(tree_names), -1)

For BEAST .trees files, translate maps, the snapshot API, and multi-file usage see docs/python-api.md.


๐Ÿ“ฆ Snap Format

rapidtrees can export tree snapshots to a compressed binary .snap file for downstream analyses (ESS computation, ASDSF, convergence diagnostics) on HPC clusters without re-parsing the original .trees files. The CLI can also compute RF distance matrices directly from .snap files via --snap-input.

What is a snapshot?

A tree snapshot is a compact bitset representation of a phylogenetic tree. Each bipartition (split) is encoded as a bitset over leaf indices. The full set of snapshots for a tree collection captures everything needed for RF-family distance computations and convergence diagnostics โ€” without storing the original Newick strings.

Note: Snapshots are not human-readable and are not intended for general interchange. They are an internal format optimized for fast distance calculations and cannot be convert to it's original newick-style format.

File layout

A .snap file is a gzip-compressed binary stream with the following sections in order:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  HEADER                                              โ”‚
โ”‚  4 bytes  magic        "SNAP" (0x534E4150)          โ”‚
โ”‚  1 byte   version      format version (currently 2) โ”‚
โ”‚  8 bytes  n_trees      u64 LE โ€” number of trees     โ”‚
โ”‚  8 bytes  n_taxa       u64 LE โ€” number of leaf taxa โ”‚
โ”‚  8 bytes  n_bip        u64 LE โ€” number of unique    โ”‚
โ”‚                         bipartitions across all treesโ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  TAXA NAMES                                          โ”‚
โ”‚  For each of n_taxa:                                 โ”‚
โ”‚    4 bytes  length     u32 LE โ€” byte length of name โ”‚
โ”‚    N bytes  name       UTF-8 string                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  TREE NAMES                                          โ”‚
โ”‚  For each of n_trees:                                โ”‚
โ”‚    4 bytes  length     u32 LE โ€” byte length of name โ”‚
โ”‚    N bytes  name       UTF-8 string                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  PRESENCE MATRIX                                     โ”‚
โ”‚  n_trees ร— n_bip bytes, row-major uint8             โ”‚
โ”‚  presence[i][j] = 1 if bipartition j is in tree i  โ”‚
โ”‚                   0 otherwise                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Bipartition column order is deterministic: columns are sorted in ascending Bitset order (lexicographic over u64 words, i.e. by leaf-index bit pattern), so the same tree set always produces the same column indices regardless of parse order.

What the presence matrix gives you

The presence matrix is sufficient for all major convergence diagnostics:

Diagnostic What you need
Pseudo ESS presence.mean(axis=0) per chain
ASDSF Per-chain split frequencies
Frรฉchet ESS RF distances via XOR of rows
WRF / KF distances Branch lengths โ€” use pairwise_wrf_with_snapshots_from_newick_iter or pairwise_kf_with_snapshots_from_newick_iter

Note: sum(presence[i] XOR presence[j]) == RF(tree_i, tree_j) exactly.

Presence matrix from Python

Snap files are written and read by the CLI only. From Python, use pairwise_rf_with_snapshots_from_newick_iter to obtain the same presence matrix in memory without writing a file โ€” see the Python API section above.

import rapidtrees as rtd
import numpy as np

import math

tree_names, rf_bytes, leaf_names, n_bip, pres_bytes, bip_clade_bytes = (
    rtd.pairwise_rf_with_snapshots_from_newick_iter(
        names, iter(newicks), translate_maps, map_indices
    )
)
n = len(tree_names)
presence = np.frombuffer(pres_bytes, dtype=np.uint8).reshape(n, n_bip).copy()

# Global split frequencies (for Pseudo ESS / ASDSF)
global_freq = presence.mean(axis=0)

# RF distance between any two trees โ€” no recomputation needed
rf_01 = int((presence[0].astype(int) ^ presence[1].astype(int)).sum())

# Named presence matrix โ€” decode clade bitmasks for column labels
bytes_per_bip = math.ceil(len(leaf_names) / 8)
bip_arr  = np.frombuffer(bip_clade_bytes, dtype=np.uint8).reshape(n_bip, bytes_per_bip)
bip_bool = np.unpackbits(bip_arr, axis=1, bitorder="little")[:, :len(leaf_names)]
col_labels = ["|".join(leaf_names[i] for i in np.where(bip_bool[j])[0]) for j in range(n_bip)]
import pandas as pd
df = pd.DataFrame(presence, index=tree_names, columns=col_labels)

โฑ๏ธ Benchmarks

Benchmarks were run on a MacBook Pro M1. Trees are parsed once and bitset snapshots are reused across all pairwise comparisons. Parallelism is provided by rayon โ€” no manual thread management needed.

Show full benchmark table

Output of cargo bench --bench memory_time_benchmark

Taxa (N) Trees (T) Combinations Est. Memory Actual Memory Wall Time CPU Time
10 100 5.0K 13.96 KB 17.87 KB 172.29 ยตs 733.00 ยตs
10 1000 500.0K 139.65 KB 168.95 KB 5.94 ms 12.99 ms
10 10000 50.0M 1.36 MB 1.64 MB 717.43 ms 1.36 s
10 100000 5.0B 13.64 MB 16.40 MB 3.53 min 4.04 min
100 100 5.0K 133.59 KB 136.09 KB 244.42 ยตs 1.75 ms
100 1000 500.0K 1.30 MB 1.21 MB 17.49 ms 50.99 ms
100 10000 50.0M 13.05 MB 11.95 MB 1.08 s 4.81 s
100 100000 5.0B 130.46 MB 119.41 MB 4.29 min 9.86 min
500 100 5.0K 706.84 KB 713.93 KB 2.02 ms 3.08 ms
500 1000 500.0K 6.90 MB 5.89 MB 27.77 ms 216.87 ms
500 10000 50.0M 69.03 MB 57.84 MB 2.82 s 21.30 s
500 100000 5.0B 690.27 MB 577.28 MB 7.44 min 37.13 min
1000 100 5.0K 1.50 MB 1.51 MB 873.75 ยตs 5.63 ms
1000 1000 500.0K 15.03 MB 11.86 MB 51.22 ms 420.94 ms
1000 10000 50.0M 150.32 MB 115.30 MB 5.12 s 42.92 s
1000 100000 5.0B 1.47 GB 1.12 GB 11.26 min 74.74 min
2000 100 5.0K 3.50 MB 3.51 MB 1.14 ms 9.92 ms
2000 1000 500.0K 35.01 MB 24.15 MB 93.73 ms 838.01 ms
2000 10000 50.0M 350.06 MB 230.59 MB 9.42 s 1.38 min
2000 100000 5.0B 3.42 GB 2.24 GB 18.57 min 141.11 min
5000 100 5.0K 14.30 MB 12.43 MB 61.36 ms 83.85 ms
5000 1000 500.0K 143.02 MB 63.97 MB 224.40 ms 2.09 s
5000 10000 50.0M 1.40 GB 579.40 MB 22.45 s 3.44 min

Note: Weighted RF and KF produce floating-point matrices; RF produces integer matrices.


๐Ÿ” Troubleshooting

  • No trees parsed? Verify the input is a valid NEXUS .trees file and adjust --burnin-* settings.
  • Piping to other tools? Use -q to suppress timing messages on stdout.
  • Gzipped output not working? Ensure the output filename ends with .gz.

โš–๏ธ License

rapidtrees is provided under the MIT License.

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

rapidtrees-0.7.0.tar.gz (150.6 kB view details)

Uploaded Source

Built Distributions

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

rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (545.0 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (483.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (477.6 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp314-cp314-win_amd64.whl (307.8 kB view details)

Uploaded CPython 3.14Windows x86-64

rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (539.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (477.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp314-cp314-macosx_11_0_arm64.whl (426.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rapidtrees-0.7.0-cp314-cp314-macosx_10_12_x86_64.whl (434.6 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

rapidtrees-0.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (477.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp313-cp313-win_amd64.whl (307.0 kB view details)

Uploaded CPython 3.13Windows x86-64

rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (540.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (478.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp313-cp313-macosx_11_0_arm64.whl (426.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rapidtrees-0.7.0-cp313-cp313-macosx_10_12_x86_64.whl (434.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rapidtrees-0.7.0-cp312-cp312-win_amd64.whl (307.5 kB view details)

Uploaded CPython 3.12Windows x86-64

rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (541.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (478.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp312-cp312-macosx_11_0_arm64.whl (427.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rapidtrees-0.7.0-cp312-cp312-macosx_10_12_x86_64.whl (435.2 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rapidtrees-0.7.0-cp311-cp311-win_amd64.whl (309.3 kB view details)

Uploaded CPython 3.11Windows x86-64

rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (542.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (481.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

rapidtrees-0.7.0-cp311-cp311-macosx_11_0_arm64.whl (430.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rapidtrees-0.7.0-cp311-cp311-macosx_10_12_x86_64.whl (437.4 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rapidtrees-0.7.0-cp310-cp310-win_amd64.whl (309.3 kB view details)

Uploaded CPython 3.10Windows x86-64

rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (543.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (481.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

Details for the file rapidtrees-0.7.0.tar.gz.

File metadata

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

File hashes

Hashes for rapidtrees-0.7.0.tar.gz
Algorithm Hash digest
SHA256 d9786c72711f165e4e014212dad09cfc164bb2db4a394aac6009c7c2ebfa3b27
MD5 b86aef6c2380f7789ba9c6e599a45261
BLAKE2b-256 99fe0f0c8d986aa21dae9e2045c151c25c27dfeb54cdabfd0dcd2c85ca538d12

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0.tar.gz:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3f8b173ddb0e860da4079a5c6149c721b3fb3998524f94402a8889d1cfa4278
MD5 43c091ee1a6a92623778ea356108df70
BLAKE2b-256 ecc4581a1a7544cc4b7840b856ee232115a457e587079381043c2faaf8fea05d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9758013928fae4852c8ced04d1ddc38d641308ba825b43e67fe109dd6fa6a510
MD5 7334e5a5f4a59d29706c0282a54ce737
BLAKE2b-256 58a8d6e769d7dc570aad1e4bb5d46882222429c7bb89805ab933b7c1d54122f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d097ea70f9af6191d1add0b1170e2afdf8e408a425a7faf0d4b1311c49fc0fc4
MD5 3fcb6ee3b4853484ff88a395fc543012
BLAKE2b-256 66d784fc1e33eb9ea84349b565ab5028f57c0e7ee869fcbbaa08fd3d08cc045a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: rapidtrees-0.7.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 307.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rapidtrees-0.7.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 27247c4c08960d4bbae4d512caa4e9dfb5db5aa269b7ddc1fd65373965a3bc61
MD5 b7baa3178e3cdc92eccdf2f80a728f0d
BLAKE2b-256 7554bc253d93fed2a8fbebcbd6a170247f0a4c4e8ea4c8b5c6320d632ef20123

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp314-cp314-win_amd64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 45c7aecdc8e07e4c11b80d9a15db4e2767293802d4e18924c83bcee58bb88055
MD5 a45ce0acf705e1881c79bf7cbca0ee8b
BLAKE2b-256 fc3e7474187e3c3bed1ce16f4c30657983d181051996a60f02271ff0b726f2ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9fbd1a59cc72a3378a1fc5cc5de9ab347b39c0cb7d612244d6f19b33d9da15e5
MD5 5571b690fe891bd845b6f2373e574826
BLAKE2b-256 4078a2f4ddfe077183be242cf13135e6a83bd8601096a23743c38128b10792dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b419476c8d65ea88d86825debb3a809125bcf56dddb657c9fb20d1bc01911f3
MD5 57dbc7569778bad0854d938dd15e9dc1
BLAKE2b-256 3128b1855298e9110ef6a9b9b0964d81bff56d3d6bce7584051bd0e42c5f309e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 397757247f6e7e49e1fb74fbd3395ae83eea60ffe8ae8b70370f370c09d01ed5
MD5 a1dd4a7d4ebb077c65cccc47216042d6
BLAKE2b-256 4598891b910493db2598eda1d5f729bb366f96803c155af2386c3176323ef50d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7383e8a3f8680bd0a2438b12d6effdb4f37ad3a66a3b50b1571c6c9439f22f49
MD5 01ba0698c4c7b03537efc0fc47d93ae0
BLAKE2b-256 45e4185e990aeba752ed013d22138e1f37357eb81de3a4d811401470c19c8316

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rapidtrees-0.7.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 307.0 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 rapidtrees-0.7.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0357197d582001ee62cdd37fda3aa9c5740a222bb2d0277b9836976fcb5a6cdf
MD5 8d07272dc99ed9dc92e32e4b912975ca
BLAKE2b-256 c772db44fce5cfaf4c2e9354f82d5697eb1b10ee0e22d136431adc4d2fcd91c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp313-cp313-win_amd64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 471b4dda6246b62ccbe5f4e4068a60bd96b3a414d7bbf68b9c48d6f22da64615
MD5 d7d1582ba0069e0a43f3e14ecb63bb1e
BLAKE2b-256 120e6a8491d1161be7af9b2604ecea72fdc1496d96523dfabd081ff53a22c97a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8a78f087d203bb3d0fdb2525cd9d43d21827617c934baffbab280be2b89d39ba
MD5 978a9a95e895e56324e6624e22a7a572
BLAKE2b-256 9bb8acacaf98423e69c9a0ec9b90a18d3b0fc3b8c7939daf357b1665e5fef26a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 864b50a6d9ccdca850c47b51e9c87b10e7923126311ab5d09f91e2996b21f84d
MD5 950148f9a424a7daad1c002f3d0a2646
BLAKE2b-256 cc15b0d8cf0b0c6b713e5dacef18f0ae1cba1489644bcb2bdff396adf61056dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 098deae872e635ca5d1a01e63dd90660019e0f63b64cac5a1296804b207a75a9
MD5 fa2381fb455b155a35156aff97cb46ab
BLAKE2b-256 a9ebd39c66cb827e8a3d1c0e50257ea8b5b0fad55984d707cbf7978ea5c0af2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rapidtrees-0.7.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 307.5 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 rapidtrees-0.7.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a4f60ed7ce5080e0b6b1846eef71b6a4eb9b1bef8a12079f3428ee1740c65b50
MD5 074fbf56553d982fe51f61c631810c44
BLAKE2b-256 8110963c68d3ae904b266a5074ee9c8104ed91f77e6c55ced5b5d41a62a8ce15

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b522cfcc3f7cbe95d49699ba8281e16330311af8f9b4771af2d285e45b4b1fd
MD5 496cb725564a5c1d40dc584aa3d14ad6
BLAKE2b-256 8a68ef7d04517f9ad347c3921d63d96ff044982a0f79b92870c52b9db222d146

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f65d40dbe211e386a788b2b456721f2b7237c87d21afbe6dcb74cbce2948392d
MD5 ac16537e35cd2a1e3e5c615781918f0c
BLAKE2b-256 716023af370e43181166c63bc0bea13120d210662ef741fe55650f688708302a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e064bbd0ca0e8213df570940d3dec5af27478487681b290a8066b432a42194bd
MD5 ca7a9c92c4427dceba1e2a10a493ea3f
BLAKE2b-256 814490fa36cc00b37353bbca438031a394bd737bf885c8e414c153e83009ad79

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0719ab6325db61ec2aa5f9acb09e538b000f96161b82b3aaede0c4d18c39c031
MD5 d36af722ecc9384d4202b6850cc77dc1
BLAKE2b-256 a4c5550938f4f6b7efd57eb8eb51e2f5d191b8fe6786b636ea1eca305e4e925f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rapidtrees-0.7.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 309.3 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 rapidtrees-0.7.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ec19ce4b9c57041326e934c41a5d9d4061ccadfafe782008ad35dd36ed88f596
MD5 bb66f426ab8dc0eb567297acb3a8a9a4
BLAKE2b-256 7e9f85a81efe8a8265d235efb1127d5c56b91f4040c427481c62c906ecb0dde7

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp311-cp311-win_amd64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 90efe51f01ba6f1756771cd9124739785f6983b4a7505c92e43fdb004d317061
MD5 c5cf4a57288a56daf87aec2a6b87845a
BLAKE2b-256 401b7d4276976733f19c166a67bef525a386abb238078d80a6c2cb4c37bf59db

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 30190bfc9fd3d16319d79cf5e15e253257905bbb54e10c719336f51b43800c84
MD5 52c9dcea18e15e9be58765f0f4baa2b5
BLAKE2b-256 f60095dff12bbaa1be1474dacdf0a8fca4b0fd98b209d33bdea1f0196e9a12b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dc86d5facb8de722815dd5701e68bbbe510f2519a4002ecaf8a6bf96d259ae1c
MD5 69a9a1af2f7149709b5e6408b62cdf71
BLAKE2b-256 b76f571185a9ae92d6566d09ca1a83ee2725a2efc15e69d5fefcb620b656a24e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a6f9649794f03ee4cdaf0d6d3aa8aee44d53aa7589a6a7e289d577251dc54a1
MD5 71f6e7c436078c3ad4092ff3c04d45a6
BLAKE2b-256 a6bd8145c093e58ac3df127bd7ff5b34b1bf446629328fd6fd2505851f543358

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rapidtrees-0.7.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 309.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 rapidtrees-0.7.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9ca8fd890a711db63c4997ed545caf0f3f702ba40371eb91120c0486ed95e710
MD5 a04a58b7799825f581f89bf4e396d667
BLAKE2b-256 0bc1d5a1b295936b81a17597d9cabb7f76183ceadae647d68e8042746ad7133f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp310-cp310-win_amd64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e4447878f16557ff558c102532faa2e59a2727131cca88e3468f020d1f865e4
MD5 9e2d612c8aa2880708ed7152931f7d0a
BLAKE2b-256 e0513f55abb6117f92e4fcdac16048519862224d375c82f7db2c5cca61bf3260

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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

File details

Details for the file rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4f77075fbb3d42f732b1aa9c47e52d71c6f97ccf78e35a042a593300abe5cb53
MD5 6520914e95187d4fdd193c671684c576
BLAKE2b-256 4f26bb310bd3a8ff9ae0c7dbdb44ba523f6517a9d57ac8eb963494d3ad46ec7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidtrees-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Joon-Klaps/rapidtrees

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