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

Build games, creative tools, and interactive apps using HTML-like layouts, CSS styling, and Python scripting โ€” all rendered natively on the GPU.


Doodle is a high-performance, lightweight engine that combines a native C rendering core (powered by Raylib) with a highly reactive Python scripting layer. Instead of embedding a browser, Doodle parses HTML-like templates and CSS stylesheets in a single pass, mapping them directly to GPU-accelerated graphics, procedural audio, and real-time collision systems.

โœจ Key Features

Category Features
Rendering GPU-accelerated 2D drawing, rounded rectangles, circles, lines, images, custom GLSL shaders, particle system
Layout Flexbox engine (row/column, justify-content, align-items), absolute positioning, percentage/pixel/grow/fit sizing
Styling Full CSS property system, hover states, dynamic runtime style changes, custom fonts, border-radius, opacity
Input Keyboard polling (down/pressed), mouse position/buttons/wheel/cursor, node click & hover detection
Audio Polyphonic procedural synthesizer (5 waveforms, ADSR envelopes, stereo panning, pitch slide, vibrato, tremolo, low-pass filter), cached sound/music files
Collision Rect-Rect, Circle-Circle, Circle-Rect detection, class-group collision queries, batch collision processing
Animation Tween engine with easing curves (linear, quad_in, quad_out)
Scripting Full Python OOP node wrappers, property accessors (node.x += 10), reactive {{ template }} data binding
Dev Tools Built-in FPS/draw-call/RAM profiler, runtime Python console (~ key), hot-reload for layout, styles, and shaders
Memory & Perf Linked-list memory arenas, O(1) hash cache lookup, Trigonometry LUT, FBO render bypass, 90% reduced node layout structs
DX camelCase + snake_case dual API, full .pyi type stubs for IDE autocomplete, descriptive error messages with layout line numbers

๐Ÿš€ Getting Started

Requirements

  • OS: Windows (x64) or Linux
  • Python: 3.11+
  • C Toolchain: MSYS2/MinGW-w64 (Windows) or GCC (Linux)

Quick Setup

# Clone and enter the repository
git clone https://github.com/user/Doodle.git
cd Doodle

# Create virtual environment
python -m venv .venv

# Compile the native C extension
# Windows (PowerShell):
.venv\Scripts\python.exe setup.py build_ext --inplace

# Linux:
.venv/bin/python setup.py build_ext --inplace

Run the Breakout Demo

# Windows:
.venv\Scripts\python.exe examples\breakout\main.py

# Linux:
.venv/bin/python examples/breakout/main.py

๐Ÿ“– How It Works

Doodle apps are built with three files:

1. layout.html โ€” Define your UI structure

<view id="app">
    <view id="hud">
        <text id="score">SCORE: {{ score }}</text>
        <text id="lives">LIVES: {{ lives }}</text>
    </view>
    <view id="game-area" camera="true">
        <view id="player"></view>
        <view id="ball"></view>
        <circle id="coin" radius="12" color="#facc15"></circle>
    </view>
    <view id="game-over" style="display: none;">
        <text id="msg">GAME OVER</text>
        <button id="restart-btn" onclick="restart">RESTART</button>
    </view>
</view>

2. styles.css โ€” Style everything with familiar CSS

#app {
    flex-direction: column;
    width: 100%;
    height: 100%;
    background-color: #0a0a0a;
}

#hud {
    flex-direction: row;
    justify-content: space-between;
    padding: 12 24;
    background-color: #111;
    font-size: 18;
    color: #00ffcc;
}

#player {
    width: 80px;
    height: 16px;
    background-color: #00ffcc;
    border-radius: 4;
}

#ball {
    width: 16px;
    height: 16px;
    background-color: #ffffff;
    border-radius: 8;
}

3. main.py โ€” Script your logic in Python

import doodle

state = {"score": 0, "lives": 3}

player = doodle.getNode("player")
ball = doodle.getNode("ball")

ball_dx, ball_dy = 5.0, -5.0

def tick():
    global ball_dx, ball_dy

    # Move player with keyboard
    if doodle.isKeyDown(263):  # Left arrow
        player.x -= 8
    if doodle.isKeyDown(262):  # Right arrow
        player.x += 8

    # Move ball
    ball.x += ball_dx
    ball.y += ball_dy

    # Bounce off paddle
    if doodle.checkCollision("ball", "player"):
        ball_dy = -abs(ball_dy)
        doodle.playSynth(440.0, 0.1, doodle.WAVE_SQUARE)
        doodle.shakeCamera(4.0, 0.15)
        doodle.spawnParticles(ball.x, ball.y, 15, "#00ffcc", 3.0, 0.4)

