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.
Place things relative to the window or each other — and have it survive a resize.
Move, fade and drive any interpolatable property — no update loop, nothing to own.
Why an app that runs from your build folder breaks once installed, and the fix.
Capture a display, stream it, and show someone else's — four separable pieces.
Modals, toasts, context menus and info popovers, ordered by how much they demand of the user.
The layered text stack — from a single-line field to a syntax-highlighting code view.
Palettes, gradients, and the difference between previewing a colour and committing to one.
Tables, editable lists, drag-to-reorder, thumbnail grids and data-driven panels.
A scrolling transcript with an input row, and the message struct that travels between machines.
Accordions, toggle groups and the native OS menu bar.
File dialogs, JSON, clipped drawing, shaders and sprite-sheet slicing.
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.