Skip to main content

Zig ANSI syntax highlighting library

Project description

uv Ruff

zig-codeblocks

zig-codeblocks is a Rust-powered CPython 3.9+ library for adding syntax highlighting to Zig code blocks in Markdown files through ANSI escape codes. Originally intended for patching the lack of syntax highlighting for Zig on Discord.

Installation

zig-codeblocks is available on PyPI:

pip install zig-codeblocks

You can also install it from source:

pip install git+https://github.com/trag1c/zig-codeblocks.git

zig-codeblocks also exposes a CLI via a cli extra:

pip install "zig-codeblocks[cli]"

If the CLI is all you need, you can run it with uvx:

uvx "zig-codeblocks[cli]" --help

API Reference

extract_codeblocks

def extract_codeblocks(source: str | bytes) -> list[CodeBlock]

Yields CodeBlocks from a Markdown source. Assumes UTF-8 if source is bytes.

Example usage:

from pathlib import Path

from zig_codeblocks import extract_codeblocks

source = Path("examples/riiz.md").read_text()
for codeblock in extract_codeblocks(source):
    print(f"Language: {codeblock.lang}")
    print(f"Body:\n{codeblock.body}")
Language: py
Body:
print("Hello, World!")

Language: zig
Body:
const std = @import("std");
pub fn main() !void {
    std.debug.print("Hello, World!\n", .{});
}

highlight_zig_code

def highlight_zig_code(source: str | bytes, theme: Theme = DEFAULT_THEME) -> str

Returns an ANSI syntax-highlighted version of the given Zig source code. Assumes UTF-8 if source is bytes. An optional Theme can be supplied (defaults to DEFAULT_THEME).

Example usage:

from pathlib import Path

from zig_codeblocks import DEFAULT_THEME, Color, Style, highlight_zig_code

source = Path("examples/hello_world.zig").read_text()

theme = DEFAULT_THEME.copy()
theme["BuiltinIdentifier"] = Style(Color.Orange, underline=True)
theme["String"] = Style(Color.Cyan)
del theme["Type"]

print(
    highlight_zig_code(source),
    highlight_zig_code(source, theme),
    sep="\n\n",
)

process_markdown

def process_markdown(
    source: str | bytes,
    theme: Theme = DEFAULT_THEME,
    *,
    only_code: bool = False,
) -> str

Returns a Markdown source with Zig code blocks syntax-highlighted. Assumes UTF-8 if source is bytes. An optional Theme can be supplied (defaults to DEFAULT_THEME). If only_code is True, only processed Zig code blocks will be returned.

Example usage:

from pathlib import Path

from zig_codeblocks import process_markdown

source = Path("examples/riiz.md").read_text()
print(process_markdown(source))

CodeBlock

class CodeBlock:
    lang: str
    body: str

A code block extracted from a Markdown source. Immutable.

Color

class Color(Enum):
    Gray = "30"
    Red = "31"
    Green = "32"
    Orange = "33"
    Blue = "34"
    Magenta = "35"
    Cyan = "36"
    White = "37"  # Black for light mode

An enumeration of 3-bit ANSI colors. Some names were adjusted to match Discord's style. A color can be instantiated from a string too: Color.from_string("Blue").

Style

class Style:
    color: Color
    bold: bool = False
    underline: bool = False

A style for syntax highlighting. Takes a Color and can optionally be bold and/or underlined. Immutable. Produces an SGR sequence when converted to a string.

Theme

class Theme(TypedDict, total=False):
    BuiltinIdentifier: Style
    Call: Style
    Comment: Style
    Identifier: Style
    Keyword: Style
    Numeric: Style
    PrimitiveValue: Style
    String: Style
    Type: Style

A theme dict for syntax highlighting Zig code. Each key is optional and can be provided a Style to apply to the corresponding token type. Can be instantiated with a dict literal or with a Theme call:

from zig_codeblocks import Color, Style, Theme

theme_foo = Theme(
    Numeric=Style(Color.Blue),
    String=Style(Color.Green),
)

theme_bar: Theme = {
    "Numeric": Style(Color.Blue),
    "String": Style(Color.Green),
}

assert theme_foo == theme_bar

DEFAULT_THEME

The default theme used for highlighting, defined as follows:

DEFAULT_THEME: Theme = {
    "BuiltinIdentifier": Style(Color.Blue, bold=True),
    "Call": Style(Color.Blue),
    "Comment": Style(Color.Gray),
    "Keyword": Style(Color.Magenta),
    "Numeric": Style(Color.Cyan),
    "PrimitiveValue": Style(Color.Cyan),
    "String": Style(Color.Green),
    "Type": Style(Color.Orange),
}

License

zig-codeblocks is licensed under the MIT License.
© trag1c, 2025

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

zig_codeblocks-0.3.3.tar.gz (540.0 kB view details)

Uploaded Source

Built Distributions

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

zig_codeblocks-0.3.3-cp313-cp313t-win_amd64.whl (478.3 kB view details)

Uploaded CPython 3.13tWindows x86-64

zig_codeblocks-0.3.3-cp313-cp313t-win32.whl (444.7 kB view details)

