Skip to main content

Source-available Rust/Python quantum error correction decoder package for QEC research, PyMatching-compatible validation, belief-matching, BP-OSD/qLDPC workflows, CPU/GPU batch decoding, and reproducible benchmark evidence

Project description

QECTOR Decoder v3

Python and Rust quantum error correction decoder package.

QECTOR Decoder v3 helps researchers and developers test quantum error correction decoder workflows from Python, with native Rust performance paths and reproducible benchmark artifacts.

Common search terms: quantum error correction, QEC decoder, quantum decoder Python, Rust quantum error correction, PyMatching-compatible decoder, Stim workflow, Sinter benchmark, BP-OSD, LDPC, qLDPC, surface code decoder, MWPM decoder, union find decoder, belief matching, PyO3, maturin, QECTOR.

Website: https://www.qector.store
PyPI: https://pypi.org/project/qector-decoder-v3/
DOI: https://doi.org/10.5281/zenodo.20825980
Repository: https://github.com/GuillaumeLessard/qector-decoder
Commercial licensing: https://www.qector.store


Installation

Recommended command:

pip install qector-decoder-v3

Verify the install:

python -c "from qector_decoder_v3 import UnionFindDecoder, BlossomDecoder; print('QECTOR OK')"

Optional extras:

pip install "qector-decoder-v3[stim]"
pip install "qector-decoder-v3[bench]"
pip install "qector-decoder-v3[all]"

Windows note

Use the pip bound to your active standard Python environment. Do not force py -m pip unless you have checked which interpreter the Windows launcher selected.

On some systems, py can select a free-threaded interpreter such as python3.13t.exe. QECTOR v0.5.x publishes standard CPython wheels, not cp313t free-threaded wheels.

Working Windows command:

pip install qector-decoder-v3
python -c "from qector_decoder_v3 import UnionFindDecoder, BlossomDecoder; print('QECTOR OK')"

Check launcher targets with:

py -0p

Supported public wheels

Platform Wheel status
Linux x86_64 Published
Windows x64 Published
macOS arm64 / Apple Silicon Published
macOS Intel x86_64 Not published in v0.5.x public CI
CPython free-threaded builds such as cp313t Not published in v0.5.x

Supported Python classifiers are standard CPython 3.9 to 3.13.


Quick start

import numpy as np
from qector_decoder_v3 import UnionFindDecoder, BlossomDecoder

check_to_qubits = [[0, 1], [1, 2], [2, 3], [3, 4]]
n_qubits = 5
syndrome = np.array([0, 1, 0, 0], dtype=np.uint8)

uf = UnionFindDecoder(check_to_qubits, n_qubits)
print(uf.decode(syndrome))

mwpm = BlossomDecoder(check_to_qubits, n_qubits)
print(mwpm.decode(syndrome))

Batch decoding:

import numpy as np
from qector_decoder_v3 import BatchDecoder

checks = [[0, 1], [1, 2], [2, 3], [3, 4]]
syndromes = np.random.randint(0, 2, size=(4096, 4), dtype=np.uint8)

cpu = BatchDecoder(checks, n_qubits=5)
corrections = cpu.parallel_batch_decode(syndromes)
# single-shot also works (v0.5.3+):
corrections_single = cpu.decode(syndromes[0])
print(corrections.shape)

API surface

Stim / DEM integration

import stim
from qector_decoder_v3.stim_compat import (
    from_stim_detector_error_model,
    stim_circuit_to_check_matrix,  # identical alias
    to_stim_decoder,
    stim_decoder_from_dem,
)

dem = stim.Circuit.generated(
    "surface_code:rotated_memory_x", distance=5
).detector_error_model(decompose_errors=True)

c2q, nq = from_stim_detector_error_model(dem)
# or equivalently: stim_circuit_to_check_matrix(dem)

decoder = stim_decoder_from_dem(dem)

Sinter integration

import sinter
from qector_decoder_v3.sinter_compat import (
    QectorSinterDecoder,
    QectorDecoderWrapper,   # backward-compat alias for QectorSinterDecoder
    qector_sinter_decoders,
)

samples = sinter.collect(
    num_workers=4,
    tasks=tasks,
    decoders=["qector_belief", "qector_blossom", "qector_unionfind"],
    custom_decoders=qector_sinter_decoders(),
)

# standalone single-syndrome decode (v0.5.3+, no Sinter required):
dec = QectorSinterDecoder("blossom")
obs = dec.decode(syndrome, dem=dem)

BeliefMatching raw H constructor (v0.5.3+)

import numpy as np
from qector_decoder_v3.belief_matching import BeliefMatching

# From a Stim DEM (recommended for circuit-level noise):
bm = BeliefMatching.from_detector_error_model(dem)

# From a raw check matrix H (uniform prior p=0.1):
H = np.array([[1, 1, 0], [0, 1, 1]], dtype=np.uint8)
bm = BeliefMatching(H, p=0.05)
obs = bm.decode(syndrome)

CUDA / GPU

from qector_decoder_v3 import CUDABatchDecoder

# Always check availability before constructing
if CUDABatchDecoder.is_available():
    dec = CUDABatchDecoder(check_to_qubits, n_qubits)
    corrections = dec.batch_decode(syndromes)
else:
    print("No CUDA GPU detected — use BatchDecoder for CPU batch decoding")

Independent validation (v0.5.3)

Validated by independent automated test suite (87/87 checks PASS on v0.5.3). Platform: Windows 10, AMD Ryzen 16-core, NVIDIA GTX 1660 Ti (CUDA 7.5), Python 3.11, PyMatching 2.4.0. Full artifact: benchmark_results/results_v053_retest.json.

v0.5.3 API fixes (all 3 verified):

Fix Before After
BatchDecoder.decode(syndrome) absent (only parallel_batch_decode) present, 1-row batch wrapper
BeliefMatching(H, p=0.1) TypeError (expected _Matrices) accepts raw numpy H, uniform prior
QectorSinterDecoder.decode(syndrome, dem) absent present, DEM cached on first call
Claim Result
30 decoder x code combinations, 100% syndrome-valid corrections Confirmed
pymatching_compat bit-identical to PyMatching 2.4.0 Confirmed
Blossom LER within 0.00% of PyMatching on repetition code d=3-9 Confirmed
Blossom LER within 1.78% of PyMatching on rotated surface code d=3-7 Confirmed
CUDA batch 100% CPU-agreeing at all tested batch sizes (GTX 1660 Ti) Confirmed
CUDA batch 6.9-7.7x faster than CPU batch at 100k shots Confirmed
Workbench single-decode rep d=5 Blossom: 285,713 dec/s, p50 3.50 us, p99 9.50 us Confirmed
AutoDecoder backends: cpu, cuda GTX 1660 Ti, opencl=False Confirmed
Workbench JSON/CSV/PDF export pipeline end-to-end Confirmed
LookupTableDecoder table_size for rep d=5: 64 entries Confirmed
d=101 stress decode completes without error Confirmed
Invalid input rejected with clear ValueError / TypeError Confirmed

Single-shot latency reference (us/decode, 2000 samples, independently validated)

Decoder rep d=5 rep d=9 surf d=3 surf d=5
UnionFindDecoder 9.3 10.0 12.2 10.1
FastUnionFindDecoder 9.5 10.2 11.4 12.1
BlossomDecoder 10.6 10.6 14.8 16.8
SparseBlossomDecoder 11.8 10.6 11.5 29.2
CPUBatchDecoder 11.2 9.7 9.5 10.7
LookupTableDecoder 8.7 10.7 9.5

LookupTableDecoder is the fastest single-shot decoder on rep d=5 (precomputed table, 64 entries, O(1) lookup).

Known limitations

  • Union-Find is ~3x less accurate than MWPM — expected speed/accuracy trade-off.
  • Single-round code-capacity noise does not produce surface-code distance scaling. Use circuit-level Stim DEM with qector_sinter_decoders() for threshold curves.
  • SparseBlossom batch may return different (but valid) corrections than single-shot on degenerate syndromes. Benign matching degeneracy.
  • CUDABatchDecoder raises RuntimeError cleanly when no CUDA GPU is present. Use CUDABatchDecoder.is_available() to check first.

License

Source-available. Commercial use requires written licensing through https://www.qector.store.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

qector_decoder_v3-0.5.6-cp313-cp313-win_amd64.whl (517.8 kB view details)

Uploaded CPython 3.13Windows x86-64

