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.server import rt, serve
@rt('/')
def get():
return Html(
Head(Title("Counter")),
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.) - Auto HTMX — full-page responses get the HTMX script auto-injected
- Path parameters —
@rt('/greet/{name}')extractsnameas a function argument - Request access — add
requestto access the StarletteRequestobject - 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, andFrame - 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):
- Bump the version in
crates/ztml-core/Cargo.tomlandcrates/ztml-python/Cargo.toml - 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ztml-0.2.1-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: ztml-0.2.1-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae058b98f17f32cf11949be393f50492d8c189bad9b0329022b9c3f6bdc3cc93
|
|
| MD5 |
4f930866587f0811881d0b217d969331
|
|
| BLAKE2b-256 |
bf1f9c0c019fe3046d14ae4c4068cfc8c64d589dd43890bc53af4bd5bc694412
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp314-cp314-win_amd64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp314-cp314-win_amd64.whl -
Subject digest:
ae058b98f17f32cf11949be393f50492d8c189bad9b0329022b9c3f6bdc3cc93 - Sigstore transparency entry: 1113844470
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ztml-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f335af7211aeb190b33006d0d7cc92a8e4cd47578ae7707794b6c778b5d5db12
|
|
| MD5 |
abe06b80cf5bcd0231445b15985ffff8
|
|
| BLAKE2b-256 |
2ab03ab6ef416c97d00bd6b5d84175bbbdfa0489ef2a6ede6fc8c3ddbd507780
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
f335af7211aeb190b33006d0d7cc92a8e4cd47578ae7707794b6c778b5d5db12 - Sigstore transparency entry: 1113844446
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ztml-0.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe2aaadda41ba21373742302df59a00895b7fdce8dac7b78a6ca680afd7ae7fe
|
|
| MD5 |
ce257a0a999b976869867072311d42b2
|
|
| BLAKE2b-256 |
d324a4af2e3fc17c9d45082ae0ad82a151870202e530320b65b274eb0d9b06a2
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
fe2aaadda41ba21373742302df59a00895b7fdce8dac7b78a6ca680afd7ae7fe - Sigstore transparency entry: 1113844443
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: ztml-0.2.1-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad89740c2ba08d73b7d492f2f04f5bad3af6a191767b50f34e62b849699ff9a4
|
|
| MD5 |
d63c8891d76b1540f9d3d6749e588363
|
|
| BLAKE2b-256 |
da85135d9493457a1274268dc7465f503c0a9329fff997e91114a8cd87794f4b
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp314-cp314-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
ad89740c2ba08d73b7d492f2f04f5bad3af6a191767b50f34e62b849699ff9a4 - Sigstore transparency entry: 1113844464
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ztml-0.2.1-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.14, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
714f5ccf1fa8c6ac578f5fa45aa82730c41fb9816c31929a5827c20739d19dd9
|
|
| MD5 |
758a33b9c2b0cbce4b6073c2e83f3557
|
|
| BLAKE2b-256 |
98c9bd0ad458730bcd0d955259c95424366885d6732f6c015eb0702b3535ab38
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp314-cp314-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp314-cp314-macosx_10_12_x86_64.whl -
Subject digest:
714f5ccf1fa8c6ac578f5fa45aa82730c41fb9816c31929a5827c20739d19dd9 - Sigstore transparency entry: 1113844457
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: ztml-0.2.1-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.2 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dee9e3ddb2be57e03dfea3a78e1c6163acb4a83225d39b6a3cb31f1504550b9
|
|
| MD5 |
a71d53bfddf84e92f67d1b1be9c8f6b1
|
|
| BLAKE2b-256 |
fa2c118fde201cafe5a6a35b98436979478d4c5b4b01a52d4a348c200f326bae
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp313-cp313-win_amd64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp313-cp313-win_amd64.whl -
Subject digest:
9dee9e3ddb2be57e03dfea3a78e1c6163acb4a83225d39b6a3cb31f1504550b9 - Sigstore transparency entry: 1113844433
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ztml-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50333e9123c1b2f59c80353adbba663084e18af32aeb880b372ed54c39ae2e90
|
|
| MD5 |
c28bee0ff8d848b8e0aa140aec34ebe0
|
|
| BLAKE2b-256 |
03e6222fa01ca5dda06db23a433e9b607f302e90a0b41946749e642de7f5933a
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
50333e9123c1b2f59c80353adbba663084e18af32aeb880b372ed54c39ae2e90 - Sigstore transparency entry: 1113844462
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ztml-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8acb296ae4db63f8d92fd79547f728120f4c21a6b31cae926ffbf73f1883b1b6
|
|
| MD5 |
da6d5daf0b5140ee98d638fb0ebe9b99
|
|
| BLAKE2b-256 |
0895c31f5bdc67386a6f64219e285b0d0a4028c98b8ef930a6cd2387f7936a0a
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
8acb296ae4db63f8d92fd79547f728120f4c21a6b31cae926ffbf73f1883b1b6 - Sigstore transparency entry: 1113844439
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: ztml-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed065db0210b143c6e1e2cbc0747ec46311085e05151d4003ee42b4d88d3cee1
|
|
| MD5 |
27210b1a63ad960c286374cc3f17cde3
|
|
| BLAKE2b-256 |
598a636c632e5a963c63c71064b277a5060de8e4a91e5ea605680c2b4f1fca5c
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
ed065db0210b143c6e1e2cbc0747ec46311085e05151d4003ee42b4d88d3cee1 - Sigstore transparency entry: 1113844460
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ztml-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b5e0e9bf297535c72f467e466760a270c16fa7f54f7d41299240d31c36e436d
|
|
| MD5 |
250bcb50a985b9f3e52053b9d7c16e81
|
|
| BLAKE2b-256 |
f15876d8437d757f6b7b9820d5e156e83dd2ef94f75d56062aba5b20b45703a3
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl -
Subject digest:
9b5e0e9bf297535c72f467e466760a270c16fa7f54f7d41299240d31c36e436d - Sigstore transparency entry: 1113844451
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: ztml-0.2.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.2 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f5d41fdf835affdc550ec9695b66b75469f15e8ebe715ae6a1603fe408e2251
|
|
| MD5 |
bdc4d6c9977c713eb633a4a76c83e096
|
|
| BLAKE2b-256 |
e4b8db1d95a9f117d679c2fee97537be5fb5c0453779c6ac3b60eb86785517ea
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp312-cp312-win_amd64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp312-cp312-win_amd64.whl -
Subject digest:
3f5d41fdf835affdc550ec9695b66b75469f15e8ebe715ae6a1603fe408e2251 - Sigstore transparency entry: 1113844469
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ztml-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c43278883aede62acc7328e79d8bf919f5714860f0ea6abccb910c8669b9567
|
|
| MD5 |
27bdc6c49493dc975b7168348ff49704
|
|
| BLAKE2b-256 |
83060f218e2ff5f152bf8d946f830ee998a436d293dc5bbfd4ff93af1ae3a80a
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
5c43278883aede62acc7328e79d8bf919f5714860f0ea6abccb910c8669b9567 - Sigstore transparency entry: 1113844448
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ztml-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c53a83a696480a74d1538cb7fd784740f458477e30ca119469b79961abda9b7
|
|
| MD5 |
33aa54dbb45cc9d9fb666748e9aec760
|
|
| BLAKE2b-256 |
3d30e85c1f5efec035ba5a00e47b3833ca0cf40790d6462be84e55429d3210d8
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
8c53a83a696480a74d1538cb7fd784740f458477e30ca119469b79961abda9b7 - Sigstore transparency entry: 1113844455
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: ztml-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3842a663a98a283c0612de5657acc81a5e30906fdf3b4f6febd85a72c630597
|
|
| MD5 |
1bd97c0c649758fb8f8ae0aae06b236d
|
|
| BLAKE2b-256 |
94d7deccfa8589fea17782741ef5f8677fc269760ccd136ead2ef93c8e281b38
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
c3842a663a98a283c0612de5657acc81a5e30906fdf3b4f6febd85a72c630597 - Sigstore transparency entry: 1113844468
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ztml-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ztml-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6dc39e4784a7a161a0db2292130ea5b2a7b7e942b12f130f4cef5d22c500814b
|
|
| MD5 |
0ae1d669c678ff0c58cf7a49562c0e5b
|
|
| BLAKE2b-256 |
8bada7fd9f8a8647f6b7dade9ab4ccdca31bb891e58a4b657c15b5595214d7ad
|
Provenance
The following attestation bundles were made for ztml-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl:
Publisher:
ci.yml on bleemesser/ztml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ztml-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
6dc39e4784a7a161a0db2292130ea5b2a7b7e942b12f130f4cef5d22c500814b - Sigstore transparency entry: 1113844466
- Sigstore integration time:
-
Permalink:
bleemesser/ztml@0faeed67bb15067b200cdf159a650be672dd4211 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bleemesser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0faeed67bb15067b200cdf159a650be672dd4211 -
Trigger Event:
push
-
Statement type: