XLQP Gen1

Window configuration

Complete MakeWindow example and every optional window configuration group used by XLQP Gen1.

Window configuration

Library:MakeWindow() accepts one configuration table. Every group and field is optional, so start with the minimal version or copy the complete configuration and remove what you do not need.

Window and settings previews

Complete XLQP Gen1 window
The complete window with sidebar navigation, top tabs, workspace content, and status bar.
XLQP Gen1 module loader
Ordered module loading and launch verification before the main window opens.
XLQP Gen1 theme presets
Theme presets in the settings window.
XLQP Gen1 theme effects
Theme effect controls.
XLQP Gen1 theme background settings
Theme background controls.
XLQP Gen1 theme layout settings
Theme layout and sizing controls.
XLQP Gen1 information settings
Information and runtime details.
XLQP Gen1 window settings
Window behavior and appearance settings.
XLQP Gen1 editable UI settings
Editable UI controls.
XLQP Gen1 general window settings
The window page in general settings.
XLQP Gen1 config settings
Saved configuration controls.
XLQP Gen1 themes settings
Theme selection and customization.
XLQP Gen1 background settings
Window background selection and customization.
XLQP Gen1 Config Cloud profiles
Config Cloud profiles and sharing interface.
window.luau
local Window = Library:MakeWindow({
    Branding = {
        Name = "My Hub",
        Subtitle = "XLQP Gen1",
        Icon = "home",
        IntroText = "My Hub",
        Tags = {
            { Text = "V1.0.0" },
            {
                Text = "BETA",
                BackgroundColor = Color3.fromRGB(116, 82, 190),
            },
        },
    },

    Config = {
        Enabled = true,
        Folder = "MyHub",
    },

    SaveUIPosition = true,
    SaveUISize = true,
    TabButtonsStyle = {
        Gap = 4,
        Padding = 8,
        CornerRadius = 6,
        Indicator = true,
        IndicatorWidth = 2,
        IndicatorHeight = 20,
    },

    PluginsEnabled = true,
    PluginsFolder = "MyHub/plugins",
    PrebuiltPlugins = {},

    TopBarQuickPanels = {
        Enabled = true,
        Toggles = true,
        Notifications = true,
        TogglesTitle = "Active Toggles",
        NotificationsTitle = "Notifications",
        ToggleIcon = "list-checks",
        NotificationIcon = "bell",
        NotificationLimit = 100,
        PanelWidth = 320,
        PanelHeight = 360,
        NotificationPanelWidth = 340,
        NotificationPanelHeight = 380,
        BadgeColor = Color3.fromRGB(93, 125, 255),
    },

    PrivateTabs = {
        Enabled = true,
        Password = "",
        TopName = "Private",
        TopIcon = "lock",
        EditorName = "Edit",
        EditorIcon = "pencil",
        EditorTitle = "Private Tab Editor",
        EditorSubtitle = "Create private tabs and elements.",
        EditorWidth = 900,
        EditorHeight = 560,
        DefaultName = "Custom Tab",
    },

    LoadingTitle = "Loading modules...",
    LoadingTasks = {
        "Creating navigation",
        "Loading themes and layout",
        "Building interface modules",
        "Finalizing interface",
    },

    GlowEnabled = true,
    GlowSpeed = 6,
    GlowColor = Color3.fromRGB(139, 92, 246),

    betabuttonslist = true,
    Widgets = {
        Enabled = true,
        BetaButton = true,
        StartOpen = false,
        ButtonText = "Widgets",
        Icon = "layout-dashboard",
        Width = 1020,
        Height = 560,
        ScreenPadding = 32,
        CornerRadius = 18,
        DimBackground = false,
        BackgroundTransparency = 1,
        HideMainWindow = true,
        CloseOnOutside = false,
    },
    tablistspacing = 6,

    statusbar = {
        Region = "US-East",
    },

    uishadow = false,

    Appearance = {
        Shiny = true,
        NewUI = true,
        BigUI = false,
        LiquidGlass = true,
        AutoResizeText = false,
        CustomCursor = false,
        CornerRadius = 18,

        ResizeHandle = {
            Size = 42,
            Color = Color3.fromRGB(139, 92, 246),
        },

        ShowTabInfo = true,
        SidebarWidth = 170,
        SidebarCollapsedWidth = 76,

        LiveColor = true,
        LiveColorBackground = false,
        LiveColorThemeImages = true,
        LiveColorElementBackground = false,
        LiveColorElements = true,
        LiveColorTheme = "Custom Galaxy Rain",
        LiveColorFolder = "XLQPGen1/LiveColors",
        LiveColorScriptsEnabled = true,
        LiveColorSpeed = 0.22,
        RainbowUpdateRate = 20,
        LiveColorSettingsBackground = true,
        LiveColorTransparency = 0.04,

        BackgroundEnabled = true,
        BackgroundImage = "rbxassetid://0",
        BackgroundTransparency = 0.2,
        BackgroundScaleType = "Crop",

        GifBackgroundEnabled = false,
        GifBackgroundUrl = "",
        GifBackgroundTransparency = 0.2,
        Size = UDim2.new(0, 860, 0, 560),
    },

    Loading = {
        IntroEnabled = true,
        IntroText = "My Hub",
        IntroSubtitle = "Loading...",
        IntroAccentColor = Color3.fromRGB(139, 92, 246),
        IntroDuration = 0.8,
        LoadingProgress = true,
        FastLoad = true,
        AutoInit = false,
        Delay = 2.5,
        PerformanceMode = true,
    },

    Setup = {
        Enabled = true,
        Version = 1,
        RequireVersionMatch = false,
        OwnerOnly = false,
        Folder = "MyHub",
        FileName = "first_run_setup",
        Name = "My Hub",
        Title = "My Hub",
        AccentColor = Color3.fromRGB(139, 92, 246),
        DefaultLanguage = "en",
        DefaultLook = "Modern Dark",
        DefaultScale = 1,
        DefaultNewUI = true,
        DefaultLiquidGlass = true,
        Welcome = {
            Width = 560,
            Height = 280,
            Greeting = "Welcome,",
            ShowAvatar = true,
            ShowDisplayName = true,
            AvatarSize = 30,
            GreetingWidth = 82,
            NameSuffix = ".",
            PageNames = { "Welcome", "Language", "Appearance", "Interface Size", "Finish" },
            NextSuffix = " โ†’",
            BackPrefix = "โ† ",
        },
    },

    UpdateLog = {
        Enabled = true,
        Folder = "MyHub",
        FileName = "update_log_seen",
        Title = "News!",
        Icon = "info",
        ButtonText = "Proceed",
        Logs = {
            {
                Id = "1.0.0-update-1",
                Title = "My Hub 1.0.0",
                Description = "Initial release.",
                Icon = "sparkles",
            },
        },
    },

    Behavior = {
        ToggleKey = "RightShift",
        UnlockMouse = true,
        Guide = false,
        AutoStartGuide = false,
        EditableAllElements = false,
    },

    Navigation = {
        Enabled = true,
        SidebarTab = true,
        TabList = {
            Detached = true,
            Width = 168,
            Gap = 12,
            CornerRadius = 14,
            Logo = {
                Image = "home",
                Text = "MY HUB",
                Subtitle = "XLQP GEN1",
                Layout = "Horizontal",
                Size = 40,
                Height = 78,
            },
        },
        Tabs = {
            { Name = "Home", Icon = "home" },
            { Name = "Security", Icon = "shield" },
            { Name = "Settings", Icon = "settings" },
        },
    },

    Typewriter = {
        Enabled = true,
        Multiple = true,
        Text = { "My Hub", "loaded", "ready" },
        Speed = 1.2,
        SoundDelay = 0.035,
        Sound = "rbxassetid://0",
        Pitch = 1,
    },

    Discord = {
        Enabled = false,
        Invite = "YOUR_INVITE_CODE",
        InviteUrl = "https://discord.gg/YOUR_INVITE_CODE",
        AuthEnabled = false,
        AutoStartAuth = false,
        PollInterval = 2.5,
        Timeout = 600,
        Whitelist = {},
    },

    YouTubeMusic = {
        APIKey = "",
        ConverterAPI = "https://yt-api.org",
        Folder = "MyHub/Music",
    },

    Spotify = {
        BridgeUrl = "",
        ConnectUrl = "",
    },

    Security = {
        AntiLogger = true,
        Mode = "Better",
        DiscordWebhookWhitelist = {
            "https://discord.com/api/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN",
        },
    },

    BuiltInTabs = {
        Enabled = true,
        Group = "Configs",
        GroupIcon = "folder",
        Settings = {
            Enabled = true,
            WatermarkText = "MY HUB",
            AutoStartAuth = false,
        },
        Security = {
            Enabled = true,
        },
        PVP = {
            Enabled = false,
            Icon = "swords",
            Risky = true,
            RiskTitle = "Risky PVP tools",
            RiskDescription = "This tab can affect other players. Continue?",
            RiskTimeout = 5,
            RememberRisk = true,
            RiskDimBackground = false,
        },
    },

    Premium = {
        Enabled = false,
        Title = "Unlock Premium",
        Subtitle = "Enter a key to unlock premium controls.",
        FieldLabel = "License key",
        Placeholder = "MYHUB-XXXX-XXXX",
        ButtonText = "Activate",
        ButtonLabel = "Unlock Premium",
        Note = "Keys may be tied to one Roblox account.",
        GetKeyUrl = "https://example.com/get-key",
        Benefits = "Premium unlocks restricted controls.",
        Save = true,
        AutoRedeem = true,
        Validate = function(key, player)
            return key == "example", "Pro"
        end,
        Callback = function(unlocked, tier)
            print("premium", unlocked, tier)
        end,
    },

    KeySystem = {
        Enabled = false,
        Title = "My Hub Key",
        Description = "Enter your key to continue.",
        Key = { "XLQP-DEMO" },
        CaseSensitive = true,
        SaveKey = true,
        Folder = "MyHub",
        Theme = "Plant-Dark",
        URL = "https://xlqp.lol/",
    },

    SearchBar = {
        Default = "Search elements",
        ClearTextOnFocus = false,
        filter = true,
        StartOpen = true,
        MobileStartOpen = false,
        UnlockMouse = true,
        Shiny = true,
        DesktopBreakpoint = 860,
        HeaderRightReserve = 440,
        MaxHeaderWidth = 380,
        HeaderCenterScale = 0.46,
    },
})

Top-level options

These fields sit directly inside the MakeWindow table.

OptionTypeDefault / purpose
BrandingtableProduct name, subtitle, icon, intro text, and tags
ConfigtableSaved configuration settings
SaveUIPositionbooleanRestores the last window position
SaveUISizebooleanRestores the last window dimensions
TabButtonsStyletableGap, padding, corner radius, and selected-tab indicator
PluginsEnabledbooleanEnables the built-in plugin system
PluginsFolderstringFolder used to discover local plugins
PrebuiltPluginstablePlugin definitions registered during startup
TopBarQuickPanelstableActive-toggle and notification panels in the top bar
PrivateTabstablePrivate-tab editor names, icons, password, and dimensions
WidgetstableFloating widget dashboard behavior and dimensions
SetuptableFirst-run setup, defaults, and welcome-page layout
UpdateLogtableVersioned update cards shown once per release ID
PremiumtableOptional premium key prompt and validator
YouTubeMusic / SpotifytableOptional media-service bridge configuration
LoadingTitlestringMain loading-stage label
LoadingTasks{ string }Ordered list shown by the loading controller
GlowEnabledbooleanEnables the ambient window glow
GlowSpeednumberGlow animation speed
GlowColorColor3Glow color
betabuttonslistbooleanFloating pill dock at the bottom of the screen
tablistspacingnumberPixels between sidebar tabs
statusbarboolean | tableStatus bar across the bottom of the window
uishadowboolean | tableDrop shadow behind the windows

