Modular Python web framework with hot-mount dynamic modules and stateful, WebSocket-driven LiveComponents.
What hotframe is
hotframe is a Python web framework that combines FastAPI, SQLAlchemy 2.0, and Jinja2 under Django-like ergonomics. It adds two pieces:
- A hot-mount module engine — install, activate, deactivate, and uninstall plugins at runtime without restarting the process.
LiveComponent— stateful, server-rendered components driven by a single WebSocket per page. Server holds the state; the client streams events and applies HTML patches withmorphdom. No client-side framework, no build step.
Install
pip install hotframe
Quickstart
hf startproject myapp
cd myapp
hf runserver
INFO hotframe.bootstrap Application started in 142ms
INFO uvicorn.error Uvicorn running on http://127.0.0.1:8000
A LiveComponent in 30 seconds
# modules/todo/components/todo_list/component.py
from hotframe.live import LiveComponent, event
from modules.todo.models import Todo
class TodoList(LiveComponent):
user_id: int # prop
items: list = [] # state
new_text: str = ""
async def on_mount(self) -> None:
self.items = await Todo.where(user_id=self.user_id).all()
@event("toggle")
async def toggle(self, todo_id: str) -> None:
t = next(t for t in self.items if str(t.id) == todo_id)
t.done = not t.done
await t.save()
@event("add")
async def add(self) -> None:
if not self.new_text.strip():
return
await Todo.create(user_id=self.user_id, text=self.new_text)
self.items = await Todo.where(user_id=self.user_id).all()
self.new_text = ""
{# modules/todo/components/todo_list/template.html #}
<ul>
{% for todo in items %}
<li>
<input type="checkbox" {% if todo.done %}checked{% endif %}
data-on:click="toggle:{{ todo.id }}">
{{ todo.text }}
</li>
{% endfor %}
</ul>
<form data-on:submit="add">
<input data-bind="new_text">
<button type="submit">Add</button>
</form>
{# any page template #}
{% extends "shared/base.html" %}
{% block body %}
{% live "todo_list" user_id=user.id %}
{% endblock %}
That's it. Click the checkbox — the server toggles the todo, sends an HTML patch back, the DOM updates without a page reload, and the dev wrote zero JavaScript.
Documentation
Full docs, guides and live examples at hotframe.dev.
License
Apache License 2.0 — see LICENSE.
Metadata
Release files for hotframe 1.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hotframe-1.3.1.tar.gz | 2.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hotframe-1.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.3 MB
Release files / hotframe-1.3.1.tar.gz
| Download URL | hotframe-1.3.1.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f911cb6dfad5ca09ca5a5ca0b59a9d695a651816a83e5762353daa3fe890894
|
|
BLAKE2b-256 checksum How to use checksums |
0ca09bf85407620b39ea80070d3819c7cbc594a8c4c3b756f6258299e63f8332
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logRelease files / hotframe-1.3.1-py3-none-any.whl
| Download URL | hotframe-1.3.1-py3-none-any.whl |
|---|---|
| Size | 302.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fad06f4a0921d16a68d6a52666f047025e57ef6dc314e882c7aca1a62d224ea8
|
|
BLAKE2b-256 checksum How to use checksums |
c85aa50a9bbba7b5dfc1c51df2e7bb423377c1b7149461c9e6e32d8c1f1420a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency log