Step-by-step guides covering everything from your first window to advanced plugin systems and rich UI components. Start with the beginner path or jump to the topic you need.
Set up the Malena framework, configure CMake, and verify your build environment.
Build a window with a colored rectangle that responds to clicks and hover events.
Declare textures, fonts, and custom flags. Load assets through the resource system.
Load fonts, textures, sounds, and custom resource types through the resource manager.
Subscribe to clicks, hovers, key presses, and custom events using the event bus.
Send and receive typed, enum-keyed messages between components, plugins, and app code — without direct references.
Toggle runtime boolean flags on any component and react to flag changes.
Model component lifecycle with typed state machines declared in your manifest.
When to use a flag versus a state, and how they compose with the trait system.
Organize your app into screens, push and pop scenes, and share state across them.
Broadcast typed signals across components without direct coupling.
RectangleButton, CircleButton, and ConvexButton — shape backgrounds with centered labels and the full trait set.
ButtonToggle, PillToggle, and SegmentToggle with animated state transitions.
Checkboxes, radio buttons, checkbox/radio groups, and the dropdown Select.
TabbedPanel, SplitPanel, and ScrollPane — containers that own and manage their children.
List, MenuBar, Toolbar, and SideMenu — the building blocks for app-level navigation.
ml::Text for display, TextInput for single-line editing, and TextArea for multi-line editing.
Smooth animated scrolling, navigation arrows, and GLSL shader effects on a collection of components.
Arrange components in rows and columns with flexible spacing and alignment.
Anchor and align components within a container or relative to the window.
Create a plugin with PluginWith, export it with REGISTER_PLUGIN, and load it at runtime.
Build a console that lazy-loads and hot-reloads plugins at runtime.
Define your own event trait and mix it into any component via the trait composition system.
Define a complete visual identity with color, typography, and spacing tokens. Switch themes globally at runtime with one call.
Build your own drawable components from scratch — when to use Component<> vs ComponentWith<Manifest> and how the Resources alias is injected automatically.
Package reusable behavior into a trait — from a simple helper to a full event-receiving trait with dispatcher and ML_EXPORT registration.