Saved window geometry and tab buttons

SaveUIPosition and SaveUISize persist the user's window geometry. TabButtonsStyle accepts Gap, Padding, CornerRadius, Indicator, IndicatorWidth, and IndicatorHeight.

Window:SetTabButtonsStyle({ Gap = 6, Padding = 8, CornerRadius = 8 })
print(Window:GetTabButtonsStyle())
print(Window:GetTabButtonsStyleParameters())

TopBarQuickPanels

The quick-panel group accepts Enabled, Toggles, Notifications, TogglesTitle, NotificationsTitle, ToggleIcon, NotificationIcon, NotificationLimit, PanelWidth, PanelHeight, NotificationPanelWidth, NotificationPanelHeight, and BadgeColor.

Widgets

The widgets dashboard accepts Enabled, BetaButton, StartOpen, ButtonText, Icon, Width, Height, ScreenPadding, CornerRadius, DimBackground, BackgroundTransparency, HideMainWindow, and CloseOnOutside. Create cards with Window:AddWidget(config) after MakeWindow returns.

See New window and runtime APIs for widget controllers, dialogs, private tabs, admin tabs, media center, dynamic-island notifications, and parameter introspection.

Beta buttons list

Set betabuttonslist = true to show a floating dock at the bottom of the screen. It lives in its own ScreenGui, so it stays visible whether the interface is open or closed.

