Builtin Library
README.md
blank_app template
Minimum-viable app — one screen, no layout. Clone this when you have a single panel of UI and no layout shape. The screen is built from the engine's raw, CSS-parity widget tree.
What's in the template
blank_app/
├── README.md
├── blank_app.scene/
│ ├── scene.json ← bare scene metadata (no entities)
│ └── entrypoint.luau ← spawns one UiPanel-bearing entity
└── blank_app_layout.module/
├── init.luau ← mount(ctx) builds one screen and handles clicks
└── README.md ← the module contract and the raw widget model
Run it: layers.load("@builtin::_templates.blank_app.blank_app").
How to extend
- Replace the
buildtree inblank_app_layout.module/init.luauwith your own widget nodes ({ type, props, style, children }). - Give an interactive widget a callback id (e.g.
props.onClick = "blank:inc"), then handle it in theonCallback(id, data)the module returns. - Keep runtime data on
state; on an interaction, mutatestateand callui.updateScreen(name, build())to re-render.
See blank_app_layout.module/README.md for the full mount(ctx) contract and
the raw widget model. The gui toolbox's widgetTypes and widgetProps
tools enumerate the widget surface; @builtin::examples.ui.* are complete screens in the same
model.
For richer layouts, use one of the other single-screen templates:
docked_app/— toolbar + body + statuscanvas_app/— node-graph editorinspector_app/— form with fields and actions