A lightweight framework for the kind of internal dashboards, data explorers, and parameter tools you need at work or at home. Write Python, get a desktop window — no full-page re-execution on refresh, no nesting hell, no server.
The right tool for a simple lab or personal project — and deliberately nothing more.
This is the entire app. Layout is written top-to-bottom using with blocks — indentation matches the finished UI. gui.state holds the value; the buttons mutate it; the text re-reads it.
import guile as gui
count = gui.state(0)
@gui.app("Counter", width=400, height=300)
def ui():
with gui.col(align="center", justify="center", style="height:100vh"):
with gui.card(gap=14):
gui.title("Counter")
with gui.row(gap=16):
gui.button("−", variant="secondary",
on_click=lambda: count.update(lambda x: x - 1))
gui.text(count, size="2xl", bold=True)
gui.button("+",
on_click=lambda: count.update(lambda x: x + 1))