Skip to main content

ZenGL

pip install zengl

ZenGL

ZenGL is a low level graphics library. Works on all platforms including the browser.

Description

  • Context is the root object to access OpenGL
  • Image is an OpenGL Texture or Renderbuffer
  • Buffer is an OpenGL Buffer
  • Pipeline is an OpenGL Program + Vertex Array + Framebuffer + complete state for rendering
ctx = zengl.context()
texture = ctx.image(size, 'rgba8unorm', pixels)
renderbuffer = ctx.image(size, 'rgba8unorm', samples=4)
vertex_buffer = ctx.buffer(vertices)
pipeline = ctx.pipeline(...)

The complete OpenGL state is encapsulated by the Pipeline.

Rendering with multiple pipelines guarantees proper state with minimal changes and api calls.

background.render()
scene.render()
particles.render()
bloom.render()

Pipelines render to framebuffers, Images can be blit to the screen.

# init time
pipeline = ctx.pipeline(
    framebuffer=[image, depth],
)
# per frame
image.clear()
depth.clear()
pipeline.render()
image.blit()

Programs are simple, easy, and cached. Unique shader sources are only compiled once.

pipeline = ctx.pipeline(
    vertex_shader='''
        #version 330 core

        void main() {
            gl_Position = ...
        }
    ''',
    fragment_shader='''
        #version 330 core

        out vec4 frag_color;

        void main() {
            frag_color = ...
        }
    ''',
)

Vertex Arrays are simple.

# simple
pipeline = ctx.pipeline(
    vertex_buffers=zengl.bind(vertex_buffer, '3f 3f 2f', 0, 1, 2),
    vertex_count=vertex_buffer.size // zengl.calcsize('3f 3f 2f'),
)
# indexed
pipeline = ctx.pipeline(
    vertex_buffers=zengl.bind(vertex_buffer, '3f 3f 2f', 0, 1, 2),
    index_buffer=index_buffer,
    vertex_count=index_buffer.size // 4,
)
# instanced
pipeline = ctx.pipeline(
    vertex_buffers=[
        *zengl.bind(vertex_buffer, '3f 3f 2f', 0, 1, 2),
        *zengl.bind(instance_buffer, '3f 4f /i', 3, 4),
    ],
    vertex_count=vertex_buffer.size // zengl.calcsize('3f 3f 2f'),
    instance_count=1000,
)

Uniform Buffer, Texture, and Sampler binding is easy.

# uniform buffers
pipeline = ctx.pipeline(
    layout=[
        {
            'name': 'Common',
            'binding': 0,
        },
    ],
    resources=[
        {
            'type': 'uniform_buffer',
            'binding': 0,
            'buffer': uniform_buffer,
        },
    ],
)
# textures
pipeline = ctx.pipeline(
    layout=[
        {
            'name': 'Texture',
            'binding': 0,
        },
    ],
    resources=[
        {
            'type': 'sampler',
            'binding': 0,
            'image': texture,
            'wrap_x': 'clamp_to_edge',
            'wrap_y': 'clamp_to_edge',
            'min_filter': 'nearest',
            'mag_filter': 'nearest',
        },
    ],
)

Postprocessing and Compute can be implemented as rendering a fullscreen quad.

pipeline = ctx.pipeline(
    vertex_shader='''
        #version 330 core

        vec2 vertices[3] = vec2[](
            vec2(-1.0, -1.0),
            vec2(3.0, -1.0),
            vec2(-1.0, 3.0)
        );

        void main() {
            gl_Position = vec4(vertices[gl_VertexID], 0.0, 1.0);
        }
    ''',
    fragment_shader='''
        #version 330 core

        out vec4 frag_color;

        void main() {
            frag_color = ...
        }
    ''',
    topology='triangles',
    vertex_count=3,
)
particle_system = ctx.pipeline(
    vertex_shader=...,
    fragment_shader='''
        #version 330 core

        uniform sampler2D Position;
        uniform sampler2D Velocity;
        uniform vec3 Acceleration;

        layout (location = 0) out vec3 OutputPosition;
        layout (location = 1) out vec3 OutputVelocity;

        void main() {
            ivec2 at = ivec2(gl_FragCoord.xy);
            vec3 position = texelFetch(Position, at, 0).xyz;
            vec3 velocity = texelFetch(Velocity, at, 0).xyz;
            OutputPosition = position + velocity;
            OutputVelocity = velocity + Acceleration;
        }
    ''',
)