The dock has a launcher button, a nav pill (home, AI, search), a tools pill (plugins, media), a user pill (settings, avatar), a collapse arrow, and a clock pill on the far right.

While it is enabled the vertical closed-tab list is suppressed, and a disc player anchored to the bottom of the screen is lifted above the dock automatically.

Library:SetBetaButtonsList(true)

if Library:IsBetaButtonsListEnabled() then
    print("dock is on")
end

A Beta Buttons List toggle is also added to the built-in Settings tab, saved under the XLQPBetaButtonsList flag.

Status bar

statusbar draws a bar across the bottom of the main window with error and warning indicators followed by live memory, ping, FPS, and region readouts. Pass true for defaults or a table to configure it.

OptionTypeDescription
RegionstringText shown in the Region: readout. Defaults to N/A

The error and warning icons brighten when the library has recorded an error, and clicking either one raises a notification with the details.

Library:SetStatusBar(true)

UI shadow

uishadow adds a soft drop shadow behind the main window, the settings window, and the detached tab list. It is off by default. Pass true for defaults or a table to configure it.

OptionTypeDescription
SpreadnumberHow far the shadow extends past the frame. Default 18, clamped to 4โ€“90
Transparencynumber0โ€“1. Default 0.62
ColorColor3Shadow color. Default black
OffsetXnumberHorizontal offset in pixels. Default 0
OffsetYnumberVertical offset in pixels. Default 6
Library:SetUIShadow(true, { Spread = 18, Transparency = 0.62 })

Library:ApplyUIShadow(someFrame, { Spread = 12 })
Library:RemoveUIShadow(someFrame)

The shadow is created as a sibling of its target rather than a child, so a frame with ClipsDescendants cannot cut it off. It tracks the target's position, size, anchor point, visibility, and ZIndex, and destroys itself when the target leaves the tree.

ApplyUIShadow accepts any GuiObject, so it can be used on your own elements. It replaces any shadow already applied to that frame.

Branding

OptionTypeDescription
NamestringMain window/product name
SubtitlestringSupporting brand text
IconstringIcon name, asset ID, or supported image value
IntroTextstringBranding text used by the intro
TagstableList of strings or { Text, BackgroundColor } tag objects

Config

OptionTypeDescription
EnabledbooleanEnables saved control state
FolderstringStable folder used for configuration files

For an element to persist, give it a unique Flag and set Save = true.

Appearance

Layout and surface

