---
id: fn-ui_build
name: ui_build
category: builtins
kind: builtin
tokens: ui_build
sig: ui_build()
tip: Build the declared UI tree so it can be opened and rendered.
order: 50
---
Constructs the retained-UI tree you declared in a ui block, laying out its panels, labels, and buttons and loading any skins or images they reference. Call it once during a Start-phase handler, after loading any fonts the UI needs, and before you open a screen with ui_open or draw it with ui_render. Because the UI is declared as data and built in one step, the game code only has to build it, open it, and read clicks. It takes no arguments.
```ludic
program TitleMenu {
state TitleMenuState {
title_font: int = 0
}
ui MainMenu {
panel id: Root w: 240 pad: 16 gap: 6 bg: 0x1a1a2c align: center {
label text: "CHRONORIFT" font: TitleMenuState.title_font size: 24 fg: 0xffe060 align: center
button id: NewGame text: "New Game" font: TitleMenuState.title_font size: 16 w: 200
button id: Quit text: "Quit" font: TitleMenuState.title_font size: 16 w: 200
}
}
handler Boot(title_menu_st: mut TitleMenuState) phase Start {
title_menu_st.title_font = Font.load("/System/Library/Fonts/Supplemental/Arial.ttf")
ui_build()
Ui.open(UI_MainMenu)
}
handler Navigate phase Update {
Ui.tick(Input.key())
if Ui.clicked(UI_Quit) { quit() }
}
handler DrawWorld phase Render {
Screen.clear(Color.MidnightBlue)
Ui.render()
Screen.show()
}
}
```