Skip to main content

Rust-backed framework for building websites in pure Python

Project description

ztml

A Rust-backed framework for building websites in pure Python. ZTML allows you to define HTML/CSS/JS using only Python expressions with as much autocompletion support as I could reasonably add. Inspired by FastHTML.

Install

pip install ztml

HTML

Every HTML element has a corresponding constructor function. Attributes are set via chained builder methods. Call render() to get an HTML string.

from ztml import *

page = render(
    Html(
        Head(Meta().charset("utf-8"), Title("My App")),
        Body(
            H1("Hello, ztml!"),
            P("Build websites with Python.").cls("intro"),
            A("GitHub").href("https://github.com").target("_blank"),
        ),
    )
)

Attributes chain naturally:

Div(
    Input().type("text").name("q").placeholder("Search...").autofocus(),
    Button("Go").type("submit"),
).cls("search-box").id("search")

Use Fragment to group elements without a wrapper tag, and Raw to inject unescaped HTML:

Fragment(
    H1("Title"),
    P("Paragraph"),
    Raw("<hr/>"),
)

Style

Build CSS with Rule, Media, Keyframes, and Frame. Wrap them in Style() to render a <style> block.

Style(
    Rule("body").margin("0").font_family("system-ui, sans-serif"),
    Rule(".container").display("flex").gap("1rem").padding("2rem"),
    Rule(".container > .sidebar").width("250px").flex_shrink("0"),
    Rule(".container > .main").flex("1"),

    Media("max-width: 768px",
        Rule(".container").flex_direction("column"),
        Rule(".container > .sidebar").width("100%"),
    ),

    Keyframes("fadeIn",
        Frame("from").opacity("0").transform("translateY(-10px)"),
        Frame("to").opacity("1").transform("translateY(0)"),
    ),

    Rule(".card").animation("fadeIn 0.3s ease-out"),
)

CSS property methods are generated from W3C specs — every standard property is available with autocompletion. Use .prop("custom-property", "value") for anything not covered.

Inline styles work too:

Div("styled").style(InlineStyle().color("red").font_weight("bold"))

Script

Build JavaScript with On event handlers and RawJs. Wrap them in Script() to render a <script> block.

Script(
    On.click("#increment", """
        let count = document.getElementById('count');
        count.textContent = parseInt(count.textContent) + 1;
    """),

    On.document_ready("console.log('page loaded')"),

    On.submit("#my-form", """
        event.preventDefault();
        alert('submitted!');
    """),

    RawJs("function greet(name) { alert('Hello, ' + name); }"),
)

Available event helpers: On.click, On.submit, On.change, On.input, On.keydown, On.keyup, On.mouseover, On.mouseout, On.focus, On.blur, On.document_ready, and On.event for custom events.

Custom Components

Any Python object with a __ztml_render__ method can be used as a renderable component. The method should return a ztml element.

class Card:
    def __init__(self, title, body):
        self.title = title
        self.body = body

    def __ztml_render__(self):
        return Div(
            H2(self.title),
            P(self.body),
        ).cls("card")

# Use directly in render()
print(render(Card("Hello", "World")))

# Or nest inside other elements
page = Div(
    Card("First", "Some content"),
    Card("Second", "More content"),
).cls("cards")

Jupyter & Jinja2 Compatibility

All built-in ztml elements implement _repr_html_() (for Jupyter notebook display) and __html__() (for Jinja2/MarkupSafe auto-escaping). Evaluating an element at the end of a Jupyter cell will render it as HTML automatically.

For custom components, add these methods using render():

class Card:
    def __init__(self, title, body):
        self.title = title
        self.body = body

    def __ztml_render__(self):
        return Div(H2(self.title), P(self.body)).cls("card")

    def __html__(self):
        return render(self)

    def _repr_html_(self):
        return render(self)

Putting It Together

A complete page with HTML, CSS, and JS:

from ztml import *

