Skip to main content

Cython bindings for the ThorVG vector graphics library

Project description

thorvg-cython

Cython bindings for the ThorVG vector graphics library.

Overview

This package provides direct C-level bindings to ThorVG via Cython — no ctypes overhead. It mirrors the thorvg-python API surface while delivering native-extension performance.

Platform Support

Platform Linking Strategy
iOS (sys.platform == "ios") Links against thorvg.xcframework static slice
macOS (sys.platform == "darwin") Links against libthorvg.a or libthorvg-1.dylib
Linux Links against libthorvg.so
Windows Links against thorvg.lib / thorvg-1.dll
Android Links against libthorvg.so

Building

Prerequisites

  • Python ≥ 3.9
  • Cython ≥ 3.0
  • ThorVG built with C API bindings (-Dbindings=capi)

Quick Build (macOS)

# 1. Build ThorVG
cd /path/to/thorvg
export SDKROOT=$(xcrun --show-sdk-path)
meson setup builddir --buildtype=release --default-library=shared -Dbindings=capi -Dloaders=svg,lottie,ttf
ninja -C builddir

# 2. Build the wheel
cd thorvg-cython
THORVG_ROOT=.. THORVG_LIB_DIR=../builddir/src pip install -e .

Environment Variables

Variable Description Default
THORVG_ROOT Path to thorvg source root Parent of this package
THORVG_INCLUDE Path to thorvg.h $THORVG_ROOT/inc
THORVG_LIB_DIR Path to built libraries $THORVG_ROOT/output
THORVG_XCFRAMEWORK Path to .xcframework $THORVG_ROOT/output/thorvg.xcframework
THORVG_CAPI_INCLUDE Path to thorvg_capi.h $THORVG_ROOT/src/bindings/capi

cibuildwheel

pip install cibuildwheel
cibuildwheel --platform macos

Usage

import thorvg_cython as tvg

with tvg.Engine(threads=2) as engine:
    canvas = tvg.SwCanvas(800, 600)
    shape = tvg.Shape()
    shape.append_rect(0, 0, 100, 100, rx=10, ry=10)
    shape.set_fill_color(255, 0, 0)
    canvas.add(shape)
    canvas.draw()
    canvas.sync()

Zero-Copy Buffer Protocol (PEP 3118)

SwCanvas implements the Python buffer protocol directly — no intermediate copies needed when passing pixel data to other frameworks.

Snapshot as bytes:

import thorvg_cython as tvg

with tvg.Engine(threads=2):
    canvas = tvg.SwCanvas(800, 600)

    # Draw a red rounded rectangle
    shape = tvg.Shape()
    shape.append_rect(50, 50, 200, 150, rx=20, ry=20)
    shape.set_fill_color(255, 0, 0)
    canvas.add(shape)

    # Load and render an SVG
    pic = tvg.Picture()
    pic.load("icon.svg")
    pic.set_size(100, 100)
    canvas.add(pic)

    canvas.draw()
    canvas.sync()

    raw = bytes(canvas)  # flat RGBA, 800×600×4 = 1_920_000 bytes

Kivy texture (zero-copy blit):

from kivy.graphics.texture import Texture
import thorvg_cython as tvg

with tvg.Engine():
    texture = Texture.create(size=(800, 600), colorfmt='rgba')
    canvas = tvg.SwCanvas(800, 600)

    # Load a Lottie animation
    pic = tvg.Picture()
    pic.load("animation.json")
    pic.set_size(800, 600)
    canvas.add(pic)

    # Initial render
    canvas.draw()
    canvas.sync()
    texture.blit_buffer(canvas, colorfmt='rgba', bufferfmt='ubyte')

    # Move the animation and re-render — same canvas, same texture
    pic.translate(100, 50)
    pic.set_opacity(180)
    canvas.update()
    canvas.draw()
    canvas.sync()
    texture.blit_buffer(canvas, colorfmt='rgba', bufferfmt='ubyte')

NumPy array (zero-copy view):

import numpy as np
import thorvg_cython as tvg

with tvg.Engine():
    canvas = tvg.SwCanvas(400, 300)

    shape = tvg.Shape()
    shape.append_circle(200, 150, 100, 100)
    shape.set_fill_color(0, 120, 255)
    canvas.add(shape)
    canvas.draw()
    canvas.sync()

    # Live view into the canvas pixel buffer — no copy
    arr = np.frombuffer(canvas, dtype=np.uint8).reshape(300, 400, 4)
    arr[:, :, 3] = 128  # set alpha to 50% — modifies canvas directly

memoryview (stdlib, zero-copy):

import thorvg_cython as tvg

with tvg.Engine():
    canvas = tvg.SwCanvas(256, 256)

    shape = tvg.Shape()
    shape.append_rect(0, 0, 256, 256)
    shape.set_fill_color(0, 0, 0)
    canvas.add(shape)
    canvas.draw()
    canvas.sync()

    mv = memoryview(canvas)
    print(len(mv))  # 262_144
    mv[0:4]          # first pixel RGBA bytes

License

MIT — same as ThorVG.

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.

thorvg_cython-0.0.5-cp312-cp312-win_arm64.whl (608.4 kB view details)

Uploaded CPython 3.12Windows ARM64

thorvg_cython-0.0.5-cp312-cp312-win_amd64.whl (680.1 kB view details)

Uploaded CPython 3.12Windows x86-64

thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_aarch64.whl (4.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

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

thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_universal2.whl (3.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

thorvg_cython-0.0.5-cp311-cp311-win_arm64.whl (624.3 kB view details)

Uploaded CPython 3.11Windows ARM64

thorvg_cython-0.0.5-cp311-cp311-win_amd64.whl (695.5 kB view details)

Uploaded CPython 3.11Windows x86-64

thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

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

thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_universal2.whl (3.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 11131278829f49a1f9e90ef38c80020b4361868c70ba1d799f12f44fd13d11ab
MD5 eb9ff1911fdd557ed4782f24b713a41a
BLAKE2b-256 df1dd250ac63e30432f742aad75ec7988f3c13ed5106b476350f8afedf5b2d25

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-win_arm64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f40d7bd691c364f08b03be28986147f5a715247b71bfb9e964bac4d6d604c9a9
MD5 28a731f63c3e9b50e0d654b091e56910
BLAKE2b-256 028bd179de45eafe7b607810d905afc4e30f094d7039b8ab4c7e9287746d111a

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-win_amd64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5e339eb43985a35b70053747f4b1d7a0d4717318097a2aee9e7e2170115c22f6
MD5 3cfecef8b0b86d3f95a7d40ea0c66df6
BLAKE2b-256 e1ef94b6f7b1251ee7fe49d26d390b0fc2d387324e5e83f07dcb8d056fb6a049

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8a8a347dc93b200230c36fd659f989e6c2ac32b03285fab2e02bd5ad2f848b3c
MD5 c34f1a16fb43506ef6292cd669921f53
BLAKE2b-256 4ccd409d98803e42d2167487d25002ec0a59ffc7bbea160b1a3fda5bd8543554

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e355c7f188e15f27411bd68a9300677c5f3cb63474ea987605b6b8ff44a347d8
MD5 6aa66fdcee33c47397b94339ba13e7e6
BLAKE2b-256 36de57eed9731375037cae561188cebc00f8ea05af82bc180d07667efcf8e3d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 95488af3009a4e46b958cd0322826ba1370c66bb94fa1c2c7d8dff706e6aa1bc
MD5 3941a0496edac167dc4ce934479ce275
BLAKE2b-256 e1e8991fe049065f3a31618ac896462578561caab4a361479e77429c906c28cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f02d10245228993ef997ac5b7ac75f36a4cd079ba37906e59bf52674243dc7c8
MD5 89c9815c736ceb891a3a9aee357d4e76
BLAKE2b-256 8ea3e00091d613424a7b48ba94aa8847a1f22bdea3c821f5267891ab793e0a97

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_x86_64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 8d7be570ce31a2e715bfdb4704cc13c96e7200180d41c4a2452dd8b08dc77d33
MD5 87fc1840e8331796e97c5c1dabb22cf3
BLAKE2b-256 57dbfa0e02821b5440433ebb6e13aa9f3f3c42319e393bfe82c6b56742d27d09

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_universal2.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d44e555c3f8ae622dd8b766edfba16d0ff38592fa6aaf9b8bd6c60d7004a309
MD5 3e2679a5850e9669136bf4cdc31a2aed
BLAKE2b-256 56ec85ad084641672986e3dd7a3cf4ec00a85c5b94d9eca4e9ccbdc0a894a4a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 1db0eb7369327ee6d8e4cd9746ae55aab2d227ea225b3d4175bf6d604d8ce5ec
MD5 00aeb74f05c4e4f23130800c42827f70
BLAKE2b-256 f8199ed9bb960b6bf4901b3af51ac16e378a883b7d867bebd9c9f7a7528c91d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-win_arm64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 59a0824b88cb0e1629bfef8bf653cf27985988dad36a47444aa3132a8a91e265
MD5 5be2bd5190ed25b7b5f40d170ff0e386
BLAKE2b-256 60b036d0d983761ba95a354125f55f9335ec1b6528e51f36f669ee77be2797bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-win_amd64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f7685a0c19977a6041fba46a26a7eeeffd5fe17910cca55a36d37ca3977c3548
MD5 e772c6f26b189252c5160aebda6e6b1c
BLAKE2b-256 f02f5105a63d2a94951ee766bd57076c929903f0566d07abdb6d05162310b3f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 840c39da345388ea80d4265f8312dd81e2bcd31907b12050e25189b8b4493029
MD5 53009b66295b427e055ddc59030a9bc3
BLAKE2b-256 e6e286e7e3c3facdb9168672582fbc8141f929697b5d883c1352bb156d3de501

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9709ed80fefdf1598ff628c73d4c3867291690ac95dbb577f04c5afde7fce7a3
MD5 2102ea8d589de0f5ff3ee6816e84ccdf
BLAKE2b-256 25055ef8ba0059f19739861ffe2e987d2b02fadfd187bcf1d475e328c2de4a13

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dd38c5ff597884963f63d23caa8952a8337324e94e1abf0bef3effc8d94dfe8c
MD5 671ff1c9f3af806f9937f63c2c0d34b5
BLAKE2b-256 416acdeac0c0ef762200099cc350dab9de709284fda09008665d17cdc325adf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4dbeec0c2d169b7f6c939fef57d0c7bab4d74e2489d3cabcd44eb74d3f4e7f98
MD5 0497ac06efec45b5e7d59a46975e653f
BLAKE2b-256 2295d8b0634a1bbf9f8dfd2dc780b74c8658e49318a8d5feda782eb7345a8aed

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_x86_64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e9c6582255d29e2da077dee6e248dc8a72cadfc8d200e455653f0d679781f44b
MD5 1a28d016e3ce100e2bcf8e4538112a84
BLAKE2b-256 49cc51a556ede4ec6414b58db3ad8e14032cc9af1299858f60dd64e6724d4dc7

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_universal2.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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

File details

Details for the file thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b50d4043b1d14acfb6d50c054646baf74d119d7f4390403a5d1673f35fa7354
MD5 8670178e2028169675a29e5f98dce8c8
BLAKE2b-256 446bd9d6581f27aa28fb230d2f0214ce969007f1004ff84d4c7228b709ef5859

See more details on using hashes here.

Provenance

The following attestation bundles were made for thorvg_cython-0.0.5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on Py-Swift/thorvg-cython

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