Declarative SSR Framework
Project description
🍃 HTeaLeaf
HTeaLeaf is a declarative web framework for Python — build dynamic, reactive web apps using pure Python, without writing templates or frontend JavaScript manually.
⚠️ Beta — HTeaLeaf is usable and the core API is stable, but you may encounter performance issues or unexpected bugs. Not recommended for production yet. Feedback and bug reports are very welcome.
✨ Overview
HTeaLeaf merges ideas from modern frontend frameworks (React, Svelte, SolidJS) with the simplicity of Python web servers.
You declare HTML directly in Python, manage reactive state via Store objects,
and HTeaLeaf takes care of keeping everything in sync automatically.
🚀 Quick Example
from HTeaLeaf.Server.WSGI import WSGI
from HTeaLeaf.State.Store import Store, SuperStore
from HTeaLeaf.Elements import div, h3, button
app = WSGI()
SuperStore(app)
counter = Store({"count": 0})
@app.route("/")
def home():
return div(
button("-").attr(onclick=counter.js.update("count", -1)),
h3(counter.react("count")),
button("+").attr(onclick=counter.js.update("count", 1)),
)
application = app.wsgi_app
if __name__ == "__main__":
from wsgiref.simple_server import make_server
with make_server("", 8000, application) as server:
print("Serving at http://127.0.0.1:8000")
server.serve_forever()
Visit http://127.0.0.1:8000 a fully reactive counter, zero JavaScript written by hand.
You can also write client-side logic directly in Python using the @js decorator,
and HTeaLeaf will compile it to JavaScript automatically:
from HTeaLeaf.JS import js
@js
def greet(event):
console.log("hello from Python-compiled JS!")
button("Click me").attr(onclick=greet)
✨ Key Features
- Declarative HTML: build DOM trees with a fluent Python DSL, no templates needed
- Reactive server state:
Storeobjects stay in sync with the UI automatically - Local route state:
use_state()for state scoped to a single route - Python → JS transpilation: write client-side logic in Python with
@js; HTeaLeaf compiles it - Session support: per-user state with
AuthStoreand cookies
📦 Installation
pip install htealeaf
🗺️ Roadmap
- Declarative HTML DSL
- Path-based routing
- Server-side reactive state (
Store,AuthStore) - Python → JavaScript transpiler
- Local route state (
use_state()) - Session support
- Client-side-only state (no server round-trip)
- Render optimisation
- Persistent Store backends (Redis, SQL, …)
- Async first architecture
- CLI
- Build system to static assets
📖 Documentation
Full documentation is available in the Wiki.
🤝 Ecosystem
HTeaLeaf is part of a tea-themed open-source ecosystem by @Az107:
| Project | Language | Description |
|---|---|---|
| HTeaPot | Rust | HTTP server — plays on HTTP 418 "I'm a teapot" |
| HTeaLeaf | Python | This framework — SSR with reactive state and JS transpilation |
| Cafetera | Rust | API mocker for testing, built on top of HTeaPot |
License
MIT License © 2026 — HTeaLeaf Framework. Made with 🍃 and Python.
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
Built Distribution
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 htealeaf-0.3.2.tar.gz.
File metadata
- Download URL: htealeaf-0.3.2.tar.gz
- Upload date:
- Size: 21.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
154a2874a4971aac8533b921e4ec1b685e2ba4349bbb6128fc8360fc6c3351ba
|
|
| MD5 |
02b6935c957ffd495b39297047b31c32
|
|
| BLAKE2b-256 |
98924c853e9b7d0d676657972a1dff9a9522d78600c500e44df7787ad30377f4
|
File details
Details for the file htealeaf-0.3.2-py3-none-any.whl.
File metadata
- Download URL: htealeaf-0.3.2-py3-none-any.whl
- Upload date:
- Size: 25.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
caa5b18536afa248c58c774253de45ae1c3370c7b10cca929169290d58a225e8
|
|
| MD5 |
4b56074f0a547a5cc1e0aeb79151b772
|
|
| BLAKE2b-256 |
404b1ea5e8f747c024de1daa9bbd9134081d0313ef66955e2176ded7e6efb78a
|