Free gui
Key RequiredUniversal

Free gui

Universal ScriptLoffyLORDLoffyLORD 955 views 438 executesUpdated Jan 3, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•282 lines (10705 chars)
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

local THEMES = {
	Dark = {
		Background = Color3.fromRGB(20, 20, 20),
		Sidebar = Color3.fromRGB(28, 28, 28),
		Text = Color3.fromRGB(255, 255, 255),
		TextSec = Color3.fromRGB(160, 160, 160),
		Accent = Color3.fromRGB(0, 170, 255),
		Line = Color3.fromRGB(40, 40, 40)
	},
	Light = {
		Background = Color3.fromRGB(255, 255, 255),
		Sidebar = Color3.fromRGB(240, 240, 240),
		Text = Color3.fromRGB(30, 30, 30),
		TextSec = Color3.fromRGB(80, 80, 80),
		Accent = Color3.fromRGB(0, 120, 215),
		Line = Color3.fromRGB(220, 220, 220)
	}
}

local LANGS = {
	{Name = "English", Home = "Home", Settings = "Settings", Mode = "Mode: ", Lang = "Language: English", Welcome = "Welcome back, " .. player.DisplayName .. " (@" .. player.Name .. ")!"},
	{Name = "VietNamese", Home = "Trang chủ", Settings = "Cài đặt", Mode = "Chế độ: ", Lang = "Ngôn ngữ: Tiếng Việt", Welcome = "Chào mừng trở lại, " .. player.DisplayName .. " (@" .. player.Name .. ")!"},
	{Name = "French", Home = "Accueil", Settings = "Paramètres", Mode = "Mode: ", Lang = "Langue: Français", Welcome = "Bon retour, " .. player.DisplayName .. "!"},
	{Name = "Japanese", Home = "ホーム", Settings = "設定", Mode = "モード: ", Lang = "言語: 日本語", Welcome = "おかえりなさい, " .. player.DisplayName .. "!"},
	{Name = "Korean", Home = "홈", Settings = "설정", Mode = "모드: ", Lang = "언어: 한국어", Welcome = "환영합니다, " .. player.DisplayName .. "!"},
	{Name = "Chinese", Home = "首页", Settings = "设置", Mode = "模式: ", Lang = "语言: 中文", Welcome = "欢迎回来, " .. player.DisplayName .. "!"},
	{Name = "German", Home = "Startseite", Settings = "Einstellungen", Mode = "Modus: ", Lang = "Sprache: Deutsch", Welcome = "Willkommen zurück!"},
	{Name = "Russian", Home = "Главная", Settings = "Настройки", Mode = "Режим: ", Lang = "Язык: Русский", Welcome = "С возвращением!"},
	{Name = "Spanish", Home = "Inicio", Settings = "Ajustes", Mode = "Modo: ", Lang = "Idioma: Español", Welcome = "¡Bienvenido!"},
	{Name = "Portuguese", Home = "Início", Settings = "Ajustes", Mode = "Modo: ", Lang = "Idioma: Português", Welcome = "Bem-vindo!"},
	{Name = "Thai", Home = "หน้าหลัก", Settings = "การตั้งค่า", Mode = "โหมด: ", Lang = "ภาษา: ไทย", Welcome = "ยินดีต้อนรับกลับ!"},
	{Name = "Italian", Home = "Home", Settings = "Impostazioni", Mode = "Modalità: ", Lang = "Lingua: Italiano", Welcome = "Bentornato!"}
}

local currentTheme = "Dark"
local langIdx = 1
local tabBtns = {}

local notifyGui = Instance.new("ScreenGui", playerGui)
local notifyHolder = Instance.new("Frame", notifyGui)
notifyHolder.Size = UDim2.new(0, 300, 1, 0)
notifyHolder.Position = UDim2.new(1, -310, 0, 0)
notifyHolder.BackgroundTransparency = 1
Instance.new("UIListLayout", notifyHolder).VerticalAlignment = Enum.VerticalAlignment.Bottom

local function ShowNotify(title, text)
	local theme = THEMES[currentTheme]
	local f = Instance.new("Frame", notifyHolder)
	f.Size = UDim2.new(1, 0, 0, 70)
	f.BackgroundColor3 = theme.Sidebar
	Instance.new("UICorner", f)
	local s = Instance.new("UIStroke", f)
	s.Color = theme.Accent
	s.Thickness = 2
	
	local t = Instance.new("TextLabel", f)
	t.Text = title
	t.Size = UDim2.new(1, -10, 0, 25)
	t.Position = UDim2.new(0, 5, 0, 5)
	t.TextColor3 = theme.Accent
	t.BackgroundTransparency = 1
	t.Font = Enum.Font.GothamBold
	t.TextXAlignment = Enum.TextXAlignment.Left
	
	local d = Instance.new("TextLabel", f)
	d.Text = text
	d.Size = UDim2.new(1, -10, 0, 35)
	d.Position = UDim2.new(0, 5, 0, 30)
	d.TextColor3 = theme.Text
	d.BackgroundTransparency = 1
	d.Font = Enum.Font.Gotham
	d.TextWrapped = true
	d.TextXAlignment = Enum.TextXAlignment.Left
	
	task.delay(6, function() f:Destroy() end)
