Pre-alpha · First usable release planned for late 2026.
Gramlot RosettaLesson 05 · First steps
Repeated contacts
An outer formlet arranges six contact boxes created by a loop. Each box owns a separate Data branch: c1, c2, through c6. The relative field bindings stay identical, so editing one contact leaves the others unchanged.
Example · NiceGUI
Code
How it works · NiceGUI
A Python loop creates six sections with separate dictionaries. Each callback captures its own contact through a default argument, so later edits update the intended dictionary rather than the final loop item. CSS Grid arranges the sections.
How it compares
Both use a Python loop. In this NiceGUI recipe, callbacks must capture the correct dictionary for each iteration; Gramlot’s helper declares the card’s datapath and its fields inherit it. That removes per-field callback capture here. A shared NiceGUI card function could centralize the same wiring, but the capture and update logic would remain application code. Gramlot supplies that binding behavior directly; its helper only composes the card.