doodle.registerTickCallback(tick)
doodle.run(layout="layout.html", style="styles.css", width=800, height=600, state=state)

๐ŸŽฎ Python API Overview

Engine Lifecycle

doodle.run(layout, style, width, height, title, state)  # Start the engine
doodle.registerTickCallback(fn)                          # Per-frame update function

Node Manipulation (OOP)

node = doodle.getNode("player")    # Get a node wrapper

node.x += 10                       # Direct position access
node.y = 300
node.position = (100, 200)         # Tuple assignment
node.width = 80                    # Resize via CSS
node.text = "Hello!"               # Update inner text
node.visible = False               # Hide from rendering
node.show() / node.hide()          # Visibility methods
node.style.background_color = "red"  # Dynamic CSS properties

Input

doodle.isKeyDown(key_code)          # Held key check
doodle.isKeyPressed(key_code)       # Single-frame press
doodle.getMousePosition()           # (x, y) tuple
doodle.isMouseButtonPressed(0)      # Left click
doodle.isNodeClicked("btn")         # Click detection on DOM node
doodle.isNodeHovered("btn")         # Hover detection on DOM node

Collision Detection

doodle.checkCollision("a", "b")              # Rect/Circle aware
doodle.getFirstCollision("ball", "bricks")   # Class group query
doodle.batchProcess(positions={...}, collisions=[...])  # Batched C call

Audio

doodle.playSound("sfx/hit.wav")                              # Cached WAV/OGG playback
doodle.playSynth(frequency, duration, wave_type=1, attack=0.01, decay=0.05, sustain=0.5, release=0.05, frequency_slide=0.0, vibrato_speed=0.0, vibrato_depth=0.0, tremolo_speed=0.0, tremolo_depth=0.0, filter_cutoff=0.0, pan=0.0) # Synthesizer
# Waveforms: WAVE_SINE=0, WAVE_SQUARE=1, WAVE_TRIANGLE=2, WAVE_SAWTOOTH=3, WAVE_NOISE=4

Effects

doodle.spawnParticles(x, y, count, color_hex, speed, lifetime)  # Particle burst
doodle.shakeCamera(intensity, duration)                         # Screen shake
doodle.animate("node", target_x=100, duration=0.5, ease="quad_out")  # Tweens

Camera

doodle.setCamera(target_x, target_y, offset_x, offset_y, zoom, rotation)

๐Ÿ”ง Developer Tools

Press ~ (tilde) at runtime to open the built-in developer console. Execute Python commands live:

>>> getNode("ball").x += 100
>>> spawnParticles(400, 300, 50, "#ff0", 5.0, 1.0)

The profiler overlay shows FPS, draw calls, particle count, and CPU time per frame.


๐Ÿ“ Repository Structure

