SIMPLE UI MADE BY ME OPENSOURCE CODE
Key RequiredUniversal

SIMPLE UI MADE BY ME OPENSOURCE CODE

Universal Scriptblossomhubsblossomhubs 270 views 10 executesUpdated Jan 21, 2026
2.5/ 5(2 votes)
1150% Positive
Lua Script•350 lines (11132 chars)
-- Services
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "UniversalUIGUI"
screenGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui")
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.ResetOnSpawn = false

task.wait(0.1)

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 400, 0, 300)
mainFrame.BackgroundColor3 = Color3.fromRGB(45, 45, 50)
mainFrame.BorderSizePixel = 0
mainFrame.ClipsDescendants = true
mainFrame.Parent = screenGui

local function centerFrame()
    if not screenGui or not mainFrame then return end
    if not screenGui.AbsoluteSize or not mainFrame.AbsoluteSize then return end
    
    local screenSize = screenGui.AbsoluteSize
    local frameSize = mainFrame.AbsoluteSize
    
    if screenSize.X > 0 and frameSize.X > 0 then
        local centerX = (screenSize.X - frameSize.X) / 2
        local centerY = (screenSize.Y - frameSize.Y) / 2
        
        mainFrame.Position = UDim2.fromOffset(centerX, centerY)
    end
end

task.spawn(function()
    task.wait(0.2)
    if mainFrame and mainFrame.Parent then
        centerFrame()
    end
end)

local recenterDebounce = false
screenGui:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
    if not recenterDebounce then
        recenterDebounce = true
        task.wait(0.1)
        if mainFrame and mainFrame.Parent then
            centerFrame()
        end
        recenterDebounce = false
    end
end)

local uiCorner = Instance.new("UICorner")
uiCorner.CornerRadius = UDim.new(0, 8)
uiCorner.Parent = mainFrame

local uiStroke = Instance.new("UIStroke")
uiStroke.Color = Color3.fromRGB(100, 100, 110)
uiStroke.Thickness = 1
uiStroke.Parent = mainFrame

local header = Instance.new("Frame")
header.Name = "Header"
header.Size = UDim2.new(1, 0, 0, 40)
header.Position = UDim2.new(0, 0, 0, 0)
header.BackgroundColor3 = Color3.fromRGB(60, 60, 65)
header.BorderSizePixel = 0
header.ZIndex = 10
header.Parent = mainFrame

local headerCorner = Instance.new("UICorner")
headerCorner.CornerRadius = UDim.new(0, 8, 0, 0)
headerCorner.Parent = header

-- CHANGED TITLE HERE
local title = Instance.new("TextLabel")
title.Name = "Title"
title.Size = UDim2.new(1, -100, 1, 0)
title.Position = UDim2.new(0, 15, 0, 0)
title.BackgroundTransparency = 1
title.Text = "universal ui made by blossom"  -- Changed from "BLOSSOM HUB"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextSize = 18
title.Font = Enum.Font.GothamBold
title.TextXAlignment = Enum.TextXAlignment.Left
title.ZIndex = 11
title.Parent = header

local minimizeButton = Instance.new("TextButton")
minimizeButton.Name = "MinimizeButton"
minimizeButton.Size = UDim2.new(0, 30, 0, 30)
minimizeButton.Position = UDim2.new(1, -70, 0, 5)
minimizeButton.BackgroundColor3 = Color3.fromRGB(70, 70, 75)
minimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeButton.Text = "━"
minimizeButton.TextSize = 18
minimizeButton.Font = Enum.Font.GothamBold
minimizeButton.ZIndex = 11
minimizeButton.Parent = header

local minimizeCorner = Instance.new("UICorner")
minimizeCorner.CornerRadius = UDim.new(0, 4)
minimizeCorner.Parent = minimizeButton

local closeButton = Instance.new("TextButton")
closeButton.Name = "CloseButton"
closeButton.Size = UDim2.new(0, 30, 0, 30)
closeButton.Position = UDim2.new(1, -35, 0, 5)
closeButton.BackgroundColor3 = Color3.fromRGB(70, 70, 75)
closeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
closeButton.Text = "✕"
closeButton.TextSize = 18
closeButton.Font = Enum.Font.GothamBold
closeButton.ZIndex = 11
closeButton.Parent = header

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 4)
closeCorner.Parent = closeButton

-- Changed to ScrollingFrame for scroll functionality
local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Name = "ContentScroller"
scrollFrame.Size = UDim2.new(1, -20, 1, -60)
scrollFrame.Position = UDim2.new(0, 10, 0, 50)
scrollFrame.BackgroundColor3 = Color3.fromRGB(55, 55, 60)
scrollFrame.BackgroundTransparency = 0
scrollFrame.BorderSizePixel = 0
scrollFrame.ScrollBarThickness = 8
scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 110)
scrollFrame.ScrollingDirection = Enum.ScrollingDirection.Y
scrollFrame.VerticalScrollBarInset = Enum.ScrollBarInset.Always
scrollFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollFrame.ZIndex = 5
scrollFrame.Parent = mainFrame

local contentCorner = Instance.new("UICorner")
contentCorner.CornerRadius = UDim.new(0, 6)
contentCorner.Parent = scrollFrame

local contentStroke = Instance.new("UIStroke")
contentStroke.Color = Color3.fromRGB(80, 80, 85)
contentStroke.Thickness = 1
contentStroke.Parent = scrollFrame

-- Create a container for content inside the scroll frame
local contentContainer = Instance.new("Frame")
contentContainer.Name = "ContentContainer"
contentContainer.Size = UDim2.new(1, 0, 0, 0)
contentContainer.BackgroundTransparency = 1
contentContainer.Parent = scrollFrame