Uploaded CPython 3.13tWindows x86

zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl (856.2 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_i686.whl (898.1 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ i686

zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_armv7l.whl (833.3 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARMv7l

zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl (742.4 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_x86_64.whl (702.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ x86-64

zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_ppc64le.whl (838.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ppc64le

zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_armv7l.whl (644.2 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARMv7l

zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_aarch64.whl (652.7 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

zig_codeblocks-0.3.3-cp313-cp313t-macosx_11_0_arm64.whl (417.7 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

zig_codeblocks-0.3.3-cp313-cp313t-macosx_10_12_x86_64.whl (429.4 kB view details)

Uploaded CPython 3.13tmacOS 10.12+ x86-64

zig_codeblocks-0.3.3-cp39-abi3-win_amd64.whl (482.7 kB view details)

Uploaded CPython 3.9+Windows x86-64

zig_codeblocks-0.3.3-cp39-abi3-win32.whl (448.4 kB view details)

Uploaded CPython 3.9+Windows x86

zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_x86_64.whl (861.0 kB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ x86-64

zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_i686.whl (906.3 kB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ i686

zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_armv7l.whl (839.4 kB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARMv7l

zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_aarch64.whl (747.9 kB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_x86_64.whl (706.9 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ x86-64

zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_ppc64le.whl (843.0 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ppc64le

zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_armv7l.whl (651.3 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARMv7l

zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_aarch64.whl (658.8 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

zig_codeblocks-0.3.3-cp39-abi3-macosx_11_0_arm64.whl (427.4 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

zig_codeblocks-0.3.3-cp39-abi3-macosx_10_12_x86_64.whl (439.9 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file zig_codeblocks-0.3.3.tar.gz.

File metadata

  • Download URL: zig_codeblocks-0.3.3.tar.gz
  • Upload date:
  • Size: 540.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.9.2

File hashes

Hashes for zig_codeblocks-0.3.3.tar.gz
Algorithm Hash digest
SHA256 75b33a96474612b2f76e80fed7d8e406a29d0677b05cae281335c14fcfef3a8c
MD5 5fe512f51e72d0f8c9d26050b0b53a7a
BLAKE2b-256 1c47b9b6ac2387f004cdbf8bc1429131cf86ccaf188ca9a9145ec42877da612d

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 53cd850f241145e93d04cc0ddf9c4321bbba6b5bcd95e58d969e16bf391c59b9
MD5 9fc8d9898eda9f13774384fe3adb4607
BLAKE2b-256 de3fd37e80ff57eb50bc7d9619e6b30943793863adfc5443fcd0d57b6d645ab6

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-win32.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 2386f3261d3fb11dbc87db38c2a286c3d7b5fe50aa5a1547aeb685d6cb8b4b9e
MD5 643156f4e5a7a458f71fa062ef1bc780
BLAKE2b-256 10d6712250dab0dc60b40b11624d5cb131e506e38f890607d557fc48af60712d

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6e968f31c4fca0f147fcd0ca94f7f372e6422f9cfdf625fea7c20cf110c9d26c
MD5 fb9660223ed2fa983a0843f7406cb714
BLAKE2b-256 b0615dacae43eca85c05b1626fc6cdcefc8ab295d6507457c063760c7174ca53

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 7150e896a09459bdf888441d91956cd810d7d315c3cb7a3235f6c6f74f5e7b09
MD5 68e650ce4c77b2dc92e099d7db873c38
BLAKE2b-256 133687640a111a559b8185d5d72cd62bd1142f19169d44406fa25310cc664b0a

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 81e3ebed5e0c36af674c6e81ea9748d3a6bd6032f5a6e99e73b24609cde53fbc
MD5 1aefcc84c903d98ee90e8b55f6f4a084
BLAKE2b-256 6157b54a2b76c3b23d7ba959f4a6f5194ee999b9f4f813d8fdab54d485ecbc17

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8d104b559e65fe9516490bbea37129d614a0885854022877183b15cc91e84c21
MD5 6d2623c646b5123dd7dbf63b53a97071
BLAKE2b-256 5967be4c75de5d3f164e9bd9b2ef5672ce4353bcadf2742ec654979a31f95db7

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 867c36b2bc5e0469b02d87b4244178d55019042b5039d3bab51cdbc428bcd84a
MD5 0820e29cf0790db8a8d603d853b3ec76
BLAKE2b-256 bcbdee000025e872ab7d4199eca3daac8a04ead059a5326ea485d2159be28eb8

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 935205a39a74bb0104599a5c278fc7faedddf59a5ca945010fa0dbcda2e6ad93
MD5 dc8b3da45d87aa650db09bb2f0162d1c
BLAKE2b-256 7a875feb93df1e7a9ea5b2c443b08a0903bd440b4be7e9b6a0359e8f78088ee2

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_armv7l.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_armv7l.whl
Algorithm Hash digest
SHA256 1a65d06c0cadd97cfd2b9de988ebe075a6b5182d276a3c2cd2010b1fbd3a98e2
MD5 ffb535a8148ca18dd93e77809a6d0c16
BLAKE2b-256 8f15180e67a197ea4b42cf62d587b2907af08c6e13d40d1e214e2388c49fcd00

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4a467cb77b94a95e359a7ac6cfa4cbdc499da6a4ff3d4a1c3e0a738302b03e36
MD5 c0214776ada805282d67eb19c72bece6
BLAKE2b-256 75f26f40f478446fa14ea2eb3c2680928371288a84bb7eaeb79cb8e363e2254e

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5028bdee498b320691920dfcefa809fe557cab3f6cc2e50353dcf90ac45219d3
MD5 7b108b100879f0b88c908b3d13d9daf0
BLAKE2b-256 b55b23c05a5d212fbf8644a16f687058a797c784381cbbe0086818fa054b6a5e

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp313-cp313t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4ad6b3a0a41fda45fa050ff86a1e41f5ffbea6c9084fb42f35af7f2c74387c0c
MD5 f499e3e250d310069b26e0b10a7f2c41
BLAKE2b-256 790ab95b21592e49662352bbca0b4bb250caafa3558d39eeea76b1c18ce00ed7

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7624e6d0f2ba36ee0ad8a6dcc3c5719b3a9e1adaf2af91f7c4495d3e63481abc
MD5 776af8e8847d26fcc29ebc5dee7cf5d9
BLAKE2b-256 991afd70e3980e27bf8cb24383518f0337cb8d5d7eba17d9af02072425692e59

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-win32.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-win32.whl
Algorithm Hash digest
SHA256 b51d54da8d1e9eb9c67f36b933ab8e588fb06eb6d274dd6b2757e5f6543f36c7
MD5 c2671f27077d6f9159fa4acee0eb6ad1
BLAKE2b-256 9a831380980bfb89eddb497482e9b86e283bdad61d38a1bcf013b3a44104e4f3

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c0512f87429997162eb7fa69e6868cd72f2d00201abaed28b164bc5a8edac2d8
MD5 3048f5becbfadab6ad32e2c5815e1ba6
BLAKE2b-256 d3e1d133771c366aace828b25ad657f1e9d9468ecb42d7962a0c49ec03ee7586

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d676413f5a67b1d1c91d911198f3fe055147c39a0bbca0a4ad8b4fd1c7068b3e
MD5 473f39205dab3506610d1f1a0d93ebdb
BLAKE2b-256 91d5b9a03968d1f12664b4102190164012ac41eba07fbffba43dae7ce87fa675

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 21af6aba76c545c6e659383e9e9081da1e886f84cb3531a8df15cf496e6b8e9b
MD5 781684d608ccd8309f546ed6b5796782
BLAKE2b-256 f31d83dc0496480e39218da259e3b78de7cc77a39e21781b060789325a1c92ed

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a65e2f4335bd4bb8d2df3aa31860aa2bd7a0a29849c49c1fd3a78e7554bb672c
MD5 e7b2167d721440c0b359cd6c61ea6095
BLAKE2b-256 dd40502ace4b67b1871c8795e179f88f88fb3d788c02521bae510290793f2b7f

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7eff5776c9efddfe9f41f448b7ca08b981396211019ca3312f21d35dd55b722
MD5 ee08da098fc21603ba4506280b8d655a
BLAKE2b-256 eb1abebb7fef80544e8e1cfd338ea84d6de25e1055735a809ff4baedfd32d484

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 6a54a07954b59d6f8b4e678c84fd2ee7f91d6ce0308929a030496948d0ba29fd
MD5 0b8d3d15427d5bdd6aa4bad1b1fa1593
BLAKE2b-256 429573604f0331ced87c258515b0c5005662665122ac7e39030b968a78304cad

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_armv7l.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_armv7l.whl
Algorithm Hash digest
SHA256 ce108319859f4bc8ec3c4e742186647c4886d8a8c053626dfa821d842009f381
MD5 8d16fbf35a20bb95997934be7f255d85
BLAKE2b-256 7e3ed09359a74825e912293951cd6fd941fb355604a0b63a434d6c33a1364fe8

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bf3a59ee82b19307191979f4c180fa92167fb91e7a95d61ab6074015190c3d44
MD5 6aa63ba7735b0892fa017a194ef69bc9
BLAKE2b-256 5f22d92042d17a0ce6d94418da13e478a57890b7bfe95babfde1afcd72937681

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c510373b06cda128a81725fd9fdbab18860ca2e891df727a7b612fd16459427
MD5 396948a1aaabcabaec5e3a7661afbafd
BLAKE2b-256 7a43c0d02daa78de1074f8d5ab6336adc085528402407eb88efe76f78ea7c457

See more details on using hashes here.

File details

Details for the file zig_codeblocks-0.3.3-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zig_codeblocks-0.3.3-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b2d3939f6f7a28ba0283c581a7d5bb5dc55d828df1f595f965f5f9e8a9f28d66
MD5 aa51248559cf407e5c7052dd237f1aff
BLAKE2b-256 bce0940f7968ed971eba5aedf46eb81eaccd5c9a3ab90547a671d5c00ff94d3b

See more details on using hashes here.

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