end

local screenGui = Instance.new("ScreenGui", playerGui)
screenGui.Name = "LoffyOpenSource_V3_2"
screenGui.ResetOnSpawn = false

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 600, 0, 350)
mainFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
mainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
mainFrame.BackgroundColor3 = THEMES[currentTheme].Background
mainFrame.ClipsDescendants = true
mainFrame.Parent = screenGui

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

local uiStroke = Instance.new("UIStroke", mainFrame)
uiStroke.Thickness = 1.5
uiStroke.Color = THEMES[currentTheme].Line

local sidebar = Instance.new("Frame", mainFrame)
sidebar.Size = UDim2.new(0, 160, 1, 0)
sidebar.BackgroundColor3 = THEMES[currentTheme].Sidebar
sidebar.BorderSizePixel = 0
Instance.new("UICorner", sidebar).CornerRadius = UDim.new(0, 12)

local logo = Instance.new("TextLabel", sidebar)
logo.Text = "LOFFY | OPENSOURCE ( TYPE YOUR NAME HUB )"
logo.Size = UDim2.new(1, 0, 0, 60)
logo.Font = Enum.Font.GothamBold
logo.TextSize = 15
logo.BackgroundTransparency = 1

RunService.RenderStepped:Connect(function()
	logo.TextColor3 = Color3.fromHSV(tick() % 5 / 5, 0.7, 1)
end)

local navList = Instance.new("Frame", sidebar)
navList.Size = UDim2.new(1, 0, 1, -100)
navList.Position = UDim2.new(0, 0, 0, 70)
navList.BackgroundTransparency = 1
Instance.new("UIListLayout", navList).HorizontalAlignment = Enum.HorizontalAlignment.Center

local closeBtn = Instance.new("TextButton", mainFrame)
closeBtn.Size = UDim2.new(0, 28, 0, 28)
closeBtn.Position = UDim2.new(1, -35, 0, 10)
closeBtn.BackgroundColor3 = Color3.fromRGB(255, 70, 70)
closeBtn.Text = "×"
closeBtn.TextColor3 = Color3.new(1, 1, 1)
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 20
Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 6)

local function closeUI()
	local closeTweenInfo = TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.In)
	local tween = TweenService:Create(mainFrame, closeTweenInfo, {
		Size = UDim2.new(0, 0, 0, 0),
		BackgroundTransparency = 1
	})
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {Transparency = 1}):Play()
	TweenService:Create(sidebar, TweenInfo.new(0.2), {BackgroundTransparency = 1}):Play()
	tween:Play()
	tween.Completed:Connect(function()
		screenGui:Destroy()
	end)
end
closeBtn.MouseButton1Click:Connect(closeUI)

local resizeHandle = Instance.new("ImageButton", mainFrame)
resizeHandle.Size = UDim2.new(0, 25, 0, 25)
resizeHandle.Position = UDim2.new(1, -25, 1, -25)
resizeHandle.BackgroundTransparency = 1
resizeHandle.Image = "rbxassetid://6031945395"
resizeHandle.ImageColor3 = THEMES[currentTheme].Accent
resizeHandle.ZIndex = 20

local dragging, resizing = false, false
local dragStart, startPos, startSize
mainFrame.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 and not resizing then
		dragging = true
		dragStart = input.Position
		startPos = mainFrame.Position
	end
end)
resizeHandle.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		resizing = true
		dragStart = input.Position
		startSize = mainFrame.Size
		dragging = false
	end
end)
UserInputService.InputChanged:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseMovement then
		if dragging then
			local delta = input.Position - dragStart
			mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
		elseif resizing then
			local delta = input.Position - dragStart
			mainFrame.Size = UDim2.new(0, math.max(150, startSize.X.Offset + delta.X), 0, math.max(150, startSize.Y.Offset + delta.Y))
		end
	end
end)
UserInputService.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		dragging = false
		resizing = false
	end
end)

local contentArea = Instance.new("Frame", mainFrame)
contentArea.Size = UDim2.new(1, -175, 1, -60)
contentArea.Position = UDim2.new(0, 170, 0, 50)
contentArea.BackgroundTransparency = 1

