Surface Description (use this for new code)
- Bounded
UiState(capacities)owns frame arrays andDefaultCommandList UiFramehandles layout, hit registration, overlay orderingUniformListfor scrollable fixed-row lists without heap allocationstate.hitTest(point)returns topmost hit region
Drawing primitives (30+ helpers in drawing.zig)
button,inputBox,toggle,checkbox,dropdown,tabBar,scrollbar,progressBar,colorSwatch, and more
Widget registries (bar and daemon layouts)
Bar-style apps store widgets as struct fields and route layout, input, damage, and draw through comptime registries:FieldRegistry(Owner, specs): lookup and dispatch for optional widget fieldsNamedWidgetList(Owner, spec): same for bounded dynamic lists likebutton_menu
Widget shell only tracks area and pointer motion.
Use Surface Description for new app UI. Reach for registries when you need config-driven widget rows like otter-bar.
VTable widgets (bar compatibility path)
Existing bar widgets still use a generatedWidget vtable (draw, deinit, setArea, getWidth). New apps should use Surface Description instead.
Other modules
input_buffer.zig: text input with cursor and selectionicon_cache.zig: cached XDG icon renderingscroll_state.zig: vertical scroll trackingoverlay_chrome.zig: loupe panel and crosshair chrome for pixel-compositing overlays

