Pre-alpha · First usable release planned for late 2026.

Gramlot Rosetta One idea. Five implementations.

Lesson 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.