Doodle/
โ”œโ”€โ”€ doodle/                    # Python package
โ”‚   โ”œโ”€โ”€ __init__.py            # OOP wrappers, tweens, events, templates
โ”‚   โ”œโ”€โ”€ __init__.pyi           # Full type stubs for IDE autocomplete
โ”‚   โ””โ”€โ”€ cli.py                 # PyInstaller packaging CLI
โ”œโ”€โ”€ src/                       # C extension core (compiles to _doodle.pyd)
โ”‚   โ”œโ”€โ”€ expose_raylib.c        # CPython bindings, main loop, particles
โ”‚   โ”œโ”€โ”€ mparser.h / .c         # DOM tree, node pool, hash-table lookup
โ”‚   โ”œโ”€โ”€ html_parser.h / .c     # Single-pass HTML parser with line tracking
โ”‚   โ”œโ”€โ”€ css_parser.h / .c      # CSS parser with functional registry pattern
โ”‚   โ”œโ”€โ”€ layout.h / .c          # Flexbox layout solver
โ”‚   โ”œโ”€โ”€ renderer.h / .c        # GPU draw traversal, shaders, z-sorting
โ”‚   โ”œโ”€โ”€ daudio.h / .c          # Polyphonic synth, ADSR envelope generator
โ”‚   โ”œโ”€โ”€ particles.h / .c       # Object-pooled particle system
โ”‚   โ”œโ”€โ”€ profiler.h / .c        # FPS counter, draw call tracker, dev console
โ”‚   โ”œโ”€โ”€ cache.h / .c           # Texture, sound, shader, font caching
โ”‚   โ”œโ”€โ”€ color.h / .c           # Hex/named color parser
โ”‚   โ”œโ”€โ”€ unit.h / .c            # CSS unit parser (px, %, grow, fit)
โ”‚   โ”œโ”€โ”€ string_utils.h / .c    # String trimming and helpers
โ”‚   โ””โ”€โ”€ dom_utils.h / .c       # Tree traversal utilities
โ”œโ”€โ”€ examples/                  # Demo applications
โ”‚   โ””โ”€โ”€ breakout/              # Breakout game with CRT shader
โ”œโ”€โ”€ docs/                      # Documentation
โ”‚   โ”œโ”€โ”€ getting-started.md     # Installation & first app tutorial
โ”‚   โ”œโ”€โ”€ api-reference.md       # Complete API reference
โ”‚   โ”œโ”€โ”€ layout-and-styling.md  # HTML tags & CSS properties guide
โ”‚   โ”œโ”€โ”€ architecture.md        # Engine internals & C architecture
โ”‚   โ””โ”€โ”€ cheatsheet.md          # Quick reference card
โ”œโ”€โ”€ third_party/               # Static Raylib binaries
โ”œโ”€โ”€ setup.py                   # Build script
โ”œโ”€โ”€ pyproject.toml             # Package metadata
โ””โ”€โ”€ README.md                  # You are here!

โšก Performance

Doodle is engineered for speed with several custom optimizations:

  • Hash-table node lookup โ€” O(1) average case for FindNodeById instead of tree traversal
  • Object-pooled particles โ€” Pre-allocated particle array, no runtime allocation
  • Batched C calls โ€” batchProcess() combines position/text/visibility/collision updates into one Pythonโ†’C roundtrip
  • Fast math โ€” SSE3 intrinsics, cached inverse values for division elimination, direct phase-boundary square waves
  • Precompiled templates โ€” {{ score }} compiles once to Python {score} format strings
  • Lazy layout โ€” Layout recomputation only when layout_dirty flag is set

๐Ÿ“„ License