OptionTypeDescription
ShinybooleanEnables shine effects
NewUIbooleanEnables the newer XLQP layout
BigUIbooleanUses the larger layout preset
LiquidGlassbooleanEnables glass-like window surfaces
AutoResizeTextbooleanResizes text to available space
CustomCursorbooleanEnables the custom XLQP cursor
CornerRadiusnumberShared surface radius
ResizeHandletableResize handle { Size, Color }
ShowTabInfobooleanShows tab metadata where supported
SidebarWidthnumberExpanded sidebar width
SidebarCollapsedWidthnumberCollapsed sidebar width
SizeUDim2Initial window dimensions

Live color

OptionTypeDescription
LiveColorbooleanEnables live-color processing
LiveColorBackgroundbooleanApplies live color to the main background
LiveColorThemeImagesbooleanApplies live color to theme images
LiveColorElementBackgroundbooleanApplies live color to element backgrounds
LiveColorElementsbooleanEnables live colors on supported elements
LiveColorThemestringSelected live-color theme name
LiveColorFolderstringFolder containing live-color scripts/themes
LiveColorScriptsEnabledbooleanEnables live-color script discovery
LiveColorSpeednumberAnimation speed
RainbowUpdateRatenumberRainbow refresh frequency
LiveColorSettingsBackgroundbooleanApplies live color behind settings
LiveColorTransparencynumberLive-color overlay transparency

Background

OptionTypeDescription
BackgroundEnabledbooleanEnables a custom image background
BackgroundImagestringRoblox asset ID or supported image URL
BackgroundTransparencynumberTransparency from 0 to 1
BackgroundScaleTypestring / Enum.ScaleTypeImage scaling mode such as Crop
GifBackgroundEnabledbooleanLoads the configured animated GIF background when the window starts
GifBackgroundUrlstringDirect GIF or Tenor page URL; leave empty when disabled
GifBackgroundTransparencynumberAnimated background transparency from 0 to 1; defaults to the static background transparency or 0.18

Animated GIF backgrounds

Set the three GIF fields inside Appearance. This example intentionally uses a placeholder rather than publishing a real media link.

Appearance = {
    GifBackgroundEnabled = true,
    GifBackgroundUrl = "YOUR_GIF_OR_TENOR_URL",
    GifBackgroundTransparency = 0.2,
}

XLQP accepts a direct GIF file or a Tenor page that resolves to GIF media. Animated backgrounds require an executor with buffer support, Content.fromObject, and EditableImage. The current runtime rejects GIFs larger than 1024 ร— 1024, files with more than 240 frames, or animations whose total frame pixels exceed 24,000,000.

Check support before changing the background at runtime:

local Supported, Reason = Window:IsGifBackgroundSupported()

if Supported then
    Window:SetGifBackground("YOUR_GIF_OR_TENOR_URL", 0.2)
else
    warn("GIF backgrounds are unavailable: " .. Reason)
end

-- Stop the animation and restore the configured static background.
Window:RemoveGifBackground()

SetGifBackground(url, transparency) begins loading asynchronously and returns the Window controller. If downloading, decoding, or displaying the GIF fails, XLQP disables the animation and restores the static background when one is configured.

Loading

OptionTypeDescription
IntroEnabledbooleanShows the intro before the main window
IntroTextstringIntro title
IntroSubtitlestringIntro supporting text
IntroAccentColorColor3Intro accent color
IntroDurationnumberIntro animation duration
LoadingProgressbooleanShows loading progress/tasks
FastLoadbooleanShortens nonessential loading animation
AutoInitbooleanInitializes automatically
DelaynumberStartup delay in seconds
PerformanceModebooleanReduces visual work for slower devices

When AutoInit = false, update and close the loading controller yourself.

local Loading = Library:GetLoading()
Loading:SetStage("Loading modules...")
Loading:SetTask(1, "Creating navigation...", 0.5)
Loading:NextTask()
Loading:Close()

