1.2.8 — Layout-first configuration & Wind UI polish
What changed
Framework-managed settings pages
Both Settings tabs moved from src/ui/pages/ into rb/pulse/ui/ and are now injected automatically by the compiler. You no longer copy or maintain a settings page — the framework owns it.
| File | Adapter | Description |
|---|---|---|
rb/pulse/ui/windui_settings.lua | Wind UI | Was src/ui/pages/7_Settings_windui.lua |
rb/pulse/ui/linoria_settings.lua | Linoria | Was src/ui/pages/7_Settings.lua |
Files prefixed windui_* are only injected for ui_library = "windui" builds; linoria_* only for Linoria builds.
Expanded layout {} options
layout.rblua is now the single place to configure everything about your window:
layout {
title = "My Hub",
author = "devname", -- subtitle shown under the title (Wind UI)
toggle_key = "RightControl", -- Enum.KeyCode name
size = { 950, 600 },
ui_library = "windui", -- "linoria" | "windui"
theme = "Indigo", -- default Wind UI theme (see full list below)
icon = "swords", -- Lucide icon, rbxassetid://, or URL (empty = Pulse logo)
folder = "MyHub", -- executor save folder for config / theme files
notify_title = "My Hub", -- header text on Wind UI toast notifications
transparency = 0.8, -- window background transparency (0 = opaque, 1 = invisible)
acrylic = false, -- blur effect behind window (executor must support)
themes = {
-- custom Wind UI themes; appear in Settings theme dropdown automatically
-- { name = "Brand", accent = "#7c3aed", background = "#0e0c1a",
-- outline = "#1e1b4b", text = "#e8e3ff", placeholder = "#6d6d8a",
-- button = "#1e1b4b", icon = "#a78bfa" },
},
compat_exclude = { "player/UNC.rblua" },
}
The transpiler emits a _PULSE_* local for every field (_PULSE_FOLDER, _PULSE_NOTIFY_TITLE, _PULSE_TOGGLE_KEY, _PULSE_DEFAULT_THEME, _PULSE_ICON, _PULSE_AUTHOR, _PULSE_TRANSPARENCY, _PULSE_ACRYLIC). These are upvalues available to all page files and framework settings pages.
Custom Wind UI themes
Define custom themes inline in layout.rblua — no adapter code to touch:
themes = {
{ name = "Brand", accent = "#7c3aed", background = "#0e0c1a",
outline = "#1e1b4b", text = "#e8e3ff", placeholder = "#6d6d8a",
button = "#1e1b4b", icon = "#a78bfa" },
}
The compiler emits _UIAdapter:RegisterTheme({...}) calls before CreateWindow. Custom themes appear in the Settings theme dropdown automatically (live via WindUI:GetThemes()).
Full built-in Wind UI theme list
The Settings theme dropdown is now populated dynamically from WindUI:GetThemes() — custom and built-in themes both appear without a hardcoded list. All 16 built-in themes are supported:
Amber · CottonCandy · Crimson · Dark · Emerald · Indigo · Light · Mellowsi · Midnight · MonokaiPro · Plant · Rainbow · Red · Rose · Sky · Violet
Responsive two-column layout
The Wind UI adapter now reads workspace.CurrentCamera.ViewportSize.X to choose the layout:
- ≥ 960 px →
HStack({ AutoSpace = true })with twoVStackcolumns (side-by-side groupboxes) - < 960 px or mobile → single
VStackcolumn (groupboxes stacked vertically)
Previously this used TouchEnabled-only detection, which missed narrow desktop windows and tablets with keyboards.
Decimal slider auto-detection
addSlider in the Wind UI adapter now inspects min, max, and the current signal value for non-integer values. If any of them is a float, step defaults to 0.01 automatically. Explicit rounding still overrides.
paragraph in page {} files
page "Home" {
groupbox left "Info" {
paragraph "Title text" "Body description here."
}
}
Wind UI renders a native Paragraph element with separate title and description lines. Linoria falls back to two consecutive labels. Both adapters support _UIAdapter:addParagraph(gb, title, desc) for direct calls.
Groupbox icons in page {} files and direct calls
page "Combat" {
groupbox left "Targeting" icon="crosshair" {
mount Aimbot
}
groupbox right "ESP" icon="eye" { ... }
}
The optional icon="..." attribute accepts any Lucide icon name. Wind UI passes it to the Section constructor. Linoria ignores it gracefully (no error).
_GetGroupbox(tab, side, title, icon) accepts the icon as an optional 4th argument for programmatic use in page .lua files.
Impact on existing projects
Settings pages — delete src/ui/pages/7_Settings.lua and 7_Settings_windui.lua if you have them. The framework now provides equivalent files. Move any project-specific additions to the framework files in rb/pulse/ui/.
layout.rblua — all new fields are optional with sensible defaults. No breaking changes.
Page files — paragraph and groupbox icon are additive new syntax. Existing pages compile unchanged.
Wind UI notifications — _PulseNotify now uses notify_title from layout.rblua. Set notify_title = "My Hub" to control the toast header.
Folder names — the Wind UI adapter previously hardcoded "AOT_R_Hub" / "AOTR_Hub". These now come from folder in layout.rblua. If you have saved configs in the old folder path, rename the executor folder or update folder to match.