Skip to main content

Hardware-accelerated DOM-based UI & 2D Game Engine

Project description

Doodle Engine ๐ŸŽจ๐Ÿš€

Hardware-Accelerated Hybrid C-Python UI & 2D Game Engine

Doodle is a high-performance, lightweight UI and 2D game engine combining a native C rendering core (powered by Raylib) with a highly reactive Python scripting layer.

By bypassing heavy browser runtimes (like Chromium/Electron), Doodle parses dynamic HTML-like templates and CSS stylesheets in a single pass directly to GPU-accelerated graphics, procedural audio synths, and collision meshes.


๐Ÿ“‚ Repository Organization

Doodle/
โ”œโ”€โ”€ docs/                   # Full reference specifications & requirements
โ”‚   โ”œโ”€โ”€ cheatsheet.md       # API & layout syntax quick reference
โ”‚   โ”œโ”€โ”€ requirements.md     # Engine specifications and architecture blueprint
โ”‚   โ””โ”€โ”€ unused_reference.md  # Unused HTML/CSS/C engine features reference
โ”œโ”€โ”€ doodle/                 # Python package wrapper
โ”‚   โ”œโ”€โ”€ __init__.py         # Tween animations, reactive state binding, event emitter
โ”‚   โ””โ”€โ”€ cli.py              # PyInstaller packager cli
โ”œโ”€โ”€ examples/               # Game demonstrations
โ”‚   โ””โ”€โ”€ breakout/           # Breakout game demo
โ”‚       โ”œโ”€โ”€ layout.html     # Game view DOM nodes & inline handlers
โ”‚       โ”œโ”€โ”€ styles.css      # Retro arcade UI styles, flexbox, and crt shaders
โ”‚       โ”œโ”€โ”€ shaders/        # Custom GLSL Fragment shaders
โ”‚       โ””โ”€โ”€ main.py         # Collision, input, and game state script
โ”œโ”€โ”€ src/                    # C-Extension Core (complies to _doodle.pyd)
โ”‚   โ”œโ”€โ”€ setup.py            # Setuptools compilation script
โ”‚   โ”œโ”€โ”€ expose_raylib.c     # Python-to-C bindings, Raylib window, and particle pool
โ”‚   โ”œโ”€โ”€ mparser.h / .c      # n-ary DOM parser, CSS registry handler, and layout box solver
โ”‚   โ”œโ”€โ”€ dutils.h / .c       # Custom color parser, fast unit converter, and math helpers
โ”‚   โ””โ”€โ”€ daudio.h / .c       # Polyphonic synth, multi-voice ADSR envelope generator
โ”œโ”€โ”€ third_party/            # Static Raylib binaries & dependencies
โ””โ”€โ”€ README.md               # You are here!

๐Ÿ› ๏ธ Getting Started & Compilation

1. Requirements

  • OS: Windows (x64) / linux
  • Python: Python 3.11+ (with virtual environment capability)
  • C Toolchain: MSYS2/MinGW-w64 (C:\msys64\ucrt64\bin for gcc and compilation libraries) / linux cc compiler

2. Quick Setup & Build

From the repository root directory, run the setuptools compilation with your virtual environment's python. Specify the compiler:

# Add GCC to PATH (if not global)
$env:PATH = "C:\msys64\ucrt64\bin;" + $env:PATH

# Compile the native C extension
cd src
..\.venv\Scripts\python.exe setup.py build_ext --inplace -c mingw32

# Copy the compiled pyd module to the doodle library
cd ..
Copy-Item -Path "src\_doodle.cp311-win_amd64.pyd" -Destination "doodle\_doodle.pyd" -Force

3. Run the Breakout Demo

Launch the breakout game:

cd examples/breakout
..\..\.venv\Scripts\python.exe main.py

๐Ÿ—๏ธ XML Markup (layout.html) & CSS (styles.css)

Doodle supports layout-driven layouts with traditional tag structures and inline event bindings.

Core Elements

  • <view>: Structural container. Standard flex container or a 2D camera boundary using <view camera="true">.
  • <text>: Text layout with reactive state-bound variables like SCORE: {{ score }}.
  • <image>: Renders cached bitmaps using src="...".
  • <button>: Clickable target with mouse state callbacks.
  • <circle>: Renders shapes using radius and color parameters.
  • <line>: Renders vectors using x2, y2, thickness, and color.

Event Hooks

Directly attach Python functions inline:

  • onclick="python_function_name"
  • onhover="python_function_name"

