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.9.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.9-cp314-cp314-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

dbzero-0.1.9-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.9-cp313-cp313-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

dbzero-0.1.9-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.9-cp312-cp312-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

dbzero-0.1.9-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.9-cp311-cp311-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

dbzero-0.1.9-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.9-cp310-cp310-macosx_15_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

dbzero-0.1.9-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.9-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.9.tar.gz.

File metadata

  • Download URL: dbzero-0.1.9.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.9.tar.gz
Algorithm Hash digest
SHA256 f74ccd2881d88198e24974ad0d09c7806256a37d2c90d41c80ec3f3234dc78ca
MD5 63349eb1a107048b4b6e368e330f06a0
BLAKE2b-256 aed10bcc2397fb56b55ea588872c205e510ee13ec8aea63e351fd843bad367e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 b4579f744a12dc0e4c6c82ce1cccc3408c85a3400dd432698b0a075798cc4339
MD5 be85f1f126b1f4205f4ff74114a29178
BLAKE2b-256 633e4f063c32aa0323b05680d20208b69ac5f87d7c43d1baf4374e80d9d4cea1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbzero-0.1.9-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.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 375d815b96da01d89f5bc74bed7bdeeae4215f2040241eca005419303838809d
MD5 cc0b687b9446bfac314ba329bc5d59ff
BLAKE2b-256 997fb76caf39d74082724528d336ce9b464e9595542af6e1258379afe2b10655

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 34316cb740f30d17506b415d4f52df3da8a1d86430e5ec8305ed3a54ffc3393d
MD5 ff4ddcc17554b312127bdd5533341ef5
BLAKE2b-256 00b3ab11d30c71d86eebed4bcfac49ac5528871affdc8b3db1614549918c8301

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f08b18d34468461a746d75f396cbe82710ff93b44ec72fa018a73c51c98afdca
MD5 9a492d8bbf2ef6bac4121483c57c2f69
BLAKE2b-256 77edd78d2ac7fdd3957dd269f88654834f04f7854e13bc1e6b1931eb40690c46

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbzero-0.1.9-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.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 77ad98703f32fc3f6a96451ad35ee6fa8ee73f72802eb6aa28ab9420258cf6cc
MD5 ecbc0cfcbdfd28bd4f3cb1623d6a7d55
BLAKE2b-256 d1f22a736011f4bf707d1420ed64de0e6493aa3a682bd44e3d50c78358e99275

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 63ee5efe6592c75609752186903e6d0b6e1023f3c234f3d077c653f2c8fe29f6
MD5 dcc1fa549926d08982d17210302095ac
BLAKE2b-256 b0912586a1e8134c7cf01aec4dff63cc8e38bc2512e90aaa257123b5a0d5e72d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 cea22a9934ccb8d2b4bd756c825e6106d7d3453d6347d5b281487137f4b148ec
MD5 a285c97c4fbaa99d7561f19b01f6e47a
BLAKE2b-256 ea66648f512d58d55189fc930c32b7adf41ef7fe33ebf733a25beab417a5a2b6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbzero-0.1.9-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.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4d0e6e69ec1b8a5c47292aedfccb6a7d3ab890602da0cacc80734f04816635cf
MD5 3d32f9b74298789483f98ec947240419
BLAKE2b-256 63d4530bd2dde272101f27b07cf1e5471a15876d266a4e176889417b40356c62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d37d564a51ce2c6501f167a2640271947d7cd36f066bf4defe535017d75abb56
MD5 0a225ad74b465785e915889dc6aa6729
BLAKE2b-256 774b52cfb79a0b161b757ac8fa2500ee8a05dd5a93a27cf4b82d876df1bffbb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6b1e4d50b2b85be002a27ddc1607a92ea837bdf28f83cba8bec2fd599d108d7e
MD5 464036e6a1b6550894f6a6a1698c7578
BLAKE2b-256 56e2a75a8bd3b8af6e9d9ba6c9e36678e6a026f693093cec0c317e0b28cac2ca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbzero-0.1.9-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.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8609ba9a537d26bb4582e29d575cddb9810866d52cf23c36e5a4388d04d766f6
MD5 d4272d61a503741ca89f71b584d8a0fa
BLAKE2b-256 31947e77ba004652a957d461b3cbe279323da308b84de69dcfc3233458af60cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9ab0ee0d99959bdff9661c59b4742e8f9d96dcbe8c3311f514e5a274c8bfd795
MD5 09380f25826c3d4c87322f6e7373b8d2
BLAKE2b-256 abfceaa374bff144a525deec1a4bac4657d923dd25fa8609c2ba357dd56d7399

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a32705f2090f10d34b5516c5a16834dd8b29d36102b729cfcc414a096131d8ae
MD5 2fe93d56ef28e634be86a33366676835
BLAKE2b-256 ae798e75c46d1cc2d9d8dc11019a44f9baef849bb7df26eeb6f2c0277ba99c4f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbzero-0.1.9-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.9-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 91f4856ddce0be48043ee39a9714216643cbb4a9c11a83ce1459fd844ec961c9
MD5 94365728b10c1f6b29c71148900ac598
BLAKE2b-256 b65c10b8fcf1d96795860ea3d2b8ca7ba375d3d5a0fa7e35bcff7ccf31f0c290

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 63c234f8b0ff3d440848325c33daf39c15c90e8d1e78cfe5348f2cf4aecb0bce
MD5 9498aaf18b922d936e1272adf77a5c74
BLAKE2b-256 6af618b6a625bcdc66d924212968d788ed41fcab6c2377110cef93485bd77080

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dbzero-0.1.9-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a05d47789509ce2183d46b49592bd3e9ce045d24aca8cfd82e5f223a36036438
MD5 3fbe9b8282d73cdd524fe60c58095a38
BLAKE2b-256 21e18f2f8278fde2076ed29ecb53d2aeeb9781eeb9fcf51f7e496c6041afe4e5

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