Noctro
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