GetLoading() never returns nil. When no loading screen is active โ€” because LoadingProgress is off, or the screen has already closed โ€” it returns an idle controller whose SetStep, SetStage, SetTitle, SetSubtitle, SetProgress, SetTasks, SetTask, NextTask, CompleteTask, ShowIntro, Close, and Destroy methods accept the same arguments and do nothing. Call it right after MakeWindow and use the result unguarded; a fallback table of empty functions is not needed.

Setup and update log

Setup configures the first-run wizard. Its main fields are Enabled, Version, RequireVersionMatch, OwnerOnly, Folder, FileName, Name, Title, AccentColor, DefaultLanguage, DefaultLook, DefaultScale, DefaultNewUI, and DefaultLiquidGlass.

Setup.Welcome accepts Width, Height, Greeting, ShowAvatar, ShowDisplayName, AvatarSize, GreetingWidth, NameSuffix, PageNames, NextSuffix, and BackPrefix.

UpdateLog accepts Enabled, Folder, FileName, Title, Icon, FontColor, DescriptionColor, ButtonText, and Logs. Each log supports Id, Title, Description, Icon or Image, FontColor, and DescriptionColor.

Behavior

OptionTypeDescription
ToggleKeystring / Enum.KeyCodeShows or hides the interface
UnlockMousebooleanReleases the cursor while XLQP is open
Guideboolean / tableEnables or configures onboarding
AutoStartGuidebooleanStarts the guide automatically
EditableAllElementsbooleanEnables editing/moving supported elements
OptionTypeDescription
EnabledbooleanEnables generated navigation
SidebarTabbooleanUses the sidebar tab layout
TabListtableDetached tab-list configuration
TabstableInitial { Name, Icon } tab definitions

Spacing between sidebar tabs is controlled by the top-level tablistspacing option.

TabList

OptionTypeDescription
DetachedbooleanShows the tab list as a detached surface
WidthnumberList width
GapnumberSpace between the list and window
CornerRadiusnumberDetached surface radius
LogotableLogo { Image, Text, Subtitle, Layout, Size, Height }

Typewriter

OptionTypeDescription
EnabledbooleanEnables the typewriter text
MultiplebooleanCycles through a list of strings
Textstring / { string }One message or multiple rotating messages
SpeednumberText animation speed
SoundDelaynumberDelay between typing sounds
SoundstringTyping sound asset
PitchnumberTyping sound pitch

Discord

OptionTypeDescription
EnabledbooleanEnables Discord integration
InvitestringInvite code
InviteUrlstringFull invite URL
AuthEnabledbooleanEnables Discord authentication
AutoStartAuthbooleanStarts authentication with the window
PollIntervalnumberAuthentication polling interval
TimeoutnumberAuthentication timeout
Whitelist{ string }Allowed invite/Discord destinations

MakeWindow restores any saved Discord auth profile itself, so scripts do not call LoadDiscordAuthProfile. The method is created while the window is built, which means calling it on Library before MakeWindow fails with attempt to call missing method 'LoadDiscordAuthProfile' of table. Read the restored profile from Library.DiscordAuthProfile or getgenv().XLQPDiscordAuth after the window exists.

Media services

YouTubeMusic accepts APIKey, ConverterAPI, and Folder. Spotify accepts BridgeUrl and ConnectUrl. Leave provider credentials and bridge URLs empty when those integrations are not configured.

Security

OptionTypeDescription
AntiLoggerbooleanEnables URL/logger protection
ModestringSecurity policy such as Better
DiscordWebhookWhitelist{ string }Explicitly allowed webhook URL patterns

This window group configures Anti Logger; it does not enable the early-load XLQP_SECURE asset policy. See Secure Mode for the exact difference, supported runtime functions, and fail-closed behavior.

Do not publish secrets

Keep private loader tokens, real webhook URLs, API keys, authentication hashes, and private keys out of public scripts and documentation.

BuiltInTabs

OptionTypeDescription
EnabledbooleanEnables XLQP built-in pages
GroupstringNavigation group label
GroupIconstringNavigation group icon
SettingstableSettings-tab configuration
SecuritytableSecurity-tab configuration
PVPtablePVP-tab configuration and risk prompt

