Skip to main content

Portable and blazingly fast whole slide image compression and serialization library for the Iris File Extension

Project description

The Iris Codec Community module is a part of the Iris Digital Pathology project. This module allows for:

  • Reading and writing of Iris whole slide image (WSI) digital slide files (.iris) and
  • Decoding Iris Codec-type compressed tile image data.

This module was designed to allow for extremely fast slide access using a simple API. We want to simplify access to these files for you.

Iris Codec for Python is available via the Anaconda and PyPi package managers. We prefer the Anaconda enviornment as it includes dynamic libraries if you choose to develop C/C++ applications with Python bindings that dynamically link the C++ Iris-Codec in addition to Python modules.

Pip (PyPi)

PyPI - Version PyPI - Status PyPI - Python Version PyPI - Format PyPI - Downloads

Iris Codec can also be installed via Pip. The Encoder module dynamically links against OpenSlide to re-encode vendor slide files. This may be removed in the future, but it must be installed presently.

pip install iris-codec openslide-bin

Anaconda (Conda-Forge)

Static Badge Conda Version Conda Downloads Conda Platforms

You may configure your conda enviornment in the following way

conda config --add channels conda-forge
conda install iris-codec

Or directly install it in a single command

conda install -c conda-forge Iris-Codec 

or install it with mamba:

mamba install iris-codec

NOTE: The python Conda Forge Encoder does not support OpenSlide on Windows presently as OpenSlide does not support windows with its official Conda-Forge package. We are building in native support for vendor files and DICOM for re-encoding.

Python Example API

Import the Python API and Iris Codec Module.

#Import the Iris Codec Module
from Iris import Codec
slide_path = 'path/to/slide_file.iris'

Perform a deep validation of the slide file structure. This will navigate the internal offset-chain and check for violations of the IFE standard.

result = Codec.validate_slide_path(slide_path)
if (result.success() == False):
    raise Exception(f'Invalid slide file path: {result.message()}')
print(f"Slide file '{slide_path}' successfully passed validation")

Open a slide file. The following conditional will always return True if the slide has already passed validation but you may skip validation and it will return with a null slide object (but without providing the Result debug info).

slide = Codec.open_slide(slide_path)
if (not slide): 
    raise Exception('Failed to open slide file')

Get the slide abstraction, read off the slide dimensions, and then print it to the console.

# Get the slide abstraction
result, info = slide.get_info()
if (result.success() == False):
    raise Exception(f'Failed to read slide information: {result.message()}')

# Print the slide extent to the console
extent = info.extent
print(f"Slide file {extent.width} px by {extent.height}px with an encoding of {info.encoding}. The layer extents are as follows:")
print(f'There are {len(extent.layers)} layers comprising the following dimensions:')
for i, layer in enumerate(extent.layers):
    print(f' Layer {i}: {layer.x_tiles} x-tiles, {layer.y_tiles} y-tiles, {layer.scale:0.0f}x scale')

Generate a quick low-power view of the slide using Pillow images.

from PIL import Image
layer_index = 0 # Lowest power layer is layer zero (0)
scale = int(extent.layers[layer_index].scale)
composite = Image.new('RGBA',(extent.width * scale, extent.height * scale))
layer_extent = extent.layers[layer_index]
for y in range(layer_extent.y_tiles):
  for x in range (layer_extent.x_tiles):
    tile_index = y*layer_extent.x_tiles+x
    composite.paste(Image.fromarray(slide.read_slide_tile(layer_index, tile_index)),(256*x,256*y)) #Iris tiles are always 256 px in each dim
composite.show()

CAUTION: Despite Iris' native fast read speed, higher resolution layers may take substantial time and memory for Pillow to create a full image as it does not create tiled images. I do not recommend doing this above layer 0 or 1 as it may be onerous for PIL.Image

The API for metadata is designed to be intuitive and pythonic. Below shows how to investigate the metadata attribute array and view a thumbnail image, if one is present within the slide file.

result, info = slide.get_info()
if (result.success() == False):
    raise Exception(f'Failed to read slide information: {result.message()}')

print ("Slide metadata attributes")
for attribute in info.metadata.attributes:
    print(f"{attribute}: {info.metadata.attributes[attribute]}")

from PIL import Image
if ('thumbnail' in info.metadata.associated_images):
    image = Image.fromarray(slide.read_associated_image('thumbnail'))
    image.show()

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

iris_codec-2025.2.0a3.tar.gz (75.2 kB view details)

Uploaded Source

Built Distributions

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

iris_codec-2025.2.0a3-cp313-cp313-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.13Windows x86-64

iris_codec-2025.2.0a3-cp313-cp313-musllinux_1_2_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_aarch64.whl (8.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ ARM64

iris_codec-2025.2.0a3-cp313-cp313-macosx_14_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

iris_codec-2025.2.0a3-cp313-cp313-macosx_13_0_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

iris_codec-2025.2.0a3-cp312-cp312-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.12Windows x86-64

iris_codec-2025.2.0a3-cp312-cp312-musllinux_1_2_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_aarch64.whl (8.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ ARM64

iris_codec-2025.2.0a3-cp312-cp312-macosx_14_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

iris_codec-2025.2.0a3-cp312-cp312-macosx_13_0_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

iris_codec-2025.2.0a3-cp311-cp311-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.11Windows x86-64

iris_codec-2025.2.0a3-cp311-cp311-musllinux_1_2_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_aarch64.whl (8.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ ARM64

iris_codec-2025.2.0a3-cp311-cp311-macosx_14_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

iris_codec-2025.2.0a3-cp311-cp311-macosx_13_0_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

File details

Details for the file iris_codec-2025.2.0a3.tar.gz.

File metadata

  • Download URL: iris_codec-2025.2.0a3.tar.gz
  • Upload date:
  • Size: 75.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for iris_codec-2025.2.0a3.tar.gz
Algorithm Hash digest
SHA256 3a8fbb0bcfe7a73fd7e33b7cd1bd6df71a2c8411edad8857df1c4597743659f5
MD5 73026a95bc1169bc871fc461edd48900
BLAKE2b-256 965d216633cf91158c3e5b3665c2fd67e31083ca4ea99216abe7b7b2e2489e6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3.tar.gz:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0b63a65ae0f114bf41f714f5a9e40428e859859926351f9ad37ea1b147441bfa
MD5 720904770f43808f05ed15ead88bf316
BLAKE2b-256 477fb51917c59195d1ce8bbde9ac973b3cc51c959661407969130719e7126eb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp313-cp313-win_amd64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fba3e26f4fca386b00f18683309de87fc2848f90251d0feb2f87f8f4b1f917a9
MD5 7c5e39ae826cde21764b981ad89edfc3
BLAKE2b-256 85d5d93c2509bf637c315f797c39a5d048c67b5dfc45519994107d727d72e39d

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d53a48f84f5abe40870f41228ed057537462508dd49441bd7051ba7028498a39
MD5 dce0ca21869073b3010830d65fa07a44
BLAKE2b-256 2c85b19651864bc5e8d1252bc691c4496ae3f1e6e37efc186ec606c430234a4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 3a80390098ac0ae5e74b28c365b8a722968dd9b37f4a765448f62b88381a3d9b
MD5 710499c7491522d94f47dcb907bc2fe5
BLAKE2b-256 0678223fa36991d0ae80a272a6f02c50d88ecacd23e0f06acc6649fe2a196b1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp313-cp313-manylinux_2_34_aarch64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e8cc264b46a32aea477c23058a83952817c64230a800dff7c41c76b0eb28832c
MD5 f7cd8a8b44083d9d0331732172fd8ff4
BLAKE2b-256 b7bc7e49498cabe1562ad9dc99012424f23ebd7162d78e125916028b108172df

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 1fe8e30b3cfee13811091dc449aaf4039629d2bc32cf2f5333bea6e7224613d4
MD5 84526e0894780ba675aba0b2591b5fc6
BLAKE2b-256 c69aa2e70627651c16bed52573e0ce3980e4a695739b7f75345b5b547b9f6bca

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp313-cp313-macosx_13_0_x86_64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e22b31421af7225b485b77a782a54c88cf54b48e5f8b3e0707b20e8e43556b84
MD5 4ac48ef447d62e9a3a1f0458465ebf8d
BLAKE2b-256 8fc347793d32896db6d0d59bc01e11add9faa4417591bbd221faab9a59459e30

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp312-cp312-win_amd64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8161ff724e40bdd7ab098fd4d64fa8f36899e1ec88e006253b739470ae8c3337
MD5 66fbde745f70a5cceb0dbb80babb524c
BLAKE2b-256 8de8baf603ebb235a50c6803cbacd954ac86684d83c1922f17e73fca15965ff5

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e64f00f5ea68455ba688a2b657db7edf9fd2e0ae0c358efb152acf50ef173ef3
MD5 1cb7f69371cb3b5dad0c4705ff83bc7e
BLAKE2b-256 d0a1e00f4ba5edf06427afa986b397d9cc20af294b457c877f6626ab50f1f92f

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 578b0c0c12f7f40575d4e0c20b6ec22600ecf26efbd1d673e2ae45c54aacce16
MD5 5bb1b50e54c08e58b42d9c936529a5f8
BLAKE2b-256 58fb7b703053dda89026bae4f3c6673ad85015e4aaa7de7ae0b3e33b429b1499

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp312-cp312-manylinux_2_34_aarch64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d4998fee3d5d858e2fd187be8ed5054303472d479bfa4b869049b3ee55e3222e
MD5 62b54cb03a2ebdd76ffa790769f9d9fd
BLAKE2b-256 9fa12d7a9bc16e47078b27719784d0679ee6cb129d9fac25cf1dca25203f5628

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 859cb2e76d0be10837524b8d21295e6c5d91e0e64b2d38d450e23d8d22d06db6
MD5 174e671fe280d1739533c2cc569fdf68
BLAKE2b-256 8f806948b48b96bbc21617effee59e1e51bc973cc051608baf3704ddcabe1cff

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp312-cp312-macosx_13_0_x86_64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 96e59efdbc1630c56ba4af9a57275265f002281e04a3d6212d69b7219a97664c
MD5 815788b037fc96ca35b88cd512802c63
BLAKE2b-256 5ddb460ba5fe693e85f7a51be3ce0135ac0c5d6f76b78ea5f45dd127d745130f

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp311-cp311-win_amd64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5476cb4b6c53701816956d44f9d333e172ce4183e6b9b637b60b0c9d417e9ca1
MD5 3648d944811beaeb08a696c0948daf0c
BLAKE2b-256 d4571ff611d690209a8fb675ac88e744d05453e4287be9b99458ff36a1115b38

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 57f1526c5098828a6a9fdb1e460877a384dadcf804942d3dec56a15daa311839
MD5 5347836d1411cc788339bf1e2ca726e4
BLAKE2b-256 e5d40bda67b01a20851b72919775760a27b92ee45375c476cee0cd3526ad09cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 d70fa2a107a8867a686ee371ef4cb09cb4b3d1fee372200dfd859f4984974f26
MD5 7f0b5a453dca2a3cc8ee687fd32b61df
BLAKE2b-256 fbe763336cab5bc4ee8698ad953e1f01c62427151dc70a09f38154221021b835

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp311-cp311-manylinux_2_34_aarch64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 56d630eba79613f90e8163f0731ab4b3880cf8510930e476257944ba2d5ffb37
MD5 a5af0b2b10acc9eaa6d417db5e399f07
BLAKE2b-256 428a565708951701cd95b0f26cefd87b1811f24ccb7f1387634f1c7cc753379d

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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

File details

Details for the file iris_codec-2025.2.0a3-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for iris_codec-2025.2.0a3-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 06189a1eca1c49518d90d3475244331987ce230fa8bdb390b3cc7f0002b176ed
MD5 ce3e5ef6796958f2d9f13bb548fbccc6
BLAKE2b-256 eaea55a67378f13b98579226b935dc91ed9e09052bc9223b81589705efda111a

See more details on using hashes here.

Provenance

The following attestation bundles were made for iris_codec-2025.2.0a3-cp311-cp311-macosx_13_0_x86_64.whl:

Publisher: distribute-pypi.yml on IrisDigitalPathology/Iris-Codec

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