Skip to main content

A state management system for Python 3.x that unifies your applications business logic, data persistence, and caching into a single, efficient layer.

Project description

Dbzero logo

A state management system for Python 3.x that unifies your application's business logic, data persistence, and caching into a single, efficient layer.

License: LGPL 2.1

"If we had infinite memory in our laptop, we'd have no need for clumsy databases. Instead, we could just use our objects whenever we liked."

— Harry Percival and Bob Gregory, Architecture Patterns with Python

Overview

dbzero lets you code as if you have infinite memory. Inspired by a thought experiment from Architecture Patterns with Python by Harry Percival and Bob Gregory, dbzero handles the complexities of data management in the background while you work with simple Python objects.

dbzero implements the DISTIC memory model:

  • Durable - Data persists across application restarts
  • Infinite - Work with data as if memory constraints don't exist (e.g. create lists, dicts or sets with billions of elements)
  • Shared - Multiple processes can access and share the same data
  • Transactional - Transaction support for data integrity
  • Isolated - Reads performed against a consistent point-in-time snapshot
  • Composable - Plug in multiple prefixes (memory partitions) on demand and access other apps’ data by simply attaching their prefix.

With dbzero, you don’t need separate pieces like a database, ORM, or cache layer. Your app becomes easier to build and it runs faster, because there are no roundtrips to a database, memory is used better, and you can shape your data to fit your problem.

Key Platform Features

dbzero provides the reliability of a traditional database system with modern capabilities and extra features on top.

  • Persistence: Application objects (classes and common structures like list, dict, set, etc.) are automatically persisted (e.g. to a local or network-attached file)
  • Efficient caching: Only the data actually accessed is retrieved and cached. For example, if a list has 1 million elements but only 10 are accessed, only those 10 are loaded.
  • Constrained memory usage: You can define memory limits for the process to control RAM consumption.
  • Serializable consistency: Data changes can be read immediately, maintaining a consistent view.
  • Transactions: Make atomic, exception-safe changes using the with dbzero.atomic(): context manager.
  • Snapshots & Time Travel: Query data as it existed at a specific point in the past. This enables tracking of data changes and simplify auditing.
  • Tags: Tag objects and use tags to filter or retrieve data.
  • Indexing: Define lightweight, imperative indexes that can be dynamically created and updated.
  • Data composability: Combine data from different apps, processes, or servers and access it through a unified interface - i.e. your application’s objects, methods and functions.
  • UUID support: All objects are automatically assigned a universally unique identifier, allowing to always reference them directly.
  • Custom data models - Unlike traditional databases, dbzero allows you to define custom data structures to match your domain's needs.

Requirements

  • Python: 3.9+
  • Operating Systems: Linux, macOS, Windows
  • Storage: Local filesystem or network-attached storage
  • Memory: Varies by workload; active working set should fit in RAM for best performance

Quick Start

Installation

pip install dbzero

Simple Example

The guiding philosophy behind dbzero is invisibility—it stays out of your way as much as possible. In most cases, unless you're using advanced features, you won’t even notice it’s there. No schema definitions, no explicit save calls, no ORM configuration. You just write regular Python code, as you always have. See the complete working example below:

import dbzero as db0

@db0.memo(singleton=True)
class GreeterAppRoot:
    def __init__(self, greeting, persons):
        self.greeting = greeting
        self.persons = persons
        self.counter = 0

    def greet(self):
        print(f"{self.greeting}{''.join(f', {person}' for person in self.persons)}!")
        self.counter += 1

if __name__ == "__main__":
    # Initialize dbzero
    db0.init("./app-data", prefix="main")
    # Initialize the application's root object
    root = GreeterAppRoot("Hello", ["Michael", "Jennifer"])
    root.greet() # Output: Hello, Michael, Jennifer!
    print(f"Greeted {root.counter} times.")

The application state is persisted automatically; the same data will be available the next time the app starts. All objects are automatically managed by dbzero and there's no need for explicit conversions, fetching, or saving — dbzero handles persistence transparently for the entire object graph.

Core Concepts

Memo Classes

Transform any Python class into a persistent, automatically managed object by applying the @db0.memo decorator:

import dbzero as db0

@db0.memo
class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

# Instantiation works just like regular Python
person = Person("Alice", 30)

# Attributes can be changed dynamically
person.age += 1
person.address = "123 Main St"  # Add new attributes on the fly

Collections

dbzero provides persistent versions of Python's built-in collections:

from datetime import date

person = Person("John", 25)

# Assign persistent collections to memo object
person.appointment_dates = {date(2026, 1, 12), date(2026, 1, 13), date(2026, 1, 14)}

person.skills = ["Python", "C++", "Docker"]

person.contact_info = {
    "email": "john@example.com",
    "phone": "+1-555-0100",
    "linkedin": "linkedin.com/in/john"
}

# Use them as usual
date(2026, 1, 13) in person.appointment_dates # True

person.skills.append("Kubernetes") 
print(person.skills) # Output: ['Python', 'C++', 'Docker', 'Kubernetes']

person.contact_info["github"] = "github.com/john"
person.contact_info["email"] # "john@example.com"

All standard operations are supported, and changes are automatically persisted.

Queries and Tags

Find objects using tag-based queries and flexible logic operators:

# Create and tag objects
person = Person("Susan", 31)
db0.tags(person).add("employee", "manager")

person = Person("Michael", 29)
db0.tags(person).add("employee", "developer")

# Find every Person by type
result = db0.find(Person)

# Combine type and tags (AND logic) to find employees
employees = db0.find(Person, "employee")

# OR logic using a list to find managers and developers
staff = db0.find(["manager", "developer"])

# NOT logic using db0.no() to find employees wich aren't managers
non_managers = db0.find("employee", db0.no("manager"))

Snapshots and Time Travel

Create isolated views of your data at any point in time:

person = Person("John", 25)
person.balance = 1500
# Keep the current state 
state = db0.get_state_num()
# Commit changes explicitely to advance the state immediately
db0.commit()

# Change the balance
person.balance -= 300
db0.commit()

print(f"{person.name} balance: {person.balance}") # John balance: 1200
# Open snapshot view with past state number
with db0.snapshot(state) as snap:
    past_person = db0.fetch(db0.uuid(person))
    print(f"{past_person.name} balance: {past_person.balance}") # John balance: 1500

Prefixes (Data Partitioning)

Organize data into independent, isolated partitions:

@db0.memo(singleton=True, prefix="/my-org/my-app/settings")
class AppSettings:
    def __init__(self, theme: str):
        self.theme = theme

@db0.memo(prefix="/my-org/my-app/data")
class Note:
    def __init__(self, content: str):
        self.content = content

settings = AppSettings(theme="dark") # Data goes to "settings.db0"
note = Note("Hello dbzero!")         # Data goes to "data.db0"

Indexes

Index your data for fast range queries and sorting:

from datetime import datetime

@db0.memo()
class Event:
    def __init__(self, event_id: int, occured: datetime):
        self.event_id = event_id
        self.occured = occured

events = [
    Event(100, datetime(2026, 1, 28)),
    Event(101, datetime(2026, 1, 30)),
    Event(102, datetime(2026, 1, 29)),
    Event(103, datetime(2026, 2, 1)),
]

# Create an index
event_index = db0.index()
# Populate with objects
for event in events:
    event_index.add(event.occured, event)

# Query events from January 2026
query = event_index.select(datetime(2026, 1, 1), datetime(2026, 1, 31))
# Sort ascending by date of occurance
query_sorted = event_index.sort(query)
print([event.event_id for event in query_sorted]) # Output: [100, 102, 101]

Scalability

dbzero provides tools to build scalable applications:

  • Data Partitioning - Split data across independent partitions (prefixes) to distribute workload
  • Distributed Transactions - Coordinate transactions across multiple partitions for data consistency
  • Multi-Process Support - Multiple processes can work with shared or separate data simultaneously, enabling horizontal scaling

These features give you the flexibility to design distributed architectures that fit your needs.

Use Cases

Our experience has proven that dbzero fits many real-life use cases, which include:

  • Web Applications - Unified state management for backend services
  • Data Processing Pipelines - Efficient and simple data preparation
  • Event-Driven Systems - Capturing data changes and time travel for auditing
  • AI Applications - Simplified state management for AI agents and workflows
  • Something Else? - Built something cool with dbzero? We'd love to see what you're working on—share it on our Discord server!

Why dbzero?

The short answer is illustrated by diagram below:

Traditional Stack

Application Code
    ↓
ORM Layer
    ↓
Caching Layer
    ↓
