
Credits: Carterjam28YT
Nexus Library (Nexus UI)🚀 What is Nexus LibraryNexus Library is a lightweight UI library designed for Roblox — a simple, flexible “UI‑building toolkit” that makes it easy to create windows, tabs, sections, buttons and more with a consistent theme out of the box. It provides a ready‑to‑use color palette, built‑in animations (hover, click, fade‑in, slide‑in), and optional key‑system support (for premium / access‑controlled UIs).It’s ideal if you want to quickly build sleek, modern UI interfaces in Roblox without writing everything from scratch.✨ Why use Nexus Libraryready‑made themes & colors — you don’t have to pick and define every color or style manually; the library gives you a consistent palette (primary, dark, secondary, success, warning, error, etc.).built‑in animation presets — common UI animations like hover, click effects, fade‑ins and sliding are baked in.rapid UI creation — utility functions like CreateElement let you spawn GUI objects with custom properties without boilerplate.optional key‑system support — if you want to gate parts of your UI behind a “premium key” (e.g. for VIP access), Nexus Library offers a basic key‑validation system and a default key‑entry screen.modular structure — windows, tabs, sections and components are organized so you can build complex UIs in a structured way.
--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
local LibraryUrl = "https://raw.githubusercontent.com/Carterjam28YT/Nexus-UI/refs/heads/main/Nexus%20Library%20open%20src"
local Success, Library = pcall(function()
return loadstring(game:HttpGet(LibraryUrl))()
end)
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
-- 1. Initialize the Window
Library:Watermark("My Script Name | v1.0")
local Window = Library:Window("My Script Hub")
local Icons = {
Combat = "7733771472", -- eye
-- you can add yours icons
}
-- 2. Create a Tab
-- Note: This library requires Tabs to contain SubTabs.
Window:Section("Main Functions")
local MainTab = Window:Tab("Main", "7733917120") -- also can without icon: local TestTab = Window:Tab("Your Page")
Window:Section("Set Functions")
local SettingsTab = Window:Tab("Settings", "7733771472" )
-- 3. Create a SubTab (Required hierarchy: Window -> Tab -> SubTab)
local GeneralPage = MainTab:SubTab("General")
local CombatPage = MainTab:SubTab("Combat")
-- 4. Create Groupboxes (Containers for items)
-- You can choose "Left" or "Right" side
local FarmGroup = GeneralPage:Groupbox("Farming", "Left", "7733774602")
local ExtraGroup = GeneralPage:Groupbox("Extras", "Right", Icons.Combat)
local CombatGroup = CombatPage:Groupbox("pvp Settings", "Left")
local NewUiGroup = GeneralPage:Groupbox("New UI Features", "Right")
local VisualsGroup = CombatPage:Groupbox("Visuals", "Right")
-------------------------------------------------------------------------
-- EXAMPLES OF FUNCTIONS
-------------------------------------------------------------------------
-- LABEL & PARAGRAPH
FarmGroup:AddLabel("Farming Status: Idle")
FarmGroup:AddParagraph({
Title = "About",
Content = "Select a weapon and enable Auto Farm. This text will automatically wrap if it gets too long for the line.",
TextWrapped = true
})
-- 3. Пример с очень длинным текстом для проверки
FarmGroup:AddParagraph({
Title = "Warning",
Content = "This is a very long text to test if the paragraph system is working correctly. It should wrap to multiple lines automatically based on the width of the box."
})
-- TOGGLES (The examples you asked for)
FarmGroup:AddToggle({
Title = "Auto Farm",
Default = false,
Flag = "AutoFarmFlag", -- Unique identifier for configs
Callback = function(Value)
print("Auto Farm is now:", Value)
-- Your Auto Farm Loop here
end
})
FarmGroup:AddToggle({
Title = "Accept Quest",
Default = true,
Callback = function(Value)
print("Auto Quest:", Value)
end
})
CombatGroup:AddToggle({
Title = "Auto Parry",
Default = false,
Callback = function(Value)
print("Parry enabled:", Value)
end
})
ExtraGroup:AddCheckbox({
Title = "Safe Mode",
Default = true,
Description = "Это новый квадратный чекбокс. Отличается от Toggle видом.",
Callback = function(Value)
print("Safe Mode State:", Value)
end
})
ExtraGroup:AddCheckbox({
Title = "Debug Info",
Default = false,
Risky = true, -- Красный текст
Callback = function(Value)
print("Debug:", Value)
end
})
CombatGroup:AddDropdown({
Title = "ESP Mode",
Values = {"Box", "Tracer", "Highlight"},
Default = "Box",
Description = "Выберите тип подсветки игроков.",
Callback = function(Value)
print("ESP Type:", Value)
end
})
CombatGroup:AddTextbox({
Title = "Spam Chat",
Placeholder = "Enter message...",
ClearOnFocus = true, -- Очищает текст при нажатии, чтобы удобно вводить новый
Description = "Сообщение, которое будет отправляться в чат.",
Callback = function(Value)
print("Will spam:", Value)
end
})
CombatGroup:AddToggle({
Title = "Auto Attack",
Default = false,
Risky = true, -- Сделает текст красным, чтобы предупредить пользователя
Description = "Автоматически атакует игроков в радиусе 15 стадов.", -- Всплывающее описание
Callback = function(Value)
print("Auto Attack:", Value)
end
})
CombatGroup:AddSlider({
Title = "WalkSpeed",
Min = 16,
Max = 250,
Default = 16,
Rounding = 0,
Suffix = " studs", -- will be show "16 studs", "50 studs" и т.д.
Description = "Изменяет скорость передвижения персонажа.",
Callback = function(Value)
if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
LocalPlayer.Character.Humanoid.WalkSpeed = Value
end
end
})
-- SLIDER
CombatGroup:AddSlider({
Title = "Attack Distance",
Min = 1,
Max = 50,
Default = 15,
Rounding = 1, -- Decimals (0 = integer)
Callback = function(Value)
print("Distance set to:", Value)
end
})
-- DROPDOWN (Single)
ExtraGroup:AddDropdown({
Title = "Weapon Select",
Values = {"Sword", "Bow", "Magic", "Loll", "Lool", "Loool", "Looool", "Lol"},
Default = "Sword",
Multi = false,
Callback = function(Value)
print("Selected Weapon:", Value)
end
})
-- DROPDOWN (Multi)
ExtraGroup:AddDropdown({
Title = "Target Priority",
Values = {"Players", "NPCs", "Bosses", "Lol", "Lol", "Lol", "Loll"},
Default = {"NPCs"}, -- Note: Must be a table for Multi
Multi = true,
Callback = function(Value)
-- Value returns a table like {Players = true, NPCs = false}
for k, v in pairs(Value) do
if v then print(k, "is selected") end
end
end
})
-- COLOR PICKER
ExtraGroup:AddColorPicker({
Title = "ESP Color",
Default = Color3.fromRGB(255, 0, 0),
Callback = function(Value)
print("New Color:", Value)
end
})
-- KEYBIND
CombatGroup:AddKeybind({
Title = "Kill Aura Bind",
Default = Enum.KeyCode.R,
Callback = function(Key)
print("Key pressed:", Key)
end
})
-- TEXTBOX
ExtraGroup:AddTextbox({
Title = "Custom Message",
Placeholder = "Enter text...",
Callback = function(Text)
print("User typed:", Text)
end
})
-- BUTTON
ExtraGroup:AddButton({
Title = "Server Hop",
Callback = function()
print("Hopping server...")
end
})
-- CONFIG SYSTEM (Built into the library)
local SettingsPage = SettingsTab:SubTab("Menu Settings")
-- >> ЛЕВАЯ СТОРОНА: CONFIG MANAGER <<
local ConfigGroup = SettingsPage:Groupbox("Configuration", "Left")
local Configs = Library:GetConfigs()
ConfigGroup:AddDropdown({
Title = "Select Config",
Values = Configs,
Default = "default",
Multi = false,
Flag = "SelectedConfig",
Callback = function(Value) end
})
ConfigGroup:AddTextbox({
Title = "New Config Name",
Placeholder = "Type name...",
Flag = "NewConfigName",
Callback = function(Value) end
})
ConfigGroup:AddButton({
Title = "Load Selected",
Callback = function()
local name = Library.Flags["SelectedConfig"]
if name then
Library:LoadConfig(name)
else
Library:Notify("Error", "No config selected!", 3)
end
end
})
ConfigGroup:AddButton({
Title = "Save Config",
Callback = function()
local name = Library.Flags["NewConfigName"]
if name == "" or name == nil then name = Library.Flags["SelectedConfig"] end
if name and name ~= "" then
Library:SaveConfig(name)
local NewList = Library:GetConfigs()
if Library.Items["SelectedConfig"] then Library.Items["SelectedConfig"].Refresh(NewList) end
else
Library:Notify("Error", "Enter a name or select a config!", 3)
end
end
})
ConfigGroup:AddButton({
Title = "Delete Config",
Callback = function()
local name = Library.Flags["SelectedConfig"]
if name and name ~= "" then
-- 1. Удаляем файл
Library:DeleteConfig(name)
-- 2. Обновляем список в Dropdown
local NewList = Library:GetConfigs()
if Library.Items["SelectedConfig"] then
Library.Items["SelectedConfig"].Refresh(NewList)
end
-- 3. Сбрасываем выбранный конфиг, чтобы избежать ошибок
Library.Flags["SelectedConfig"] = nil
else
Library:Notify("Error", "Select a config first!", 3)
end
end
})
ConfigGroup:AddButton({
Title = "Refresh List",
Callback = function()
local NewList = Library:GetConfigs()
if Library.Items["SelectedConfig"] then Library.Items["SelectedConfig"].Refresh(NewList) end
Library:Notify("Configs", "List refreshed", 2)
end
})
-- >> ПРАВАЯ СТОРОНА: THEME MANAGER <<
local ThemeGroup = SettingsPage:Groupbox("Theme Manager", "Right")
-- [[ ДОБАВЛЕНО: Выбор темы ]]
local ThemeList = {}
if Library.ThemePresets then
for ThemeName, _ in pairs(Library.ThemePresets) do
table.insert(ThemeList, ThemeName)
end
table.sort(ThemeList)
ThemeGroup:AddDropdown({
Title = "Preset Theme",
Values = ThemeList,
Default = "Default",
Multi = false,
Callback = function(Value)
if Library.SetTheme then
Library:SetTheme(Value)
else
warn("Library is outdated, SetTheme missing!")
end
end
})
ThemeGroup:AddSeparator()
end
ThemeGroup:AddLabel("Custom Colors")
ThemeGroup:AddColorPicker({
Title = "Accent Color", Default = Library.Theme.Accent, Flag = "ThemeAccent",
Callback = function(Value) Library:UpdateTheme("Accent", Value) end
})
ThemeGroup:AddColorPicker({
Title = "Background", Default = Library.Theme.Background, Flag = "ThemeBackground",
Callback = function(Value) Library:UpdateTheme("Background", Value) end
})
ThemeGroup:AddColorPicker({
Title = "Sidebar", Default = Library.Theme.Sidebar, Flag = "ThemeSidebar",
Callback = function(Value) Library:UpdateTheme("Sidebar", Value) end
})
ThemeGroup:AddColorPicker({
Title = "Groupbox", Default = Library.Theme.Groupbox, Flag = "ThemeGroupbox",
Callback = function(Value) Library:UpdateTheme("Groupbox", Value) end
})
ThemeGroup:AddLabel("Text & Outlines")
ThemeGroup:AddColorPicker({
Title = "Main Text", Default = Library.Theme.Text, Flag = "ThemeText",
Callback = function(Value) Library:UpdateTheme("Text", Value) end
})
ThemeGroup:AddColorPicker({
Title = "Secondary Text", Default = Library.Theme.TextDark, Flag = "ThemeTextDark",
Callback = function(Value) Library:UpdateTheme("TextDark", Value) end
})
ThemeGroup:AddColorPicker({
Title = "Outline/Stroke", Default = Library.Theme.Outline, Flag = "ThemeOutline",
Callback = function(Value) Library:UpdateTheme("Outline", Value) end
})
ThemeGroup:AddButton({
Title = "Reset Theme to Default",
Callback = function()
Library:SetTheme("Default") -- Используем функцию сброса на дефолтную тему
Library:Notify("Theme", "Colors reset to default", 2)
end
})
-- >> ПРАВАЯ СТОРОНА (Ниже Theme Manager) : UI SETTINGS <<
local UISettings = SettingsPage:Groupbox("UI Settings", "Right")
UISettings:AddToggle({
Title = "Show Watermark",
Default = true,
Flag = "WatermarkToggle",
Callback = function(Value)
Library.WatermarkSettings.Enabled = Value
end
})
UISettings:AddTextbox({
Title = "Watermark Text",
Default = "RedOnyx V17", -- или ваше название
Placeholder = "Enter text...",
ClearOnFocus = false,
Callback = function(Value)
Library.WatermarkSettings.Text = Value
end
})
UISettings:AddToggle({
Title = "Groupbox Animations",
Default = true,
Callback = function(Value)
if Library.GlobalSettings then
Library.GlobalSettings.GroupboxAnimations = Value
end
print("Groupbox animations set to:", Value)
end
})
-- Кнопка для быстрой выгрузки интерфейса (полезно)
UISettings:AddButton({
Title = "Unload / Destroy UI",
Callback = function()
local gui = game:GetService("CoreGui"):FindFirstChild("RedOnyx")
local water = game:GetService("CoreGui"):FindFirstChild("Watermark")
if gui then gui:Destroy() end
if water then water:Destroy() end
end
})
NewUiGroup:AddTextUnformatted("local code = 'Unformatted Style'") -- Моноширинный шрифт
NewUiGroup:AddTextWrapped("This is a text without a header that is long enough to wrap to the next line automatically using AddTextWrapped.")
-- 3. SEPARATOR & SPACING (Разделители и отступы)
NewUiGroup:AddSpacing(5) -- Отступ 5 пикселей
NewUiGroup:AddSeparator() -- Линия
NewUiGroup:AddSpacing(5)
-- 4. LABEL TEXT (Ключ: Значение)
NewUiGroup:AddLabelText("User:", LocalPlayer.Name)
NewUiGroup:AddLabelText("Rank:", "VIP Member")
NewUiGroup:AddLabelText("Status:", "Active")
NewUiGroup:AddSeparator()
-- 5. BULLET TEXT & ALIGNMENT (Списки и отступы)
NewUiGroup:AddBulletText("Safe Mode Enabled")
NewUiGroup:AddBulletText("Anti-Cheat Bypassed")
NewUiGroup:AddNewLine() -- Пустая строка (аналог Spacing)
NewUiGroup:AlignTextToFramePadding("Text aligned with padding") -- Текст с небольшим отступом слева
if NewUiGroup:TreeNode("Folder: Player Scripts") then
NewUiGroup:AddLabel("Inside the folder!")
NewUiGroup:AddToggle({
Title = "Anti-Aim",
Default = false
})
NewUiGroup:AddButton({
Title = "Reset Character",
Callback = function() end
})
NewUiGroup:TreePop() -- Выход из папки
end
-- 2. Вложенные TreeNode (Папка в папке)
if NewUiGroup:TreeNode("Folder: Nested Example") then
NewUiGroup:AddLabel("Level 1")
if NewUiGroup:TreeNode("Sub-Folder (Level 2)") then
NewUiGroup:AddLabel("We are deeper now")
NewUiGroup:AddSlider({
Title = "Deep Value",
Default = 50,
Max = 100
})
NewUiGroup:TreePop() -- Закрываем Sub-Folder
end
NewUiGroup:TreePop() -- Закрываем Nested Example
end
-- 3. / Header (Стилизованный TreeNode с фоном)
-- SetNextItemOpen(true) заставит его быть открытым при запуске скрипта
NewUiGroup:SetNextItemOpen(true)
if NewUiGroup:CollapsingHeader("Visuals (Header)") then
NewUiGroup:AddCheckbox({Title = "Box ESP", Default = true})
NewUiGroup:AddCheckbox({Title = "Tracers", Default = false})
NewUiGroup:AddColorPicker({Title = "Chams Color", Default = Color3.new(1,1,1)})
NewUiGroup:TreePop()
end
NewUiGroup:AddProgressBar({
Title = "Health Bar",
Default = 0.75, -- From 0 to 1 (0% - 100%)
Flag = "MyProgressBar",
Description = "Shows health status (example)"
})
-- 2. RADIO BUTTON (Single selection from list, alternative to Dropdown)
NewUiGroup:AddRadioButton({
Title = "Target Mode",
Options = {"Nearest", "Lowest HP", "Mouse Position"}, -- Options
Default = "Nearest",
Flag = "TargetRadio",
Callback = function(Value)
print("Radio Selection changed to:", Value)
end
})
-- 3. GRAPH (Chart)
-- Useful for displaying FPS, Ping or currency amounts
NewUiGroup:AddGraph({
Title = "FPS Monitor",
Values = {0.1, 0.4, 0.3, 0.8, 0.5, 0.9, 0.2}, -- Initial data (from 0 to 1, or scalable)
Height = 50, -- Graph window height
Flag = "FPSGraph",
Description = "Real-time data visualization"
})
-- 4. IMAGE (Picture)
-- Can be used for logos or item previews
VisualsGroup:AddImage({
Image = "rbxassetid://18216647696", -- Replace with your ID
Size = UDim2.new(0, 100, 0, 100), -- Size
Description = "Script logo"
})
-- 5. IMAGE BUTTON (Image button)
VisualsGroup:AddImageButton({
Image = "rbxassetid://7733771472", -- Eye icon (example)
Size = UDim2.new(0, 40, 0, 40),
Description = "Click me!",
Callback = function()
print("Image Button Pressed!")
Library:Notify("Action", "Image Button Clicked", 2)
end
})
-- Vertical slider (for example, for adjusting jump height or FOV)
NewUiGroup:AddVerticalSlider({
Title = "Height",
Min = 0,
Max = 100,
Default = 50,
Height = 120, -- Height of the element itself in pixels
Flag = "VSlider1",
Callback = function(v)
print("Vertical Value:", v)
end
})
-- Selectable element - like a button but maintains pressed state
NewUiGroup:AddSelectable({
Title = "Silent Aim (Selectable)",
Default = false,
Flag = "Selectable1",
Callback = function(val)
print("Selected:", val)
end
})
-------------------------------------------------------------------------
-- LIVE UPDATE EXAMPLE (FOR GRAPH AND BAR)
-------------------------------------------------------------------------
task.spawn(function()
while true do
wait(0.5)
-- Update Progress Bar (HP change simulation)
if Library.Items["MyProgressBar"] then
local newHealth = math.random(30, 100) / 100
Library.Items["MyProgressBar"].Set(newHealth)
end
-- Update Graph (FPS simulation)
if Library.Items["FPSGraph"] then
local graphData = {}
for i = 1, 20 do -- Generate 20 points
table.insert(graphData, math.random(1, 100))
end
Library.Items["FPSGraph"].Set(graphData)
end
end
end)Comments section coming soon...