qector_decoder_v3-0.5.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (617.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

qector_decoder_v3-0.5.6-cp313-cp313-macosx_11_0_arm64.whl (546.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

qector_decoder_v3-0.5.6-cp312-cp312-win_amd64.whl (517.4 kB view details)

Uploaded CPython 3.12Windows x86-64

qector_decoder_v3-0.5.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (616.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

qector_decoder_v3-0.5.6-cp312-cp312-macosx_11_0_arm64.whl (546.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

qector_decoder_v3-0.5.6-cp311-cp311-win_amd64.whl (517.7 kB view details)

Uploaded CPython 3.11Windows x86-64

qector_decoder_v3-0.5.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (616.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

qector_decoder_v3-0.5.6-cp311-cp311-macosx_11_0_arm64.whl (550.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

qector_decoder_v3-0.5.6-cp310-cp310-win_amd64.whl (518.0 kB view details)

Uploaded CPython 3.10Windows x86-64

qector_decoder_v3-0.5.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (617.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

qector_decoder_v3-0.5.6-cp310-cp310-macosx_11_0_arm64.whl (551.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

qector_decoder_v3-0.5.6-cp39-cp39-win_amd64.whl (519.2 kB view details)

Uploaded CPython 3.9Windows x86-64

qector_decoder_v3-0.5.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (618.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

qector_decoder_v3-0.5.6-cp39-cp39-macosx_11_0_arm64.whl (552.1 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file qector_decoder_v3-0.5.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 33f8423d656aadf9b0ec14fee99aead5dca620a6002571258a8f600574092d27
MD5 d3b405876f5e66598ba7151647b2fff2
BLAKE2b-256 f4a39bf89e8e896448eff24511375e23783f75db27a4e0db13a3eceb3ab562cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp313-cp313-win_amd64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ab85ac6fb1aa2aff8a6d52432d1ec4f4bfc5abaa3ae49cdb885adbefbcb020a1
MD5 4ece341ab78776d3aa717e436ccd0172
BLAKE2b-256 6b47043e9245b35df414fa2718e4834500271ea772b0b303e0e32d2284b97e39

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ca5a5708b383b7ecea4d7a8cc6ad05e01c2769e8f2ac09b5f3af3796e210286d
MD5 c827edc6cf30eb99ccac77cb5380bb9b
BLAKE2b-256 cbf130e7ba0cd8843a09be07e05f989a74e4d8fa8e74d663e1e780fb3c593733

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 948d97c3d16eb29ebce46f56198183b258c3622fcac40f5068d08fbce78e1421
MD5 4f3fd6d830774df4426e3f3546da1bfa
BLAKE2b-256 ea51adb008a17889e6f68d6ffb87850f91a1844427d5a604523b82e9f850454b

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp312-cp312-win_amd64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 69b06db413e6ef81db0a7184f65b44da4a821d0f82ccad2a1d18785a5f1892ab
MD5 6cc25cd37e65a35af92ef81e807d3484
BLAKE2b-256 0369db5c57ef52cb2cde52f71ec24ceacd678e8fa8e273c76f7ddb5962eef5a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f27ff7c2142b3458be47e134748be66b5d6bddf44d6939a130ab7bd25218d2a
MD5 1bebf7c99ecdce64eb5426fa4b80886c
BLAKE2b-256 9b92ed9cadad92d3204adaf9050c9f37c5f0f85d54c62f47b0d1595ffa3ed69e

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 70484a0b3b8e4f05acbeec2d6293d2ff072052b0ff3be684c15ec62df0084c41
MD5 a5f5eb43e2c0af2e881d56fdb318d918
BLAKE2b-256 4db71de6509ef7cf3026af03f4e083489e2110be9a0d3e52078d9de560e1d5b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp311-cp311-win_amd64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5798e06f4b6e9eb0302273136c1d78fe36422c6349ce9b111c97701051e8c3cf
MD5 c2b124ab5328ac96b74d66f18f1e87bd
BLAKE2b-256 c8e010db3eb8a584efe4a805f69b9fa844fba829b8944961156a07f95b949c8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a9e50d939184fbe3453b2c222bfa41c9a187a24a63848db7a89b5a8b5f465a84
MD5 f2cd8ee3cdb96b7f0e4f6c99c91de569
BLAKE2b-256 5f992459402397e7024b2c0cb5d1dfdec8d4d0faedde84b324dc0346b08f8cb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1c2034097021b7aa6a2a84915a895a7bacc5465b3e2211333e8338bb2ac6a3fb
MD5 8e5df33b6ccbc73dc9923992884b23c4
BLAKE2b-256 a26f2ee29f601f628ac2d2ae08cae77d926a10b13862371a9d8aedce668a51f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp310-cp310-win_amd64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87b3bb92529e71e8c051ff422b0a77c241b7eade67705efa08b2435f472c687e
MD5 31e54f5698f327480763d67a00670049
BLAKE2b-256 5afc5c93eb9aef7d1edbeb1494b3983dbd417537a86f4dc61d393cb0543d07af

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c0f2713ac6ba88bce318689b968ef6db004a249537cab149ceed49cd3b466f06
MD5 48a04a777b6cc7a49708e76ddd8d4dbd
BLAKE2b-256 58d23692b99235795335e83ffcc37aa1ab4a2f11536421dcb28e97b2630added

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0a92258b16c7c0ed510e6fe2e845c1583a12bcbfabfbd0859a19b8e759dfc299
MD5 77dc357a3c10ddbfd3b2d169ed2caf91
BLAKE2b-256 3551f7c7ad71387325bc61479b9a1e7f60fb45e9a8f2f83d8744b4b3490f7f8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp39-cp39-win_amd64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 70ccc3f4f31aa712d4a08c19be6b569407332fd31d3cbc95cf96e3f18f9a72e6
MD5 f9a8cb447852ca878dffaf9b3a69f5b5
BLAKE2b-256 7462fa6b6770087c09f083a1021e10243c965071ad0b4ac9fa0b945c516291be

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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

File details

Details for the file qector_decoder_v3-0.5.6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for qector_decoder_v3-0.5.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3319b1ace7d67f6813ab5a85b324e4738dcb620011d98f0cb694d0c4d80e8dcb
MD5 a05582397bab43c69afe5ac9cb554805
BLAKE2b-256 1dd325097bfb6d0d64d9044b22654580356d82122b355607cec283ba455cac74

See more details on using hashes here.

Provenance

The following attestation bundles were made for qector_decoder_v3-0.5.6-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: CI.yml on GuillaumeLessard/qector-decoder

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