Database Layer
    ↓
Storage

With dbzero

Application Code + dbzero
    ↓
Storage

By eliminating intermediate layers, dbzero reduces complexity, improves performance, and accelerates development—all while providing the reliability and features you expect from a regular database system.

Documentation

Check our docs to learn more: docs.dbzero.io

There you can find:

  • Guides
  • Tutorials
  • Performance tips
  • API Reference

License

This project is licensed under the GNU Lesser General Public License v2.1 (LGPL 2.1). See LICENSE for the full text.

  • This library can be linked with proprietary software.
  • Modifications to the library itself must be released under LGPL 2.1.
  • Redistributions must preserve copyright and license notices and provide source.

For attribution details, see NOTICE.

Support

Feedback

We'd love to hear how you're using dbzero and what features you'd like to see! Your input helps us make dbzero better for everyone.

The best way to share your thoughts is through our Discord server: Join us on Discord

Commercial Support

Need help building large-scale solutions with dbzero?

We offer:

  • Tools for data export and manipulation
  • Tools for hosting rich UI applications on top of your existing dbzero codebase
  • System integrations
  • Expert consulting and architectural reviews
  • Performance tuning

Contact us at: info@dbzero.io


Start coding as if you have infinite memory. Let dbzero handle the rest.

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

dbzero-0.1.8.tar.gz (15.7 MB view details)

Uploaded Source

Built Distributions

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

dbzero-0.1.8-cp314-cp314-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

dbzero-0.1.8-cp313-cp313-win_amd64.whl (22.1 MB view details)

Uploaded CPython 3.13Windows x86-64

dbzero-0.1.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

dbzero-0.1.8-cp313-cp313-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

dbzero-0.1.8-cp312-cp312-win_amd64.whl (22.1 MB view details)

Uploaded CPython 3.12Windows x86-64

dbzero-0.1.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.9 MB view details)

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

dbzero-0.1.8-cp312-cp312-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

dbzero-0.1.8-cp311-cp311-win_amd64.whl (22.1 MB view details)

Uploaded CPython 3.11Windows x86-64

dbzero-0.1.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.9 MB view details)

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

dbzero-0.1.8-cp311-cp311-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

dbzero-0.1.8-cp310-cp310-win_amd64.whl (22.1 MB view details)

Uploaded CPython 3.10Windows x86-64

dbzero-0.1.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

dbzero-0.1.8-cp310-cp310-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

dbzero-0.1.8-cp39-cp39-win_amd64.whl (22.1 MB view details)

Uploaded CPython 3.9Windows x86-64

dbzero-0.1.8-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (7.9 MB view details)

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

dbzero-0.1.8-cp39-cp39-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

Details for the file dbzero-0.1.8.tar.gz.

File metadata

  • Download URL: dbzero-0.1.8.tar.gz
  • Upload date:
  • Size: 15.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dbzero-0.1.8.tar.gz
