Examples
Working scripts, start to finish.
Every callback below is intentionally empty, these scripts show how the menu is assembled, not what your script does once a control fires. Fill in the callbacks with your own logic.
Minimal starter
The smallest useful menu, one page, one section, a toggle and a slider. Good starting point for any script.
minimal-starter.lua
local Noctro = loadstring(game:HttpGet("https://noctro.cc/noctro.lua"))()
local Window = Noctro:Window({
Title = "My Script";
Footer = "discord.gg/invite";
Logo = "sparkles";
})
local Page = Window:Page({ Icon = "layout-grid" })
local Sub = Page:SubPage({ Name = "General" })
local Main = Sub:Section({ Name = "Main"; Side = "Left"; Icon = "settings" })
local Row = Main:Label({ Text = "Enable feature" })
Row:Toggle({ Flag = "FeatureEnabled"; State = false; Callback = function(v) end })
Main:Slider({
Name = "Intensity";
Flag = "Intensity";
Min = 0; Max = 100; Default = 50;
Suffix = "%";
Callback = function(v) end;
})
Noctro.Notify({ Title = "My Script"; Text = "Loaded"; Type = "Success"; Duration = 3 })Multi-page menu
The full shape most scripts converge on, several pages, each with its own sub-pages and sections, plus the config page wired in at the end.
multi-page-menu.lua
local Noctro = loadstring(game:HttpGet("https://noctro.cc/noctro.lua"))()
Noctro:LoadingScreen({ Title = "Noctro"; Subtitle = "Initializing..."; Duration = 1 })
Noctro.SetWatermark("Noctro", true)
Noctro.SetKeybindList(true)
local Window = Noctro:Window({
Title = "Noctro";
Footer = ".gg/yourinvite";
Logo = "hash";
})
-- Combat
local Combat = Window:Page({ Icon = "swords" })
local Aimbot = Combat:SubPage({ Name = "Aimbot" })
local AimMain = Aimbot:Section({ Name = "Main"; Side = "Left"; Icon = "crosshair" })
local AimRow = AimMain:Label({ Text = "Enable aimbot" })
AimRow:Toggle({ Flag = "AimbotEnabled"; State = false; Callback = function(v) end })
AimRow:Keybind({ Flag = "AimbotKey"; Key = Enum.KeyCode.RightShift; Type = "Hold" })
AimMain:Slider({ Name = "Field of view"; Flag = "AimbotFOV"; Min = 10; Max = 120; Default = 90; Suffix = "°" })
AimMain:Dropdown({
Name = "Target part"; Flag = "AimbotPart";
Options = { "Head"; "Torso"; "HumanoidRootPart" }; Default = "Head";
})
-- Visuals
local Visuals = Window:Page({ Icon = "eye" })
local ESP = Visuals:SubPage({ Name = "ESP" })
local ESPMain = ESP:Section({ Name = "Players"; Side = "Left"; Icon = "users" })
local ESPRow = ESPMain:Label({ Text = "Show boxes" })
ESPRow:Toggle({ Flag = "ESPBoxes"; State = false; Callback = function(v) end })
ESPMain:Colorpicker({ Flag = "ESPColor"; Color = Color3.fromRGB(138, 156, 229) })
-- Misc
local Misc = Window:Page({ Icon = "wrench" })
local MiscSub = Misc:SubPage({ Name = "General" })
local MiscMain = MiscSub:Section({ Name = "Main"; Side = "Left"; Icon = "sliders-horizontal" })
MiscMain:Button({ Name = "Rejoin server"; Callback = function() end })
MiscMain:Paragraph({ Title = "Build"; Body = "Noctro UI · stable" })
-- Settings (theme + configs)
Noctro:BuildConfigPage(Window)
Noctro.Notify({ Title = "Noctro"; Text = "Loaded"; Type = "Success"; Duration = 3 })Key system gate
Adds a login screen in front of the menu. Wire Validate to your own backend, the demo below only shows the shape of the check.
key-system-gate.lua
local Noctro = loadstring(game:HttpGet("https://noctro.cc/noctro.lua"))()
Noctro:KeySystem({
Validate = function(key)
-- Replace with a real request to your own server.
-- Return success, expiresAt (unix timestamp) or nil.
if key == "noctro-demo" then
return true, os.time() + 7 * 24 * 3600
end
return false
end;
Remember = true;
ShowExpiry = true;
WatermarkExpiry = true;
})
local Window = Noctro:Window({
Title = "Noctro";
Footer = "discord.gg/yourinvite";
Logo = "shield";
})
local Page = Window:Page({ Icon = "home" })
local Sub = Page:SubPage({ Name = "Home" })
local Main = Sub:Section({ Name = "Welcome"; Side = "Left"; Icon = "sparkles" })
Main:Paragraph({ Title = "You're in"; Body = "Key validated. Build your menu below." })Custom theme on load
Every color in Noctro traces back to Accent. Set it once at boot and the whole menu, tabs, toggles, sliders, watermark, follows.
custom-theme-on-load.lua
local Noctro = loadstring(game:HttpGet("https://noctro.cc/noctro.lua"))()
Noctro.Theme.Accent = Color3.fromRGB(224, 122, 95) -- warm coral instead of the default blue
Noctro.ApplyTheme()
local Window = Noctro:Window({
Title = "Retheme demo";
Logo = "flame";
})
local Page = Window:Page({ Icon = "palette" })
local Sub = Page:SubPage({ Name = "Theme" })
local Main = Sub:Section({ Name = "Preview"; Side = "Left"; Icon = "swatch-book" })
Main:Label({ Text = "Accent-driven toggle" }):Toggle({ Flag = "Preview"; State = true })
Main:Slider({ Name = "Slider preview"; Flag = "PreviewSlider"; Min = 0; Max = 100; Default = 60 })
Noctro:BuildConfigPage(Window) -- includes the colorpicker + reset-to-default