Settings accepts Enabled, WatermarkText, and AutoStartAuth. Security accepts Enabled. PVP accepts Enabled, Icon, Risky, RiskTitle, RiskDescription, RiskTimeout, RememberRisk, and RiskDimBackground.

Mute Global Sounds

Mute Global Sounds silences the game's audio while leaving every sound XLQP owns audible. It appears in two places, and both stay in sync: the built-in Settings tab, where it saves under the XLQPMuteGlobalSounds flag, and Quick Controls on the settings GUI overview page.

Turning it on stores each sound's current volume, sets it to 0, and watches for new audio; turning it off restores the stored volumes. If the game changes a muted sound's volume while the toggle is on, XLQP re-zeroes it and restores that newer value on unmute.

MethodWhat it does
Library:SetGlobalSoundsMuted(state)Mutes or restores game audio and returns the resulting state
Library:GetGlobalSoundsMuted()Returns true while game audio is muted
Library:ToggleGlobalSounds()Flips the current state and returns the new one
Library:RegisterUIAudio(sound)Whitelists a Sound or AudioPlayer so muting never touches it
Library:IsUIAudio(sound)Returns true when a sound is whitelisted
Library:SetGlobalSoundsMuted(true)
print(Library:GetGlobalSoundsMuted())
Library:SetGlobalSoundsMuted(false)

XLQP's own audio โ€” the media player, disc player, bytebeat lab, intro sound, typewriter clicks, AI panel sounds, and interface feedback โ€” is whitelisted automatically, including the sounds it parents to SoundService and Workspace rather than its own GUI. Register any sound your script creates for the interface:

local Chime = Instance.new("Sound", workspace)
Chime.SoundId = "rbxassetid://9120299506"
Library:RegisterUIAudio(Chime)

What the toggle reaches

Muting covers Sound and AudioPlayer instances under Workspace, SoundService, and Players, which is where playing audio lives. Instances under CoreGui, and audio a script routes through APIs other than an instance volume, are left alone.

KeySystem

The new gate supports local keys and validators, provider adapters, a themed key window, get-key menus, and success callbacks. See the complete Key system guide for all fields, provider configuration, and migration details.

KeySystem troubleshooting

Put KeySystem inside MakeWindow or CreateWindow and enable it explicitly. Prefer Key; Keys remains supported. The gate trims surrounding spaces and matches raw keys case-insensitively unless CaseSensitive = true.

KeySystem = {
    Enabled = true,
    Key = {"MyExactKey"},
    CaseSensitive = true,
    SaveKey = true,
    Folder = "MyHub"
}

The new gate checks hashes after a failed raw-key match, then custom validation and configured providers. Key may be a function; Validate, Validator, or Check are additional callback names. KeyValidator is not a supported field.

Accepted keys are saved under a deterministic filename based on Folder and Title, then revalidated at the next launch. The old FileName and signed key-set record behavior no longer describes the active gate. If validation fails, check your key list, case setting, validator return values, and provider connection. In the full example, set UseKeySystem = true to show the gate.

OptionTypeDescription
DefaultstringPlaceholder/default search text
ClearTextOnFocusbooleanClears text when focused
filterbooleanFilters visible elements
StartOpenbooleanOpens search on desktop at startup
MobileStartOpenbooleanOpens search on mobile at startup
UnlockMousebooleanUnlocks the cursor for search
ShinybooleanEnables the search shine effect
DesktopBreakpointnumberDesktop layout cutoff
HeaderRightReservenumberSpace reserved on the header right
MaxHeaderWidthnumberMaximum search width
HeaderCenterScalenumberRelative header-center width

Window controller

Store the returned Window when you need to create navigation or change sidebar state.

local Home = Window:MakeTab({ Name = "Home", Icon = "home" })
Window:SetSidebarCollapsed(true)

Window:CreatePopup({
    Title = "Ready",
    Description = "The interface finished loading.",
    Options = {
        { Name = "Close", Callback = function() end },
    },
})

Continue to Navigation, Element options, or the full example.