ZenGL intentionally does not support:

  • Transform Feedback
  • Geometry Shaders
  • Tesselation
  • Compute Shaders
  • 3D Textures
  • Storage Buffers

Most of the above can be implemented in a more hardware friendly way using the existing ZenGL API. Interoperability with other modules is also possible. Using such may reduce the application's portablity. It is even possible to use direct OpenGL calls together with ZenGL, however this is likely not necessary.

It is common to render directly to the screen with OpenGL. With ZenGL, the right way is to render to a framebuffer and blit the final image to the screen. This allows fine-grained control of the framebuffer format, guaranteed multisampling settings, correct depth/stencil precison. It is also possible to render directly to the screen, however this feature is designed to be used for the postprocessing step.

This design allows ZenGL to support:

  • Rendering without a window
  • Rendering to multiple windows
  • Rendering to HDR monitors
  • Refreshing the screen without re-rendering the scene
  • Apply post-processing without changing how the scene is rendered
  • Making reusable shaders and components
  • Taking screenshots or exporting a video

The default framebuffer in OpenGL is highly dependent on how the Window is created. It is often necessary to configure the Window to provide the proper depth precision, stencil buffer, multisampling and double buffering. Often the "best pixel format" lacks all of these features on purpose. ZenGL aims to allow choosing these pixel formats and ensures the user specifies the rendering requirements. It is even possible to render low-resolution images and upscale them for high-resolution monitors. Tearing can be easily prevented by decoupling the scene rendering from the screen updates.

ZenGL was designed for Prototyping

It is tempting to start a project with Vulkan, however even getting a simple scene rendered requires tremendous work and advanced tooling to compile shaders ahead of time. ZenGL provides self-contained Pipelines which can be easily ported to Vulkan. ZenGL code is verbose and easy to read.

ZenGL support multiple design patters

Many libraries enfore certain design patterns. ZenGL avoids this by providing cached pipeline creation, pipeline templating and lean resourece and framebuffer definition. It is supported to create pipelines on the fly or template them for certain use-cases.

TODO: examples for such patters

ZenGL emerged from an experimental version of ModernGL. To keep ModernGL backward compatible, ZenGL was re-designed from the ground-up to support a strict subset of OpenGL. On the other hand, ModernGL supports a wide variety of OpenGL versions and extensions.

Disambiguation

  • ZenGL is a drop-in replacement for pure OpenGL code
  • Using ZenGL requires some OpenGL knowledge
  • ZenGL Images are OpenGL Texture Objects or Renderbuffer Objects
  • ZenGL Buffers are OpenGL Buffer Objects
  • ZenGL Pipelines contain an OpenGL Vertex Array Object, a Program Object, and a Framebuffer Object
  • ZenGL Pipelines may also contain OpenGL Sampler Objects
  • Creating ZenGL Pipelines does not necessarily compile the shader from source
  • The ZenGL Shader Cache exists independently from the Pipeline objects
  • A Framebuffer is always represented by a Python list of ZenGL Images
  • There is no Pipeline.clear() method, individual images must be cleared independently
  • GLSL Uniform Blocks and sampler2D objects are bound in the Pipeline layout
  • Textures and Uniform Buffers are bound in the Pipeline resources

Examples

Browse and try the examples in your browser at the live playground.

bezier_curves deferred_rendering envmap fractal grass normal_mapping rigged_objects wireframe

Simple Pipeline Definition

pipeline = ctx.pipeline(
    # program definition
    vertex_shader='...',
    fragment_shader='...',
    layout=[
        {
            'name': 'Uniforms',
            'binding': 0,
        },
        {
            'name': 'Texture',
            'binding': 0,
        },
    ],

    # descriptor sets
    resources=[
        {
            'type': 'uniform_buffer',
            'binding': 0,
            'buffer': uniform_buffer,
        },
        {
            'type': 'sampler',
            'binding': 0,
            'image': texture,
        },
    ],

    # uniforms
    uniforms={
        'color': [0.0, 0.5, 1.0],
        'iterations': 10,
    },

    # program definition global state
    depth={
        'func': 'less',
        'write': False,
    },
    stencil={
        'front': {
            'fail_op': 'replace',
            'pass_op': 'replace',
            'depth_fail_op': 'replace',
            'compare_op': 'always',
            'compare_mask': 1,
            'write_mask': 1,
            'reference': 1,
        },
        'back': ...,
        # or
        'both': ...,
    },
    blend={
        'enable': True,
        'src_color': 'src_alpha',
        'dst_color': 'one_minus_src_alpha',
    },
    cull_face='back',
    topology='triangles',

    # framebuffer
    framebuffer=[color1, color2, ..., depth],
    viewport=(x, y, width, height),

    # vertex array
    vertex_buffers=[
        *zengl.bind(vertex_buffer, '3f 3f', 0, 1), # bound vertex attributes
        *zengl.bind(None, '2f', 2), # unused vertex attribute
    ],
    index_buffer=index_buffer, # or None
    short_index=False, # 2 or 4 byte intex
    vertex_count=...,
    instance_count=1,
    first_vertex=0,

    # override includes
    includes={
        'common': '...',
    },
)

# some members are actually mutable and calls no OpenGL functions
pipeline.viewport = ...
pipeline.vertex_count = ...
pipeline.uniforms['iterations'][:] = struct.pack('i', 50) # writable memoryview

# rendering
pipeline.render() # no parameters for hot code

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zengl-2.7.3.tar.gz (55.6 kB view details)

Uploaded Source

Built Distributions

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

zengl-2.7.3-cp315-cp315t-win_amd64.whl (49.1 kB view details)

Uploaded CPython 3.15tWindows x86-64

zengl-2.7.3-cp315-cp315t-musllinux_1_2_x86_64.whl (162.5 kB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

zengl-2.7.3-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (165.0 kB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

zengl-2.7.3-cp315-cp315t-macosx_11_0_arm64.whl (46.7 kB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

zengl-2.7.3-cp315-cp315-win_amd64.whl (48.4 kB view details)

Uploaded CPython 3.15Windows x86-64

zengl-2.7.3-cp315-cp315-musllinux_1_2_x86_64.whl (140.2 kB view details)

Uploaded CPython 3.15musllinux: musl 1.2+ x86-64

zengl-2.7.3-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (141.5 kB view details)

Uploaded CPython 3.15manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

zengl-2.7.3-cp315-cp315-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.15macOS 11.0+ ARM64

zengl-2.7.3-cp314-cp314t-win_amd64.whl (49.1 kB view details)

Uploaded CPython 3.14tWindows x86-64

zengl-2.7.3-cp314-cp314t-musllinux_1_2_x86_64.whl (162.5 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

zengl-2.7.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (165.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

zengl-2.7.3-cp314-cp314t-macosx_11_0_arm64.whl (46.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

zengl-2.7.3-cp314-cp314-win_amd64.whl (48.4 kB view details)

Uploaded CPython 3.14Windows x86-64

zengl-2.7.3-cp314-cp314-musllinux_1_2_x86_64.whl (140.2 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

zengl-2.7.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (141.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

zengl-2.7.3-cp314-cp314-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

zengl-2.7.3-cp313-cp313-win_amd64.whl (47.3 kB view details)

Uploaded CPython 3.13Windows x86-64

zengl-2.7.3-cp313-cp313-musllinux_1_2_x86_64.whl (140.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

zengl-2.7.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (142.0 kB view details)

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

zengl-2.7.3-cp313-cp313-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zengl-2.7.3-cp312-cp312-win_amd64.whl (47.3 kB view details)

Uploaded CPython 3.12Windows x86-64

zengl-2.7.3-cp312-cp312-musllinux_1_2_x86_64.whl (140.7 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

zengl-2.7.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (141.9 kB view details)

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

zengl-2.7.3-cp312-cp312-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zengl-2.7.3-cp311-cp311-win_amd64.whl (47.0 kB view details)

Uploaded CPython 3.11Windows x86-64

zengl-2.7.3-cp311-cp311-musllinux_1_2_x86_64.whl (135.8 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

zengl-2.7.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (137.0 kB view details)

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

zengl-2.7.3-cp311-cp311-macosx_11_0_arm64.whl (45.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zengl-2.7.3-cp310-cp310-win_amd64.whl (47.0 kB view details)

Uploaded CPython 3.10Windows x86-64

zengl-2.7.3-cp310-cp310-musllinux_1_2_x86_64.whl (134.8 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

zengl-2.7.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (136.0 kB view details)

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

zengl-2.7.3-cp310-cp310-macosx_11_0_arm64.whl (45.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file zengl-2.7.3.tar.gz.

File metadata

  • Download URL: zengl-2.7.3.tar.gz
  • Upload date:
  • Size: 55.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3.tar.gz
Algorithm Hash digest
SHA256 1c748c90989e9989dc256b0c3a70e53d271a4aba7546f42221c0f21227e17d9c
MD5 fbde179834481b19fb5053c957e6dc7a
BLAKE2b-256 a89bc2b8cfa5a127c5a3b658bfcc31c1aee8182003f96f1e45711457e6a54d96

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315t-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp315-cp315t-win_amd64.whl
  • Upload date:
  • Size: 49.1 kB
  • Tags: CPython 3.15t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 16cc9109ff0a8bc7ea10f0953ee948f3dd4cdeffa9a91161687bef0007713141
MD5 034b3585ab3d4aa75a0ab4cbfc1a0678
BLAKE2b-256 40f3e62550c6c97eaf6cd9d684ad9290e1e9844c95178469c25ced465231cb53

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a5792c08da9a511b0c354b65517ca3da03b09338f07f2c5d96265d03f127dc5b
MD5 c9111eb4b69ec3eb547e166b2feb765c
BLAKE2b-256 c31dd5692a7244c6c89ff8d86486dd63e722effd48da77933979cd4addc70dfb

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 96b338bba34be740f6276b6b10def7ca1360b0a12afadba3d882c53a34c3c82e
MD5 b784f66d242f3a3ee57e6d7f4fe48343
BLAKE2b-256 07a9e518dc6d2d1dd70a7a9b8ae0d9e346ce686979293ef7f8d6b9e7712e7603

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f1efd4357c5f60c9acf6b8aa785be9801e7b538207e7d2f5c5a2704d328ffe0
MD5 3137f440a68bf09eb3305645b44d265c
BLAKE2b-256 67a925c672bba2bcf25afd3e741c5ab87dd72d9526d8749b97a330b033b4fc0e

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp315-cp315-win_amd64.whl
  • Upload date:
  • Size: 48.4 kB
  • Tags: CPython 3.15, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp315-cp315-win_amd64.whl
Algorithm Hash digest
SHA256 69344035f35f79f62a2c20c78be2f87952c305aa25a9bf9035a1139bcaba6edb
MD5 b993177d6f126605e0b866cee73eac68
BLAKE2b-256 038b6f028eb049a4251cd2787df4d6975009bafd2f2c5075fa3c136b2e28b942

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp315-cp315-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f32e06aba96ccaacdfd7314880bbff853b90af21b08cfc04d9d21abd14424b80
MD5 d5a9ad6824bf380d13f0b5a93340a580
BLAKE2b-256 102630748cd76fa07b514c368acb342fceb733ae98f7321807b59540986c5ea3

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 8ad2974fdf47f3bfd768d98b21bde18c7d2fcfa46d7937504e395886134fccc0
MD5 af8c49d8a9ef2a4b68bbcbc178f35eae
BLAKE2b-256 e2fe1acfbd2872d3b2a08d908d7ce83cd8dcde3a040226923dac21c3333c7b63

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp315-cp315-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp315-cp315-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 435219aae3d61a6c7ed09ba6099208d3c4e5c091bd27956843be2795f115b83f
MD5 94c2f1ad8f2f136240ad4d0b45ab34ac
BLAKE2b-256 46ba1caa15b210a101c0eaea8e645695dbb6e348ed586fcd326361ea1afa2791

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 49.1 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1b151acf5778559965bbf77276d46968c3a522924c236b9f69787c2c3c371dc1
MD5 a044ac46a965406a4d622dca6d8280e8
BLAKE2b-256 5162ce75ee2289dd4ce5435a948305bfd6c42ac2a9a64605e6ebeec5e4e2dff5

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5b76156137067bcd0325c4cbba565892cd364b0c0f46c52882c4bdca01cda8af
MD5 c31da4ef487fb17134463d64a378b1df
BLAKE2b-256 5a55d50ee49c399f1310ee46d68adc40452083271542ca31ce601abc4c819df8

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 d3d66f87d3b20f2e5072a49c5cc214a41b2fdebed6222aada5b13d134f6935b6
MD5 bf109d66058270c4b61a530bccec98c2
BLAKE2b-256 f9f7f411103de7ebbf5b1152441d48164356ed325b65170573ecad80eb71f4a0

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7c7eff1bfb18596e4a3cc604ba1b05812c6f2c9dacc8777968323e695287c8a
MD5 39be98a396c10a436c7cc3cf19f7c625
BLAKE2b-256 fa86fa891629a6b640f8cde4bd1404ccc67a8cc3181ba77a20a96f5248b953c3

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 48.4 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 fbbffb3a09b1319e351d2b34d911f77c8aa35b7a445e85711a8bb3290e869c26
MD5 3ff762494c399f9df7b7f5206bd349ef
BLAKE2b-256 d263551a16dbbdaaff9984f65d984625b7475ea435a00c5288ab7100c61b8ad9

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b32365282b50c9d1d29ecb6136dbf649447f64bf9d88310fe61f2d17978b3899
MD5 5a554310d18461c0cfdc91df71198ad9
BLAKE2b-256 c9584ea95b95505d13a0a472223c98a413d67a4021e4d79d00671990633756e9

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 8da4265fbedb95003b5789164dd188c229bc4993cbf1a594ad0649bb38fea518
MD5 867c4b7160db97106f296fcf1da52db9
BLAKE2b-256 92f11a756fdbe53c0c2d49caff054068c5d22f70e42c8cd535dfed87a595fc51

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be1c32e5a57e0a40e94060434bcee0db4e36e1cd22a99874e8f0e792c5a4a357
MD5 6198e5590681e2de0aa00972d552a7ab
BLAKE2b-256 b62bcaadd88dcb1ca44bf69c95fca767f913ff46202b95e2335ec9e88af31826

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 47.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 952b9ccfaf543ee6033d9770396b61a2334acf15fea3f373753cee3f0ad9e46e
MD5 731aa73807b3490083bc68acd16f811d
BLAKE2b-256 597b54465424c277b27c4aab83c9c96eea36ed4400c582b02c1056c983d850a7

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 98cd2c2008354159122eb438b2fa945e0c4ea1b37623a565aae09ecd99491883
MD5 046b9c165f6cfe373b61d7cb9f0b3274
BLAKE2b-256 a8aff1bfdb10db7c49eaeefdeb8a544b4b3c1954936e3f07bba610c810b4154a

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 25a875f1ce8af903d3f633702ff0ed9d2d23f79689d1fac8918120927a60e528
MD5 ba78d35b1e649c24fce07d660a047c7f
BLAKE2b-256 9748159e0c345f74e4fff275f392dc42205a6aceabaaccaa60fff3260bd4ab50

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25c8362c1c896fb46042994d470f82940ee3efd2d0bc4ba6a2d9a6ee7fe8f35a
MD5 d8fef8c7772ef62893fdf8dd5adc58d5
BLAKE2b-256 6bb505a52e93dfeeff32c76f76cb8b645c6dd62f41d6248b5de1a4adb7477a8e

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 47.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6c932bd20f2fba1313866686889041ba4d6bdb222bd03c7ea940b59346eac77f
MD5 b6f25e54bba725f55ad60580cecb6755
BLAKE2b-256 eb36245c94e61391a9e37ec4176269f2b9aff99a4ce401c5625529ee3cb701d4

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f473c1d636cdd5220c6e0471d53b33cab0ccfc29e17f7729f637d71f2fa9745b
MD5 1c352a128a5c4074dc47da278249b5c1
BLAKE2b-256 674836da976e1dc0a9cbc3d480e515158fa06f5b863b3a286e3f0786ba637a48

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 b51cf55e10e0c99e3f74604f5b4a7d151bc139f77efa2cb6f21685068b6ffb49
MD5 ce415119d974d4b902650117c397d4c7
BLAKE2b-256 a459bdc110f3e99410cacf9f41ee8de7c4c8252eb702e53b67a2ab75e8b1cf20

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1de4f84b85c6673c994b2498f8c0abaed40ff24df0ed4c453b0b31355ad30f8
MD5 56638a08414159250e0b38695af92224
BLAKE2b-256 6388f08cfe4a7bda21828dc2d622649ec87dc998bbdd0a41233ed9873b3dfa6c

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 47.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6cc6fd3c4b8d62dcc89ec72d763537aa9ffd38a98bb0a769f41c29dbc758f026
MD5 3eab024d55746faf4ed6867e85b303e6
BLAKE2b-256 2205792eb6936dd543deaa47f3968cbfbceabd76b2317e6ba3bb03249002b131

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b72ba1ce130432b20d1d8fccc8cd741abe115a91a9c5dfc7519b83fa0e64d88d
MD5 8640445dd450e53dd8e3c7056e688be5
BLAKE2b-256 f97f939a848493b38e62d32db16c52258d4b220a379c04a48970b897924d6cc9

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a8851f5dbee1569d226f79cdd3c957e6fd86a366cd98c25effd2325b6bee609d
MD5 728d8a848b42a7242deb70c7c7f1a73c
BLAKE2b-256 f2140c2d3107fbab4988ab810289cacb26f14933e96d1fefa432f1f8db1836a2

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56f599e3c53f5d54481f76c7581c76d2da1a1f2b4f908393dc3870e110c904fb
MD5 3aa9be5711b053b924bcb44f1fd7981e
BLAKE2b-256 120a23f2916bef3cf0ae86b2bbbf4410bfba70ff78753dce801a840d196cfdd8

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 47.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zengl-2.7.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 54a70a54d67057d3d52f3fecb24fa50020ee33bcff65ef98eb9bfac60545640c
MD5 19bf3e11b2e8844f848d6c6139c6ba4b
BLAKE2b-256 be8528bd273f5b84349979ffaf5eb64b83d5ba06fc6994e79742a4669fd32fe6

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2572b9ce3c6fad5300456d13f7b28c68489d9732b875123cf1c8c6016cc9ce74
MD5 ead747ff15caf287f628d35e0972a13e
BLAKE2b-256 1b68dc0d2b8ec344c720e891e7af09c686ba771d132a85227dc36354cad4a11b

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 ae62247f73dea1145a4ccd0af66b36594d6886aaf5d7cc9b628884bca14a6f0d
MD5 4b94988a84ead37f4aeaadb79abc24b8
BLAKE2b-256 4c149edaaaa7fe2a220b7f748221071251fcf5a670a9fc9deb4af99b73292839

See more details on using hashes here.

File details

Details for the file zengl-2.7.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f58f9526730e6266581e21cdb051acd173e62556d87672a59976ce8d2d9e94ac
MD5 5e203c2e6e15f3d505e69fb8989c5fc0
BLAKE2b-256 3b276133a7826cca62a210003904522d01292cb03920c447f546cae5eeb120aa

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.7.3 This release

33 files

2.7.2

31 files

2.7.1

21 files

2.7.0

21 files

2.6.1

21 files

2.6.0

21 files

2.5.5

21 files

2.5.4

21 files

2.5.3

55 files

2.5.2

55 files

2.5.1

41 files

2.5.0

33 files

2.4.1

33 files

2.4.0

33 files

2.3.0

29 files

2.2.1

66 files

2.2.0

66 files

2.1.0

66 files

1.18.0

66 files

1.17.0

66 files

1.16.0

66 files

1.15.0

66 files

1.14.0

66 files

1.13.0

55 files

1.12.2

46 files

1.12.1

46 files

1.12.0

46 files

1.11.0

46 files

1.10.2

55 files

1.10.1

55 files

1.10.0

55 files

1.9.3

55 files

1.9.2

55 files

1.9.1

48 files

1.9.0

48 files

1.8.4

48 files

1.8.3

48 files

1.8.2

48 files

1.8.1

48 files

1.8.0

48 files

1.7.0

48 files

1.6.1

1 file

1.6.0

1 file

1.5.0

40 files

1.4.3

40 files

1.4.2

40 files

1.4.1

40 files

1.4.0

40 files

1.3.0

40 files

1.2.2

40 files

1.2.1

40 files

1.2.0

24 files

1.1.0

24 files

1.0.1

24 files

1.0.0

13 files

0.4.1

2 files

0.4.0

2 files

0.3.0

1 file

0.2.5

1 file

0.2.4

1 file

0.2.3

1 file

0.2.2

1 file

0.2.1

1 file

0.2.0

1 file

0.1.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page