Layout Styles

  • Sizing Rules: width / height support pixels (100px), percentages (50%), growth parameters (grow), and content sizing (fit).
  • Flexbox Attributes: display: flex, flex-direction (row | column), justify-content (center | space-between | space-around), align-items.
  • Cosmetics: background-color, border-radius, border-color, border-width, opacity, font-family, font-size.
  • Juice Shaders: Add custom GLSL fragment shaders directly to views using shader-path: "shaders/crt.fs".

๐Ÿ Python OOP APIs

Initialization

import doodle

# Game state passed for template rendering
state = {"score": 0, "lives": 3}

doodle.run(
    layout="layout.html",
    style="styles.css",
    width=800,
    height=600,
    title="Game Window",
    state=state
)

Node Manipulation

# Fetch reference
paddle = doodle.get_node("paddle")

# Read/Write positions
paddle.position = (350, 500)
paddle.x += 10.0

# Easing animations
doodle.animate("paddle", target_x=350, target_y=500, duration=0.4, ease="quad_out")

Input Polling

# Keys
doodle.is_key_down(263)      # Left arrow key code
doodle.is_key_pressed(82)    # R key code

# Mouse
mx = doodle.get_mouse_x()
doodle.set_mouse_cursor(4)   # Changes mouse pointer style

๐Ÿ”Š Polyphonic Procedural Sound Synthesizer

Doodle includes an integrated multi-voice synthesizer utilizing ADSR Envelopes to play retro sound waves without lagging the update tick loop.

# Play procedural tone
doodle.play_synth(
    freq=440.0,
    duration=0.15,
    wave_type=doodle.WAVE_TRIANGLE,
    attack=0.01,
    decay=0.05,
    sustain=0.3,
    release=0.05
)

Wave Types: WAVE_SINE (0), WAVE_SQUARE (1), WAVE_TRIANGLE (2), WAVE_SAWTOOTH (3), WAVE_NOISE (4)


โšก Performance Optimizations

Doodle is engineered for maximum performance, featuring multiple custom optimizations:

  1. Single-Item DOM Lookup Cache: Node lookup (FindNodeById) caches the pointer of the last requested node. Repetitive state checks (like checking click and hover events in the same frame) resolve in $O(1)$ without scanning the DOM tree.
  2. Precompiled Format Templating: Template variables {{ score }} are compiled once into native Python {score} string format structures, converting reactive updates from regex replacements to C-speed string builders.
  3. Loop Division Elimination: Particle shaders and polyphonic audio generators use cached precalculated inverse values (inv_max_lifetime and phase_increment) to replace expensive division operations with single-clock multiplication instructions.
  4. Square Wave Optimization: Square waves skip standard trignometric sinf calculations, computing high-low status directly from phase boundaries.

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

doodle_ui-1.0.9.tar.gz (53.6 kB view details)

Uploaded Source

Built Distributions

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

doodle_ui-1.0.9-cp313-cp313-win_amd64.whl (433.9 kB view details)

Uploaded CPython 3.13Windows x86-64

doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_i686.whl (1.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

doodle_ui-1.0.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

doodle_ui-1.0.9-cp313-cp313-macosx_11_0_arm64.whl (657.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

doodle_ui-1.0.9-cp312-cp312-win_amd64.whl (434.0 kB view details)

Uploaded CPython 3.12Windows x86-64

doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_i686.whl (1.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

doodle_ui-1.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

doodle_ui-1.0.9-cp312-cp312-macosx_11_0_arm64.whl (657.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

doodle_ui-1.0.9-cp311-cp311-win_amd64.whl (434.0 kB view details)

Uploaded CPython 3.11Windows x86-64

doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_i686.whl (1.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

doodle_ui-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (909.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

doodle_ui-1.0.9-cp311-cp311-macosx_11_0_arm64.whl (657.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file doodle_ui-1.0.9.tar.gz.

File metadata

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

File hashes

Hashes for doodle_ui-1.0.9.tar.gz
Algorithm Hash digest
SHA256 4a0bffe24aa29d03b7ff6308ba773893ebe2b0cdbd8705cda7faaa0fec459961
MD5 6025124eb58609a553c6725d1074eb87
BLAKE2b-256 417fe06c250606947e0ac687c07bf6c6f871999c33c3a5f8a9b6d0d777afbfd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9.tar.gz:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: doodle_ui-1.0.9-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 433.9 kB
  • 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 doodle_ui-1.0.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7b70613a4fc5fc52b4fbae8322cd1992cbe2b77b9cfe67c9a46c9fd0b0e16462
MD5 fb6da621f8671d729ac8940d4d1c6da4
BLAKE2b-256 dccc772b9dccaf4007639d8324054c8988afd873b0ddcbb1929f81abdc361a54

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp313-cp313-win_amd64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3c49cb8fced702a80255a1a2d67dbf1af554502107fc3c7724de6dd912e6ed0b
MD5 f5c501a3e8a46c503401eb55e9d35bf3
BLAKE2b-256 0ea57ac51670b848dc34e8e974397b609e1740ff0623283d3de15b64fc875ee7

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 85e086bad7e101ba86efcc003f4927553a6188bb02533bdcf1ce64bb0c33a595
MD5 767debdfdd974e4c5df42bf5197d3ad7
BLAKE2b-256 d89cd9f2056a08263a4cf879612cbc4e10a7419900d08ea25a45016b85e65975

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp313-cp313-musllinux_1_2_i686.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9e12223ce2d5e0e269a768c135f29a31e8aad594808e03af18f3ef30dce18d4
MD5 2ecc7152af2eeb075f2d6e575b471a3a
BLAKE2b-256 8c09b2192a9c18c7f392fcb382ebd0e77719b7e8a364906b6569c881cbf63f4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3bccb699ac7490a46081e807e4839bea49396f8e700ae7a55687a0ea058d5b16
MD5 8d94d9c5c5bb9dc2abef1952b3e13757
BLAKE2b-256 492941d24422717352050b323c38b9ccf506de075140ffae1b83d977b9df0776

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: doodle_ui-1.0.9-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 434.0 kB
  • 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 doodle_ui-1.0.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8145a0eee138d1a246c5997fdd0502da942c687518dea7c2d65636c90ba94244
MD5 47697d367033cdf547e7c4970b61f7a7
BLAKE2b-256 8b6c5e7dde119eed3e3f258e352f06a1dd03fa6fc9d5b6b9eecd1b010351fd7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp312-cp312-win_amd64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 19b4e083577affdb1b75538ca4f4dbc48091a42f87d3fa9a75e5c9b4bf61e466
MD5 0dc1a09ed86f9a8b57b95008ce1281e8
BLAKE2b-256 08a52262073ff85a85ab56251796d78d2b75343fe6f035d0889813eceb93075d

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 0354bbfcfe6f3ad0aa3f56a9315dfbb7d643683a1cb57d5434e3194ce7802d37
MD5 a51b661a7e6271232940a46ea1be4013
BLAKE2b-256 028ce705c5b9f06318960df93eafb7703108a2a515ea982105bf2fb0b0228796

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp312-cp312-musllinux_1_2_i686.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0aef75bb1944a6d831a3bfe72a6d6f44d7381e7499984f312997828265c28fa5
MD5 3d2b79264b598efc26fa6eff4b35962f
BLAKE2b-256 a05400dfb0e9abc1e8c6ae1800a628f1bc86edfe62fdf44a536d8adfc07283d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c034463a2768cdab1baef014445d1c0fc1a87d679e1dd13a38261c9312fa53fe
MD5 1fd787fcf19477589149231159e6f5dd
BLAKE2b-256 0a4bdffcfa6a3094a250b79dcde67dded46e0d73f4422703336ca544ebeb1c39

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: doodle_ui-1.0.9-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 434.0 kB
  • 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 doodle_ui-1.0.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4e034d7e43822d99c174a9b979dc3190efa30f13bd5bc04e90c86f72661f4568
MD5 f53f74d45a6fc686ff5fe132e87d8266
BLAKE2b-256 e095010ad396d7deb89949a9f2465a9668db471ae3841a4e018bccc84aa8b4f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp311-cp311-win_amd64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a718aa100ce358fda28193c3705928905c2ec58abedbba87a6861ab5fba1d48f
MD5 91e82d21fb606dccd0bcc1ee986252ce
BLAKE2b-256 8641c6614fee928ec3d289251d03bb78faf99aaebf938a730bb6c6d308aa1374

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d2c24bad87ec8d90156514279bf6bffa89a4ceed83cfec2227f5818842bb0cfd
MD5 bf43d3d831fb1e950a546b5759de4e2c
BLAKE2b-256 fe88ca95603141d5d0acb40fd0717d5163ebb1653ebf06a199e5c1a592cc76a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp311-cp311-musllinux_1_2_i686.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fbbe4d69d47ca864c846dc949b4d88559420c206ea5d1b4e9852ec27c0e4fc94
MD5 e2c03ee218f1123002712c9e8477799b
BLAKE2b-256 9b0144fc1ebcdef9d4c1f9065583ac25f6be89be079f65ee7e11ce0422b54462

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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

File details

Details for the file doodle_ui-1.0.9-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.0.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac13f45958bf172eaee23cba0d17bc36b0d2e084e9a4513bf89dfadadd198e6f
MD5 f06ede66572f1c98dd0d2d225c12f928
BLAKE2b-256 32438eadfc348890d5755bc3864695e7c35251c8a021272fc436677309902676

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.0.9-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on DUDDLEGOD/Doodle

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