def page():
    return Html(
        Head(
            Meta().charset("utf-8"),
            Title("Counter"),
            Style(
                Rule("body").font_family("system-ui").display("flex")
                    .justify_content("center").padding("4rem"),
                Rule("button").padding("0.5rem 1rem").font_size("1.2rem")
                    .cursor("pointer").border_radius("4px"),
                Rule("#count").font_size("3rem").margin("1rem 0"),
            ),
        ),
        Body(
            H1("Counter"),
            P("0").id("count"),
            Button("Increment").id("increment"),
            Script(
                On.click("#increment", """
                    let el = document.getElementById('count');
                    el.textContent = parseInt(el.textContent) + 1;
                """),
            ),
        ),
    )

print(render(page()))

Server

ztml includes a built-in server for HTMX-powered apps, built on Starlette and Uvicorn.

from ztml import *
from ztml.scripts import HTMX
from ztml.server import rt, serve

@rt('/')
def get():
    return Html(
        Head(Title("Counter"), HTMX),
        Body(
            H1("Counter"),
            P("0").id("count"),
            Button("Increment").hx_post("/increment").hx_target("#count"),
        ),
    )

count = 0

@rt('/increment')
def post():
    global count
    count += 1
    return P(str(count)).id("count")

serve()  # localhost:5001

Key features:

  • Method inference — HTTP method inferred from function name (get, post, put, delete, etc.)
  • Path parameters@rt('/greet/{name}') extracts name as a function argument
  • Request access — add request to access the Starlette Request object
  • Element rendering — return ztml elements, automatically rendered to HTML

Form Data & File Uploads

Name a parameter form_data or files and it's automatically parsed:

@rt('/submit', methods=['POST'])
async def submit(form_data):
    name = form_data['name']
    return Div(f"Hello, {name}")

Sessions

Pass session_secret to enable cookie-backed sessions. Add session to any handler signature:

from ztml.server import ZTMLApp, serve

app = ZTMLApp(session_secret="your-secret-key")

@app.route('/login', methods=['POST'])
def login(session, form_data):
    session['user'] = form_data['username']
    return Div("Logged in")

@app.route('/profile')
def profile(session):
    return Div(f"Hello, {session.get('user', 'guest')}")

serve(target=app)

For raw cookies (outside of sessions), use Starlette's built-in response.set_cookie() and request.cookies.get().

Before Hooks

Run checks before a route handler executes. Return a Response to short-circuit:

from starlette.responses import RedirectResponse

def require_auth(session):
    if not session.get('user'):
        return RedirectResponse('/login', status_code=303)

@app.route('/dashboard', before=[require_auth])
def dashboard(session):
    return Div(f"Welcome, {session['user']}")

Live Reload

Set dev=True to enable uvicorn file-watching and automatic browser refresh on save:

app = ZTMLApp(dev=True)
# serve() automatically passes reload=True to uvicorn in dev mode

WebSockets & SSE

from ztml.server import ZTMLApp, EventStream

app = ZTMLApp()

@app.ws('/echo')
async def echo(websocket):
    await websocket.accept()
    data = await websocket.receive_text()
    await websocket.send_text(f"echo: {data}")
    await websocket.close()

@app.route('/stream')
async def get():
    async def updates():
        yield Div("first update")
        yield Div("second update")
    return EventStream(updates()).response()

Building from Source

Prerequisites: Rust toolchain, Python 3.12+, uv.

# Install dependencies and build the Rust extension
uv sync

# For iterative development (faster rebuilds)
uv run maturin develop

# Generate .pyi type stubs for autocompletion
cargo run --bin gen_stubs --no-default-features

To build a distributable wheel:

maturin build --release
# Output in target/wheels/

Examples

# Generate a static HTML page to stdout 
uv run examples/static_page.py > page.html # (open page.html in your browser!)

# HTMX counter app (localhost:5001)
uv run examples/counter_server.py

# Custom components demo
uv run examples/components.py > components.html

# HTMX todo app (localhost:5001)
uv run examples/todo_server.py

# Auth demo with sessions & before hooks (localhost:5001)
uv run examples/auth_app.py

# WebSocket chat room (localhost:5001)
uv run examples/ws_chat.py