local pages = {}
local function createPage(name)
	local p = Instance.new("ScrollingFrame", contentArea)
	p.Size = UDim2.new(1, 0, 1, 0)
	p.BackgroundTransparency = 1
	p.Visible = false
	p.ScrollBarThickness = 0
	pages[name] = p
	return p
end

local homePage = createPage("Home")
local settingPage = createPage("Settings")
homePage.Visible = true

local themeBtn = Instance.new("TextButton", settingPage)
themeBtn.Size = UDim2.new(0, 200, 0, 45)
themeBtn.BackgroundColor3 = THEMES[currentTheme].Sidebar
themeBtn.Text = "Mode: Dark Mode"
themeBtn.TextColor3 = THEMES[currentTheme].Text
themeBtn.Font = Enum.Font.GothamMedium
Instance.new("UICorner", themeBtn)

local langBtn = Instance.new("TextButton", settingPage)
langBtn.Size = UDim2.new(0, 200, 0, 45)
langBtn.Position = UDim2.new(0, 0, 0, 55)
langBtn.BackgroundColor3 = THEMES[currentTheme].Sidebar
langBtn.Text = "Language: English"
langBtn.TextColor3 = THEMES[currentTheme].Text
langBtn.Font = Enum.Font.GothamMedium
Instance.new("UICorner", langBtn)

local function updateLanguage()
	local l = LANGS[langIdx]
	local t = (currentTheme == "Dark" and "Dark Mode" or "Light Mode")
	if l.Name == "VietNamese" then t = (currentTheme == "Dark" and "Tối" or "Sáng") end
	themeBtn.Text = l.Mode .. t
	langBtn.Text = l.Lang
	tabBtns["Home"].Text = l.Home
	tabBtns["Settings"].Text = l.Settings
end

themeBtn.MouseButton1Click:Connect(function()
	currentTheme = (currentTheme == "Dark" and "Light" or "Dark")
	local t = THEMES[currentTheme]
	local ti = TweenInfo.new(0.3)
	TweenService:Create(mainFrame, ti, {BackgroundColor3 = t.Background}):Play()
	TweenService:Create(sidebar, ti, {BackgroundColor3 = t.Sidebar}):Play()
	TweenService:Create(uiStroke, ti, {Color = t.Line}):Play()
	TweenService:Create(themeBtn, ti, {BackgroundColor3 = t.Sidebar, TextColor3 = t.Text}):Play()
	TweenService:Create(langBtn, ti, {BackgroundColor3 = t.Sidebar, TextColor3 = t.Text}):Play()
	resizeHandle.ImageColor3 = t.Accent
	updateLanguage()
end)

langBtn.MouseButton1Click:Connect(function()
	langIdx = langIdx + 1
	if langIdx > #LANGS then langIdx = 1 end
	updateLanguage()
	ShowNotify(LANGS[langIdx].Name, "Language Updated!")
end)

local function addTab(name)
	local btn = Instance.new("TextButton", navList)
	btn.Size = UDim2.new(0.9, 0, 0, 40)
	btn.BackgroundTransparency = 1
	btn.Text = name
	btn.Font = Enum.Font.GothamMedium
	btn.TextColor3 = THEMES[currentTheme].TextSec
	btn.TextSize = 14
	tabBtns[name] = btn
	btn.MouseButton1Click:Connect(function()
		for _, pg in pairs(pages) do pg.Visible = false end
		pages[name].Visible = true
	end)
end

addTab("Home")
addTab("Settings")


ShowNotify(LANGS[langIdx].Name, LANGS[langIdx].Welcome)

Features & Information

Multi language System: Supports 12 different languages including English, Vietnamese, French, Japanese, Korean, Chinese, German, Russian, Spanish, Portuguese, Thai, and Italian. Theme Customization: Features a built in toggle to switch between Dark Mode and Light Mode seamlessly. Notification System: Includes a custom notification handler that displays pop-up alerts at the bottom right of the screen with smooth animations. Resizable Interface: Users can dynamically change the size of the UI by dragging the resize handle at the bottom right corner. Draggable UI: The main window can be moved anywhere on the screen by clicking and dragging the frame. RGB Rainbow Logo: The logo features a smooth color-cycling (rainbow) effect that updates every frame. Tab Management System: Organizes content into separate pages (e.g., Home and Settings) for a clean user experience. Smooth Tweening Animations: Utilizes TweenService for professional-looking window transitions, opening/closing effects, and color fades. Cross-Platform Compatibility: Designed to work with both mouse input and touch devices using UserInputService. Personalized Welcome: Automatically detects and displays the player's DisplayName and Username upon execution

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts