Skip to main content

A fast, Rust-powered Excel xlsx library for Python with openpyxl-compatible API

Project description

rustypyxl

Quality Gate Status Maintainability Rating Security Rating Known Vulnerabilities

A Rust-powered Excel (XLSX) library for Python with an openpyxl-compatible API.

Installation

pip install rustypyxl

Usage

import rustypyxl

# Create or load a workbook
wb = rustypyxl.Workbook()
ws = wb.create_sheet('Sheet1')          # or: wb = rustypyxl.load_workbook('input.xlsx'); ws = wb.active

# openpyxl-style cell access
ws['A1'] = 'Hello'
ws['A2'] = 42.5
ws['A3'] = '=SUM(A1:A2)'
ws.cell(row=4, column=1).value = 'world'
print(ws['A1'].value)                   # -> "Hello"

# Append rows, merge, freeze, rename
ws.append(['Name', 'Age', 'Score'])
ws.merge_cells('A1:C1')
ws.freeze_panes = 'A2'
ws.title = 'Data'

# Iterate
for row in ws.iter_rows(values_only=True):
    print(row)

wb.save('output.xlsx')

Bulk API (fastest for large grids)

When writing or reading many rows at once, the workbook-level bulk methods avoid per-cell Python overhead:

wb.write_rows('Data', [
    ['Name', 'Age', 'Score'],
    ['Alice', 30, 95.5],
    ['Bob', 25, 87.3],
])
data = wb.read_rows('Data', min_row=1, max_row=100)

Features

  • openpyxl-compatible API: Familiar patterns (ws['A1'], ws.cell(), ws.append(), iter_rows()) for easy migration
  • Read and write support: Full round-trip capability
  • Cell values: Strings, numbers, booleans, dates, formulas
  • Formatting: Fonts (incl. underline styles), alignment, fills, borders, number formats
  • Workbook features: Hyperlinks, comments, named ranges, merged cells, freeze panes
  • Sheet protection: Cell locking and worksheet protection

Not yet supported through the Python API: inserting/deleting rows and columns, charts, and images.

  • Parquet import/export: Direct Parquet ↔ Excel conversion (bypasses Python FFI)
  • S3 support: Works with boto3 via bytes I/O
  • Bytes I/O: Load from bytes or file-like objects, save to bytes
  • Configurable compression: Trade off speed vs file size

Parquet Import

Import large Parquet files directly into Excel worksheets. Data flows from Parquet → Rust → Excel without crossing the Python FFI boundary, making it very fast for large datasets.

import rustypyxl

wb = rustypyxl.Workbook()
wb.create_sheet("Data")

# Import parquet file into sheet
result = wb.insert_from_parquet(
    sheet_name="Data",
    path="large_dataset.parquet",
    start_row=1,
    start_col=1,
    include_headers=True,
    column_renames={"old_name": "new_name"},  # optional
    columns=["col1", "col2", "col3"],  # optional: select specific columns
)

print(f"Imported {result['rows_imported']} rows")
print(f"Data range: {result['range']}")

wb.save("output.xlsx")

Performance: ~4 seconds for 1M rows × 20 columns on M1 MacBook Pro.

Parquet Export

Export worksheet data to Parquet format with automatic type inference:

import rustypyxl

wb = rustypyxl.load_workbook("data.xlsx")

# Export entire sheet
result = wb.export_to_parquet(
    sheet_name="Sheet1",
    path="output.parquet",
    has_headers=True,              # first row contains headers
    compression="snappy",          # snappy, zstd, gzip, lz4, none
    column_renames={"old": "new"}, # optional: rename columns
    column_types={"date_col": "datetime"},  # optional: force column types
)

print(f"Exported {result['rows_exported']} rows")
print(f"File size: {result['file_size']} bytes")

# Export specific range
result = wb.export_range_to_parquet(
    sheet_name="Sheet1",
    path="subset.parquet",
    min_row=1, min_col=1,
    max_row=1000, max_col=5,
)

Supported column type hints: string, float64, int64, boolean, date, datetime, auto.

Loading from Bytes or File-like Objects

Load workbooks from in-memory bytes or file-like objects:

import rustypyxl
import io

# From bytes
with open("file.xlsx", "rb") as f:
    data = f.read()
wb = rustypyxl.load_workbook(data)

# From file-like object (e.g., BytesIO, HTTP response)
wb = rustypyxl.load_workbook(io.BytesIO(data))

# Save to bytes (for HTTP responses, S3, etc.)
output_bytes = wb.save_to_bytes()

S3 Support

Use save_to_bytes() and load_workbook(bytes) with boto3 for S3 integration:

import boto3
import rustypyxl

s3 = boto3.client("s3")

# Load from S3
response = s3.get_object(Bucket="my-bucket", Key="path/to/file.xlsx")
wb = rustypyxl.load_workbook(response["Body"].read())

# Save to S3
data = wb.save_to_bytes()
s3.put_object(Bucket="my-bucket", Key="path/to/output.xlsx", Body=data)

This works with any S3-compatible service and uses boto3's credential handling (IAM roles, environment variables, etc.).

Streaming Writes (Low Memory)

For very large files, use WriteOnlyWorkbook which streams rows directly to disk:

import rustypyxl

wb = rustypyxl.WriteOnlyWorkbook("large_output.xlsx")
wb.create_sheet("Data")

for i in range(1_000_000):
    wb.append_row([f"Row {i}", i, i * 1.5, i % 2 == 0])

wb.close()  # Must call close() to finalize the file

This uses minimal memory regardless of file size, similar to openpyxl's write_only=True mode.

Benchmarks

Micro benchmarks on M1 MacBook Pro. Your results may vary depending on data characteristics and hardware.

Write Performance (1M rows × 20 columns)

Library Time
rustypyxl ~10s
openpyxl ~200s

Read Performance

Dataset rustypyxl calamine openpyxl
10k × 20 (numeric) 0.08s 0.10s 0.51s
10k × 20 (strings) 0.10s 0.12s 1.23s
100k × 20 (numeric) 0.97s 1.03s 4.74s
100k × 20 (mixed) 1.20s 1.28s 12.1s

calamine is a Rust Excel reader with Python bindings via python-calamine (read-only).

Memory Usage (Read)

Dataset rustypyxl calamine openpyxl
10k × 20 29 MB 9 MB 11 MB
50k × 20 58 MB 48 MB 53 MB
100k × 20 95 MB 95 MB 106 MB

Memory Usage (Write)

Dataset rustypyxl WriteOnlyWorkbook openpyxl (write_only)
10k × 20 10 MB ~0 MB 0.4 MB
50k × 20 50 MB ~0 MB 0.4 MB
100k × 20 99 MB ~0 MB 0.4 MB

WriteOnlyWorkbook streams rows directly to disk like openpyxl's write_only mode.

Building from Source

# Install Rust and maturin
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
pip install maturin

# Build
maturin develop --release

License

MIT

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

rustypyxl-0.5.0.tar.gz (151.4 kB view details)

Uploaded Source

Built Distributions

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

rustypyxl-0.5.0-cp314-cp314-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.14Windows x86-64

rustypyxl-0.5.0-cp314-cp314-manylinux_2_34_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

rustypyxl-0.5.0-cp314-cp314-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rustypyxl-0.5.0-cp313-cp313-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.13Windows x86-64

rustypyxl-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

rustypyxl-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustypyxl-0.5.0-cp312-cp312-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.12Windows x86-64

rustypyxl-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

rustypyxl-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustypyxl-0.5.0-cp311-cp311-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.11Windows x86-64

rustypyxl-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

rustypyxl-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustypyxl-0.5.0-cp310-cp310-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.10Windows x86-64

rustypyxl-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

rustypyxl-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file rustypyxl-0.5.0.tar.gz.

File metadata

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

File hashes

Hashes for rustypyxl-0.5.0.tar.gz
Algorithm Hash digest
SHA256 061f00c3b0d430fc0e18476823744ba9c3a32c3b3b03a221910b1164c4c8e229
MD5 5d336458df3b365148866edefa455477
BLAKE2b-256 62ddd86635adb6e8cd1200451be9f3dfc95a362434f07e3940da19c5785fb393

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0.tar.gz:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: rustypyxl-0.5.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • 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 rustypyxl-0.5.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 68298d768ad6dbfb861e213224967ecca9bf218d510a35b94cc3f9a7297b8b56
MD5 af47931f10518bdb54d1e16e5981414a
BLAKE2b-256 ed72865134dec7a3c5bf87bd5f5ca4915782d989450a10c01d387f0e3ccb6ed7

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4d879c211a72709df969ce5155c1532c8ec4bbfa083ca6ff0a939910d3979999
MD5 9d19a642453a2599efb22c06a461379a
BLAKE2b-256 95402da32ceac3e32c30834223e8c8d61d4b9c9a674e9d9c269c923edd188d61

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp314-cp314-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e47e09e68cfb5a0f9b890756fbe1697378325b6ac056d180bcd4043570c7712c
MD5 9b702dbb5c1d247a99ad17234ae19a41
BLAKE2b-256 fbc4c9954012611a3fe38dd145a7eaf31dcf8f1e366efded2fc1bb7b2ef294db

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rustypyxl-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • 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 rustypyxl-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 66b54bfa772ae6576fc224fb6c147df4f8d8cd1bc36e4d39e67643257a638cc3
MD5 55edda5946f48d1ea44e1012b7fa1321
BLAKE2b-256 5f900dc65f144fd482bc6de3a0a5e47abc1bb2fdc3bb98b49e285148fc6172fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fd6225b426b87e12afd5c03f6e026f5126a62ca95f8596e6b56e02f03d0eeff8
MD5 f10ec5fced9dacfd9abaadef7031db2b
BLAKE2b-256 b3513ea42bcf3b66f9a10493e0865e458e0e78822c88a6fa13f072e5236f8518

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbda16d466107eeb4ff95ca3662ba660a4f457832e426923fad18523deb47708
MD5 203bb93e6f31e6004ad0399819191693
BLAKE2b-256 d0a1d54bb066a3b5c169c72c53f20fbddb01ebe1fc8673cf6e38a4ddb455d4c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rustypyxl-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • 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 rustypyxl-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 06b030e7a7679f23f1abfde4d91a188d7109613c9c4d0fd68a8b2101eeef0ea6
MD5 4dd3a0f644c040b58381212a1d4e6290
BLAKE2b-256 d7cb9d1fb28b18946627bcb543f9d82a71d2c3086674e82540e0e1b42f69b9ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2bff9ecaa4bf0d68bc6317999837a78fe8c14b11dbff0f7b674854ee19e4fc77
MD5 0162d0bd161d18bed7e495713c3f0c94
BLAKE2b-256 5438b7a09ea99d3163d691cab9c41fbd78ba7988c4a2ef2482af48664f9dc0d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a22a266998f93ab5e090413858aa3198aafc8c5c30221073301579c0391b070
MD5 1d90cea0e00b46944317c37cdcd82fd3
BLAKE2b-256 6508eb55daa0d13f16ff55305e98ea7a91c2651ff8160091457959ff7b34cd10

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rustypyxl-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • 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 rustypyxl-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6f053da56646be949b58eee27b1ca46f25e6e5fa2ef53501d345e9832a62c5cd
MD5 20092fefeabb274c03e7a1d049cf1021
BLAKE2b-256 c9fbb958e5eab3cb3c226a19c5dc1de71c69442da02b4da91f751205298c7267

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5c3819b2c839269576b116695082714eda50ff57d55d48d6b0da1019c4c8e48f
MD5 457569aabe032ff40444f80037fad7ab
BLAKE2b-256 1f3de7ec30d8dc23869c046c7530e53fb2ce52fc24e4388e44c1e90459adc765

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d8859f0dba87c04e67990d7b409cdb5c18769a01f4f4509530fb7524ee435c6a
MD5 4442fc1aaa56559bd2726e0c1aea9303
BLAKE2b-256 c283d8884250b914f7c7632f83977b2b03aca1a6a5036611a6c246c9f079857a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rustypyxl-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • 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 rustypyxl-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 80d5f5cd219b11163f56b663438bec6cc73e7cadfe4f73f2ebb4cc44cadb8cae
MD5 6c2854fcd8994682a7e086a91cfc7220
BLAKE2b-256 4a8ee9533f21d41608c21b0d9041ffcd662898d1240d2999471e644281af4fa1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 59cfc767eb8d9c103e17dc9089d4036aa3931d3d73a3acc7ffc23f4aef79da27
MD5 657752a37377bef783b99b769d1ddeb4
BLAKE2b-256 ca4ffd1e8adea46c390ef8f0324342fa2e9a4241e7d386c7c7616a9cb924e739

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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

File details

Details for the file rustypyxl-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustypyxl-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91c2e0a64635f8fcf7359527ac17cc6f691e97793c3fec7b98d805160a8fb23c
MD5 0abec8f5daceeb68ee3b7d7af19c3a79
BLAKE2b-256 ab2149b27ff71bef945b0915d69ef3664c380a8f109c6a27d03b8bce2a3a2b4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustypyxl-0.5.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustypyxl

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