-- Set up automatic canvas sizing
contentContainer:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
    local totalHeight = 0
    for _, child in ipairs(contentContainer:GetChildren()) do
        if child:IsA("GuiObject") then
            totalHeight = totalHeight + child.AbsoluteSize.Y + 5 -- 5 pixel spacing
        end
    end
    scrollFrame.CanvasSize = UDim2.new(0, 0, 0, totalHeight)
end)

-- Add some empty elements to demonstrate scrolling (completely empty as requested)
-- Note: The UI is intentionally left empty with no features as requested

minimizeButton.MouseEnter:Connect(function()
    if minimizeButton then
        TweenService:Create(minimizeButton, TweenInfo.new(0.2), {
            BackgroundColor3 = Color3.fromRGB(90, 90, 95)
        }):Play()
    end
end)

minimizeButton.MouseLeave:Connect(function()
    if minimizeButton then
        TweenService:Create(minimizeButton, TweenInfo.new(0.2), {
            BackgroundColor3 = Color3.fromRGB(70, 70, 75)
        }):Play()
    end
end)

closeButton.MouseEnter:Connect(function()
    if closeButton then
        TweenService:Create(closeButton, TweenInfo.new(0.2), {
            BackgroundColor3 = Color3.fromRGB(220, 80, 80)
        }):Play()
    end
end)

closeButton.MouseLeave:Connect(function()
    if closeButton then
        TweenService:Create(closeButton, TweenInfo.new(0.2), {
            BackgroundColor3 = Color3.fromRGB(70, 70, 75)
        }):Play()
    end
end)

local isMinimized = false
minimizeButton.MouseButton1Click:Connect(function()
    if not mainFrame or not scrollFrame then return end
    
    isMinimized = not isMinimized
    
    if isMinimized then
        minimizeButton.Text = "+"
        
        if not mainFrame:GetAttribute("OriginalSize") then
            mainFrame:SetAttribute("OriginalSize", mainFrame.Size)
        end
        
        TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
            Size = UDim2.new(0, 400, 0, 40)
        }):Play()
        
        task.wait(0.2)
        if scrollFrame then
            scrollFrame.Visible = false
        end
    else
        minimizeButton.Text = "━"
        
        local originalSize = mainFrame:GetAttribute("OriginalSize") or UDim2.new(0, 400, 0, 300)
        
        if scrollFrame then
            scrollFrame.Visible = true
        end
        
        TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
            Size = originalSize
        }):Play()
    end
end)

local isClosing = false
closeButton.MouseButton1Click:Connect(function()
    if isClosing then return end
    isClosing = true
    
    local fadeInfo = TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
    
    TweenService:Create(mainFrame, fadeInfo, {
        BackgroundTransparency = 1
    }):Play()
    
    local descendants = mainFrame:GetDescendants()
    for _, child in ipairs(descendants) do
        if child:IsA("TextLabel") or child:IsA("TextButton") then
            TweenService:Create(child, fadeInfo, {
                TextTransparency = 1
            }):Play()
        elseif child:IsA("Frame") then
            TweenService:Create(child, fadeInfo, {
                BackgroundTransparency = 1
            }):Play()
        elseif child:IsA("UIStroke") then
            TweenService:Create(child, fadeInfo, {
                Transparency = 1
            }):Play()
        end
    end
    
    task.wait(0.5)
    if screenGui and screenGui.Parent then
        screenGui:Destroy()
    end
end)

local isDragging = false
local dragStart, frameStart

header.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or 
       input.UserInputType == Enum.UserInputType.Touch then
        
        local mousePos = input.Position
        if minimizeButton and closeButton then
            local minBtnPos = minimizeButton.AbsolutePosition
            local closeBtnPos = closeButton.AbsolutePosition
            local btnSize = minimizeButton.AbsoluteSize
            
            if mousePos.X >= minBtnPos.X and mousePos.X <= closeBtnPos.X + btnSize.X then
                return
            end
        end
        
        isDragging = true
        dragStart = input.Position
        frameStart = mainFrame.Position
        
        local function onInputEnd()
            isDragging = false
        end
        
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            input:GetPropertyChangedSignal("UserInputState"):Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    onInputEnd()
                end
            end)
        else
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    onInputEnd()
                end
            end)
        end
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if isDragging and mainFrame then
        if input.UserInputType == Enum.UserInputType.MouseMovement or 
           input.UserInputType == Enum.UserInputType.Touch then
            
            local delta = input.Position - dragStart
            mainFrame.Position = UDim2.new(
                frameStart.X.Scale,
                frameStart.X.Offset + delta.X,
                frameStart.Y.Scale,
                frameStart.Y.Offset + delta.Y
            )
        end
    end
end)

screenGui.AncestryChanged:Connect(function()
    if not screenGui.Parent then
        if screenGui then
            screenGui:Destroy()
        end
    end
end)

return {
    GUI = screenGui,
    MainFrame = mainFrame,
    ScrollFrame = scrollFrame,
    ContentContainer = contentContainer,
    Destroy = function()
        if screenGui and screenGui.Parent then
            screenGui:Destroy()
        end
    end
}

Features & Information

this are UI for everyone who lazy make own UI i'll give my simple UI 👍

Community Comments (2)

M0nkeyDLuffyM0nkeyDLuffyJan 21, 2026

Mf make a Ui using Ai and suddenly bro's a scripter🤣

gl1tchkiddgl1tchkiddJan 21, 2026

i will not use this skidded * ui who was made by ai

More Scripts for Universal Scripts