Algorithm Hash digest
SHA256 1dc04d3592420d7b416c4766cc476ac28d91a3dfffc6987f298bf42f01e4169b
MD5 53b0e084be7404d91633eded39f409a3
BLAKE2b-256 187568521fbf0dd17219c69e0b5152519d1a6ab9d817fa73702b1ba3a8a0fc43

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 937710fb1ffd7de1226d70021a1b6459b74cbf2ed7ab8de77a1fe3ccabece7b2
MD5 826cc30df0e218ff1ff88b84645f8bb6
BLAKE2b-256 d0f18c1a883e4e7ffa3862449b2d0d88d4841dc80d12799f871506d2e08cc588

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: dbzero-0.1.8-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 22.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dbzero-0.1.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 08f16693498c5da7dc5d555404484ee3f8858c8528f5e2d15370376f8442ad1f
MD5 66582190ee766e3a59f97c6fb4add28b
BLAKE2b-256 d657f545ff63e61635fe2a78972d49289808a751fefd1599c2f6d85fea92132d

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 481856f1c1563bcdf591a3e9b7ff3e40c119899001f272a72e3fb467afa81c0d
MD5 61d826934747e5af867eeb1af777aed2
BLAKE2b-256 d1e2ca82615ca3e5d51e7c60a32b694f09d28c06f6f92cb29c004b853afeedea

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e3c6ac4c35bfde3459508cdf5bdb373dffa2fd64a874017d2b34c14ab1006a0f
MD5 1f4688f5bde946741d95b9f49545788c
BLAKE2b-256 209d19fc036ee9c439ad04d7192110c823c7cee100733ac3cd1598f597a406dd

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: dbzero-0.1.8-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 22.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dbzero-0.1.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 25687895a479032c82b62d59270f88c72b3ef3663b5db92ab2b0db091897425a
MD5 7c67397ecf0ede750d85baa217b5364d
BLAKE2b-256 aeed93294f3440ec3dc7dd3528dc617309e341f85e22211017e7b1a049bca0a9

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b9d03cf459d88dbb238af357004d4ab7bb9e88d4fed4fd754a46f3f8c11dee67
MD5 b33a2dd6d524478c5e90fe2a19d99c32
BLAKE2b-256 11dce6f3cb349584740c4756ea331785604d4f544dd03eb6e48912b9a257216e

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4020f161c4a9e5b552b8c4f02d7e87f423253115fff53e3e13ff9300ed72de54
MD5 2aa747834fadc4987728b94046bf5828
BLAKE2b-256 72b8e603424c4d5d087f5c1be826a4a7a35b328b695748ed88f7042dad9e1482

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: dbzero-0.1.8-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 22.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dbzero-0.1.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 44cb3e54b4f010fe9dcacb812c3a1c7cb1db2d9c79dd0555dcc326e9ca8e46c4
MD5 e1e27da36f70606ce420df2688f55d24
BLAKE2b-256 877ab4dd8c1c965c461ed9d6cef95c92fa70421046a28a5db4715a21d5409a26

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 83502fbddaebd614646a5546f6028bc98f2088c70c0f67ddbb7033fc6eb5af6a
MD5 a25cd589e68cea24908fe47345a1a970
BLAKE2b-256 790b3cb56d9fe9bf5740259c3dfc5195b9aee86091c3eb594e8165c9963774c0

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 bdd88f3a60ea1c5e91ba37f147ae3f5c2e566582ba58887a935cfdf48a919fa3
MD5 ab6153b38ddef9ba662356bfd2e10c42
BLAKE2b-256 38afb2ff686daa4f1216ddbe0820cce3cd27ec48bd7dad853ea37475e33303a6

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: dbzero-0.1.8-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 22.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dbzero-0.1.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ed8ff5c3c5e0d18195bc632a2cb9125c865807114d347e3f3c3347587e01c418
MD5 03b5c807b34c43d3b712d3c8c95656a6
BLAKE2b-256 87461bf899edd5ae3ea972d43b06aac338042e86ffd9f9dcf9861f628feba656

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7972c96d16c8c12186317223eb16d9b41744aa554fc1d81a68c440c833c7f136
MD5 ad1e999ad79425bfcfb576eb1b0be498
BLAKE2b-256 62c37875095c9634285fc9f1b3963a3264b68ed378d320fd6fe0cde1ed7c27ca

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a30150a7e53507dae472356258946565bbaecb4fab79d723eddea3bf35ccaf18
MD5 e5698a6ee59e1cfc5d565b38a496dc7e
BLAKE2b-256 afa6839366557cd20a1fed78547e02a2a2c35dcb074193512130927bb3485b3b

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: dbzero-0.1.8-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 22.1 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dbzero-0.1.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e3c4290dabbb9b6a591a228917e77828a925f89eb4e60bcc714344459139e46c
MD5 1316aaf8bbc4e3e69325e78ded2a1786
BLAKE2b-256 d6d72d6aca3f455d3520c407c80f64cff2c08228eade32ff095446d10f6a0122

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af80739421998d347f75b22c55c5eefbb816a093eeb1f8169e35f368b40fe81d
MD5 cc758a4de9e3dc2a58defb14796d1499
BLAKE2b-256 c10b3a3afc5ea3968a755fd94503aacc86abdae3c5d63ba8d7be3646797419ca

See more details on using hashes here.

File details

Details for the file dbzero-0.1.8-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for dbzero-0.1.8-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8ebb4ba25d32b70f6a25b6a6740aa7f7048266bf75f33ee2c7030531c205d6af
MD5 07d16860542827ca6783ee1b6016142b
BLAKE2b-256 20bffbd1434fb8c506e7f9e46c2b5ffe022f6dd365838ce17c8f0b7baf81b4d3

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