Skip to main content

Weeoui

Weeoui is an immediate-mode UI library for Zig. It is used by the Eggy engine.

You describe the UI every frame from your own state, and each widget call returns what the user did with it. Weeoui keeps no widget objects for you to create, update or destroy:

fn frame(count: *u32, ctx: *ui.Context) !void {
ctx.begin(.card);
ctx.label("Count: {d}", .{count.*});
if (ctx.button("Increment")) count.* += 1;
ctx.end();
}

Features​

  • Components: buttons, inputs, selects, tabs, sliders, dialogs, tables, toasts, charts, images and a colour picker. Everything uses the warm "yolk" theme, in light or dark.
  • Layout: flex rows and columns, grids, wrapping, right-to-left text and scroll areas.
  • Editor tooling: dockable panels, custom title bars, and DevTools that inspect the UI while it runs.
  • Desktop, Android and the web: Vulkan on desktop and Android, WebGPU in the browser. Try the live demo.
  • Accessibility: every control is exposed to screen readers through AccessKit. Keyboard focus, focus rings and pointer cursors work out of the box.

Modules​

addApp gives an app all three. Engines that embed Weeoui enable the backends they want on the dependency.

ModuleBuild flagPurpose
weeouialwaysContext, widgets, layout, fonts and images. Has no platform dependencies.
weeoui_sdl3.sdl3 = trueSDL3 input, windowing, and run, which handles the whole frame loop for you.
weeoui_vitellus.vitellus = trueGPU rendering through Vitellus.

Where to go next​