MIT License. See LICENSE for details.

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.2.3.tar.gz (44.7 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.2.3-cp313-cp313-win_amd64.whl (458.9 kB view details)

Uploaded CPython 3.13Windows x86-64

doodle_ui-1.2.3-cp313-cp313-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

doodle_ui-1.2.3-cp313-cp313-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

doodle_ui-1.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (999.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

doodle_ui-1.2.3-cp313-cp313-macosx_11_0_arm64.whl (685.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

doodle_ui-1.2.3-cp312-cp312-win_amd64.whl (458.9 kB view details)

Uploaded CPython 3.12Windows x86-64

doodle_ui-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

doodle_ui-1.2.3-cp312-cp312-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

doodle_ui-1.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (999.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

doodle_ui-1.2.3-cp312-cp312-macosx_11_0_arm64.whl (685.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

doodle_ui-1.2.3-cp311-cp311-win_amd64.whl (458.9 kB view details)

Uploaded CPython 3.11Windows x86-64

doodle_ui-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

doodle_ui-1.2.3-cp311-cp311-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

doodle_ui-1.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (999.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

doodle_ui-1.2.3-cp311-cp311-macosx_11_0_arm64.whl (685.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: doodle_ui-1.2.3.tar.gz
  • Upload date:
  • Size: 44.7 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.2.3.tar.gz
Algorithm Hash digest
SHA256 a69d9b44630ac6306a0bb4cc194109a68cb0bd9a012e19c4b0e3f02a828831ae
MD5 8e618b1af3cf59f617fee3d8d0749921
BLAKE2b-256 24763bf45b429d78b7007030d14a93a65fe0c2131789b3939d907bc2b5739dbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3.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.2.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: doodle_ui-1.2.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 458.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.2.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fe81259c0c052e5ec658ff573de1a99a5845420462fe7316069d544fdc9c426e
MD5 c040417fcce26a00cc10db70ad3b7c19
BLAKE2b-256 b60bf641e72a824a6f4724450d9aecb36ba30fa804dc2aaa8135806fcdfb9ee4

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7abab7893391b72e571399ad537723628094dedacc14be633a15bb79650100f7
MD5 92754c806489528a04d3661a9d715880
BLAKE2b-256 d0d349843f8faf93efbd732fed04c5fb55a514e85817985b65174b885d49055d

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 078af26d8ff4629f724bde8e964569ff36a2576ff6d3077c5d92b7d24796ca0f
MD5 444205c8275eb356e919bf766b837f7d
BLAKE2b-256 7f7c103f39467f18bff308d0c817a17af5e241ddc58004edae0757e4697ba9f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 49624936b0d6fec806e60abc11a689f45ee463383b05fb6128c8369ebbf72081
MD5 ce89822245b7118a929cbb73037c2a68
BLAKE2b-256 395417b80a1cbeefce9a894d4f0352f36d0522ffb744551ee6a9389f39c77c06

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 741d07bc4f81c49af248169130a552626d41fa6ecce11179b1bb54f8a955410a
MD5 81bac451d07d5d6ecd03881edabc7d4a
BLAKE2b-256 7cbd08a73e4dca813a7bb83db11e779845380162fb4211de2d719d8101e89b74

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: doodle_ui-1.2.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 458.9 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.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1301cb226f4e6d601a546de25c11d3240c66751325f9db504a1a1779ac2bbbf6
MD5 0abbd1dd27b334075954835d9192939a
BLAKE2b-256 b6bc12c5b285e397389f3262a9ae4b8efb5ae8b1f69ee2be180b195f24b6d22d

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dcb25ffca7d8e5387b14628c8e98f214ffc54b23127e44951dd7feec4bc43517
MD5 9215d6ef0742b2c14d24fa853f31175a
BLAKE2b-256 4afbb9b8795a2202fe4846e945e4141a85e859d379ed4f5c67900a81f5fd0872

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1b0786cb7c350425e5120edad0359542c1826d349335fdec04be263ab2f74813
MD5 70d8541a525c8d0d9f0d851534af0d69
BLAKE2b-256 40a8f2d79e09f6ac8cf310f74b9e01027dce071b3a0fe3dc85bdbf9f8cf616f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c11436015e3923093f7682f1303cb72ff284e6e12ac8e8839c4844455fe50b7
MD5 4c3d88be1a5e19e78503f9aa036dfab5
BLAKE2b-256 b12cf6d00af9e9ea57e24be564f37e43db2f710bb1d7b96a10e724a18b777f21

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c62b481c794e2f9b7b5bd7e098fddd44e679b84985bef309fa6a60109f85ca04
MD5 11acdbda8364bc16aea9d64e180d70ec
BLAKE2b-256 a75c74fe77a7cdd76d1f39db0cd9226529ed238fde606ff79e09bcc121e3f51b

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: doodle_ui-1.2.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 458.9 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.2.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3836ee635dc3f61591761a5ba44078531eedb20d929fecb0c3f51e635850dc0b
MD5 462e1485bfb28ae088c25fa7688e33bb
BLAKE2b-256 43f6da4da476a95c4ea74825f2ff05414c46a9eafcff6707a0096fd1cabd67ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 de596d5aea9fa3fe6366a91b05917504603fd7ba40feb254ee17126dae8d9a7b
MD5 268e21484507567f918106296c858884
BLAKE2b-256 f42adfad18d4dfe35a5076341d8562216e56a68774963b7946cbe51f0ce49d94

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 2074aba1b6bab490cd367c9ec6d3c5c00222d64d91dc34e8a473f8d70248cb0e
MD5 f56db1fc3b9e789b135b812a569f0a94
BLAKE2b-256 66b25b26c09007bba4454ae7da6f61bbc01453196e962b63b5734564cf500d17

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b5dbe0f48dcd019f613804193f80082d517038f74fe55fde59306df150c9c81d
MD5 782c502a9ab8f99b1340f947f66c3be5
BLAKE2b-256 d3ed871ffe8291613a621bfb4aac9955bbf7e736f1cdae8f3568fa774ec64810

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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.2.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for doodle_ui-1.2.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 945de17ee4b3150d2d3053b0d382716176eada3761b1eb385031b4b49ed9e204
MD5 cb4e3e2c01d3057c228f042f6dc1e4c4
BLAKE2b-256 2d0fc793d79d4464a30ce213e88711465fc3b8c11a235e122d262efda5e76642

See more details on using hashes here.

Provenance

The following attestation bundles were made for doodle_ui-1.2.3-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