Python in the browser
Frontage
A fine-grained reactive UI framework for Python, running in the browser on its own runtime compiled to WebAssembly. An app is a directory of static files: no server, no build step, no JavaScript toolchain. Signals, memos and effects update the exact text node that changed — the framework, the interpreter and the loader are downloaded once.
uvx frontage build myapp/ --out site/Learn it
The chapters, on the academy — every code block runs in the page you are reading.
Gallery
Sixteen apps, each built with the real command and measured in a cold browser.
Playground
Write Python, press Run, watch it render. Nothing is installed and nothing is sent anywhere.
VS Code extension
Completion and checks inside a template string, the snippets, and the errors the browser runtime would raise — before you run it.
A counter, whole
from frontage import Signal, component, html, mount
@component
def counter():
count = Signal(0)
def inc(ev):
count.update(lambda n: n + 1)
return html(t"""
<button on:click={inc}>clicked {count} times</button>
""")
mount(counter, "#app")Apache 2.0 · the wheels of every release stay at /dist/, because the chapters and their apps pin one by URL.