# SSE live clock (localhost:5001)
uv run examples/sse_clock.py

Benchmarks

Compared against FastHTML building and rendering nested HTML element trees:

Scenario         Library      Elements   Build (ms)   Render (ms)   Total (ms)
---------------------------------------------------------------------------
10x50            ztml             1040         1.44          0.09         1.54
10x50            fasthtml         1040        14.72          2.62        17.35
                             speedup: build 10.2x, render 28.5x, total 11.3x

50x100           ztml            10200        14.65          0.90        15.55
50x100           fasthtml        10200       151.36         26.12       177.61
                             speedup: build 10.3x, render 28.9x, total 11.4x

100x200          ztml            40400        58.04          3.63        61.69
100x200          fasthtml        40400       710.79        106.00       816.57
                             speedup: build 12.2x, render 29.2x, total 13.2x

^ M3 Pro MacBook Pro

Run the benchmark yourself:

uv pip install python-fasthtml
uv run benchmarks/bench.py

Running Tests

uv run python -m pytest

# Rust unit tests
cargo test -p ztml-core

How codegen works

build.rs reads HTML element definitions from webtags and CSS property specs from w3c/webref, stored in specs/. From these it generates:

  • Element constructors — one Python function per HTML tag
  • CSS property methods — on Rule, InlineStyle, and Frame
  • Enum classes — for CSS keyword values and HTML attribute values

Releasing

CI runs on every push to main and on tags matching v*.

Regular push (tests only):

git push

Publishing a new version (build + publish to PyPI):

  1. Bump the version in crates/ztml-core/Cargo.toml and crates/ztml-python/Cargo.toml
  2. Commit, tag, and push:
git add -A && git commit -m "bump version to 0.x.y"
git tag v0.x.y
git push && git push origin v0.x.y

The v* tag triggers the full build matrix (Linux, macOS, Windows) and publishes wheels to PyPI via trusted publishing.

License

MIT

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

ztml-0.2.3.tar.gz (62.1 kB view details)

Uploaded Source

Built Distributions

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

ztml-0.2.3-cp314-cp314-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.14Windows x86-64

ztml-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

ztml-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

ztml-0.2.3-cp314-cp314-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

ztml-0.2.3-cp314-cp314-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

ztml-0.2.3-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

ztml-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

ztml-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

ztml-0.2.3-cp313-cp313-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ztml-0.2.3-cp313-cp313-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

ztml-0.2.3-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

ztml-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

ztml-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

ztml-0.2.3-cp312-cp312-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ztml-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

File details

Details for the file ztml-0.2.3.tar.gz.

File metadata

  • Download URL: ztml-0.2.3.tar.gz
  • Upload date:
  • Size: 62.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ztml-0.2.3.tar.gz
Algorithm Hash digest
SHA256 68ea79b765153267f053971435232b58eef708a2e1f9f98c7ff86cf7eeea5d98
MD5 910c2bb7f60c08d23787002b84ad8fb4
BLAKE2b-256 b8e0d3be60f34e302aad3354f1f8f3c68dc1ae07a61886b4c87160a10726cd2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3.tar.gz:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: ztml-0.2.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ztml-0.2.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 73c8c4cfde177928ffbc9d70e03c2b7015ac440ea1890bdda061848c26d0ba14
MD5 aa4755a4597165298e915f9e0f587224
BLAKE2b-256 5fc2007604fdf75504c449806d64559cba0d25121c9e87c8c2271a198f2432b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp314-cp314-win_amd64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0fd7d2cfd7d8d8b0d32300faf3b73005aa219ad6917e689a09f6bfa7b1201434
MD5 be69b857b108eb1612a447b15fd6f658
BLAKE2b-256 11ad0a17f8805e1ba27a87c08f649bca9daaacec36612b717653564428b66ab7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6bd0f393014f56f3b89da96a1bbf26575330aac28f9527b0bf9cb5f6c0edec06
MD5 4197b4585049ab679226c13de9916155
BLAKE2b-256 d3a8dec98d53cdfe764787a9543a60d8d0eca73b43514029778e6568a827c486

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbf94144dfc908d624ec66a146ace7fd1fe4274f41bdf639fe32b55d4f03ea64
MD5 45243932379c4132597d937a89d9b8fd
BLAKE2b-256 aaf2a7dee833461c358d5de21936c8d96e1363d2f8854876adbaaf39cd7cf8d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ca0b3dfb911afbb6921c87bc8138a84b50fdadfda75420c077c85252c9afe321
MD5 296a64e8a9f4ef0bc0c5a1b5f435f961
BLAKE2b-256 40375bc0125a36cd03739b850aa8b52d6a1da50b0128f76e3daf7aba1ca7edd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ztml-0.2.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ztml-0.2.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 78aa156a096ee8384f18d61dd6efa2bc654e500a3f1549b84f2e0788b7866967
MD5 3c93b1db734a27a7c7386a21c18b4e82
BLAKE2b-256 6b16841e6f9bb3daf8b54769baa2af64d5581374e5d3663aeb95f47c83c648d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp313-cp313-win_amd64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12f5a67392965a0828277bcb7ec4f956a0c16055e33aae81fe0894b90d8253c4
MD5 bfb20ee77dad01c95714dd6cf3ba636d
BLAKE2b-256 45d69097462edf1ffaae058e2c5b7525e5f04f4457a52bc313eef6f75f5d0842

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cf8b1f74adb5fe617493d2936a9ad00f2f38d2ad1ac353d568be14f1640f159c
MD5 4f6164bf898a9843097350aca4b8b38d
BLAKE2b-256 2be43518e198748f7f98a41053da6f15942f7ca1a3dfee1274086aa8b98f69e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e0f1d06bb6264b991ae84268ee30813dc9b4de85e5cd1629251e03a03d27abf6
MD5 1db0f1db97e7f39916eb19b02fcdfffe
BLAKE2b-256 4e46b6085956e1770c201dc61efc9ea413a0176fe503b5591a6b215f7e5c74e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1c035f5ed4d60f6cc963e6cf463dbc4d68c8b86db23abb5c6ba9553eef161471
MD5 327d90db84e0599efcab158f5f7f8966
BLAKE2b-256 b79378a1cd6056122e98cef8faef11c038f0bfc9eb2057f39d189c4ffcaa44b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ztml-0.2.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ztml-0.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 90cd58167110c58792e9810460511dbf69dda0a48ffaa8e0c4efa24c009d9431
MD5 025c582e669f570044f91a282a436a08
BLAKE2b-256 dea101bfc24520d49802f472c9422cfa24e3a96946bd6db68c1945a6db0cb5b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp312-cp312-win_amd64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f7c59ae7f1c9683561394f2e14de5d7e924914291fbef84bda2cb829fe8dc6c9
MD5 8da4c76ea9fffcf04df26a5c992a8157
BLAKE2b-256 155ae8bec03aab09c4918c86d356edfff2ab3356bd55c2052211d17fb5c3558e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 982aa87ea811c5898a6f9de9c33edc51e79e1672405a883a4653919e2dbf8d39
MD5 66cd8821eb7ca11e3c01f33265086c9a
BLAKE2b-256 c9d0147c5a3df973cd0679334e521d0c8cb0b8098b616b1fa8f1b39ab0603ef4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 542cf571ca3c2fe05089e81f35eb9f98d27884bc69d5c4d639672e269f731852
MD5 48c7cc4e2242c9a0a762d503aae81d97
BLAKE2b-256 fc4f950d0958a702e510f48394b763c7a2732d471dbd8c7cd894100a19cbcd3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: ci.yml on bleemesser/ztml

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

File details

Details for the file ztml-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ztml-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e1c1a3d48e97dec7f5504be6ce48da0a71b9856d3ec7e2564c83ad8de80ac1e7
MD5 67308a3db4f21db164db732dd0af7654
BLAKE2b-256 63db1aa3f1c04e2c981321cdab086570a9cb227a7c466b09163d6844a7befb1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ztml-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: ci.yml on bleemesser/ztml

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