--============================================================== -- MODERN LUA RUNNER UI -- Put this LocalScript in StarterPlayer > StarterPlayerScripts --============================================================== local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") --============================================================== -- COLORS --============================================================== local BG = Color3.fromRGB(8, 10, 17) local PANEL = Color3.fromRGB(15, 18, 29) local PANEL2 = Color3.fromRGB(20, 23, 37) local PANEL3 = Color3.fromRGB(27, 30, 47) local WHITE = Color3.fromRGB(240, 242, 250) local TEXT = Color3.fromRGB(205, 208, 222) local MUTED = Color3.fromRGB(130, 135, 155) local PURPLE = Color3.fromRGB(110, 65, 245) local BLUE = Color3.fromRGB(65, 105, 245) local GREEN = Color3.fromRGB(75, 220, 145) local YELLOW = Color3.fromRGB(245, 190, 80) local RED = Color3.fromRGB(240, 80, 95) --============================================================== -- HELPERS --============================================================== local function create(class, props, parent) local obj = Instance.new(class) for property, value in pairs(props) do obj[property] = value end obj.Parent = parent return obj end local function corner(parent, radius) local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, radius) c.Parent = parent return c end local function stroke(parent, transparency) local s = Instance.new("UIStroke") s.Color = Color3.fromRGB(75, 80, 105) s.Transparency = transparency or 0.5 s.Thickness = 1 s.Parent = parent return s end local function gradient(parent) local g = Instance.new("UIGradient") g.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, PURPLE), ColorSequenceKeypoint.new(1, BLUE) }) g.Rotation = 20 g.Parent = parent return g end local function tween(object, properties, time) local t = TweenService:Create( object, TweenInfo.new( time or 0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.Out ), properties ) t:Play() return t end --============================================================== -- GUI --============================================================== local gui = create("ScreenGui", { Name = "ModernLuaRunner", ResetOnSpawn = false, IgnoreGuiInset = true, DisplayOrder = 999, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, }, playerGui) --============================================================== -- BACKGROUND --============================================================== local background = create("Frame", { Name = "Background", Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.fromRGB(4, 5, 9), BorderSizePixel = 0, ZIndex = 1, }, gui) --============================================================== -- MAIN WINDOW --============================================================== local main = create("Frame", { Name = "Main", Size = UDim2.new(0.92, 0, 0.88, 0), Position = UDim2.fromScale(0.5, 0.5), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundColor3 = BG, BorderSizePixel = 0, ClipsDescendants = true, ZIndex = 10, }, gui) corner(main, 18) stroke(main, 0.35) --============================================================== -- HEADER --============================================================== local header = create("Frame", { Name = "Header", Size = UDim2.new(1, 0, 0, 68), BackgroundColor3 = Color3.fromRGB(11, 13, 22), BorderSizePixel = 0, ZIndex = 20, }, main) -- logo local logo = create("Frame", { Size = UDim2.fromOffset(42, 42), Position = UDim2.fromOffset(16, 13), BackgroundColor3 = PURPLE, BorderSizePixel = 0, ZIndex = 21, }, header) corner(logo, 12) gradient(logo) create("TextLabel", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Text = "▶", TextColor3 = WHITE, TextSize = 19, Font = Enum.Font.GothamBold, ZIndex = 22, }, logo) -- title create("TextLabel", { Size = UDim2.new(0, 300, 0, 24), Position = UDim2.fromOffset(70, 10), BackgroundTransparency = 1, Text = "LUA RUNNER", TextColor3 = WHITE, TextSize = 18, Font = Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 21, }, header) create("TextLabel", { Size = UDim2.new(0, 300, 0, 20), Position = UDim2.fromOffset(70, 34), BackgroundTransparency = 1, Text = "Client-Side Code Workspace", TextColor3 = MUTED, TextSize = 11, Font = Enum.Font.Gotham, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 21, }, header) --============================================================== -- WINDOW BUTTONS --============================================================== local function windowButton(text, x, textColor) local b = create("TextButton", { Size = UDim2.fromOffset(34, 34), Position = UDim2.new(1, x, 0, 17), BackgroundColor3 = PANEL2, Text = text, TextColor3 = textColor or TEXT, TextSize = 17, Font = Enum.Font.Gotham, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 25, }, header) corner(b, 9) b.MouseEnter:Connect(function() tween(b, { BackgroundColor3 = PANEL3 }, 0.12) end) b.MouseLeave:Connect(function() tween(b, { BackgroundColor3 = PANEL2 }, 0.12) end) return b end local minimize = windowButton("—", -126) local maximize = windowButton("□", -84) local close = windowButton("×", -42, Color3.fromRGB(230, 130, 140)) --============================================================== -- CONTENT --============================================================== local content = create("Frame", { Name = "Content", Size = UDim2.new(1, -24, 1, -80), Position = UDim2.fromOffset(12, 76), BackgroundTransparency = 1, ZIndex = 15, }, main) --============================================================== -- SIDEBAR --============================================================== local sidebar = create("Frame", { Size = UDim2.new(0, 185, 1, 0), BackgroundColor3 = PANEL, BorderSizePixel = 0, ZIndex = 20, }, content) corner(sidebar, 14) stroke(sidebar, 0.5) --============================================================== -- NAV BUTTON --============================================================== local function navButton(text, icon, y, selected) local b = create("TextButton", { Size = UDim2.new(1, -20, 0, 42), Position = UDim2.fromOffset(10, y), BackgroundColor3 = selected and PURPLE or PANEL, BackgroundTransparency = selected and 0 or 1, Text = "", BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 22, }, sidebar) corner(b, 9) if selected then gradient(b) end create("TextLabel", { Size = UDim2.fromOffset(35, 42), Position = UDim2.fromOffset(5, 0), BackgroundTransparency = 1, Text = icon, TextColor3 = selected and WHITE or MUTED, TextSize = 15, Font = Enum.Font.Gotham, ZIndex = 23, }, b) create("TextLabel", { Size = UDim2.new(1, -45, 1, 0), Position = UDim2.fromOffset(42, 0), BackgroundTransparency = 1, Text = text, TextColor3 = selected and WHITE or TEXT, TextSize = 12, Font = selected and Enum.Font.GothamMedium or Enum.Font.Gotham, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 23, }, b) return b end navButton("Editor", "", 14, true) navButton("Scripts", "▣", 62, false) navButton("Snippets", "{}", 110, false) navButton("Settings", "⚙", 158, false) navButton("About", "ⓘ", 206, false) -- divider create("Frame", { Size = UDim2.new(1, -30, 0, 1), Position = UDim2.fromOffset(15, 260), BackgroundColor3 = Color3.fromRGB(48, 51, 68), BorderSizePixel = 0, ZIndex = 22, }, sidebar) create("TextLabel", { Size = UDim2.new(1, -30, 0, 20), Position = UDim2.fromOffset(15, 274), BackgroundTransparency = 1, Text = "FILES", TextColor3 = MUTED, TextSize = 9, Font = Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 22, }, sidebar) -- files local function fileButton(name, y, active) local b = create("TextButton", { Size = UDim2.new(1, -20, 0, 36), Position = UDim2.fromOffset(10, y), BackgroundColor3 = active and PANEL3 or PANEL, BackgroundTransparency = active and 0 or 1, Text = "", BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 22, }, sidebar) corner(b, 8) create("TextLabel", { Size = UDim2.fromOffset(30, 36), Position = UDim2.fromOffset(8, 0), BackgroundTransparency = 1, Text = "", TextColor3 = active and Color3.fromRGB(160, 125, 255) or MUTED, TextSize = 11, Font = Enum.Font.Code, ZIndex = 23, }, b) create("TextLabel", { Size = UDim2.new(1, -50, 1, 0), Position = UDim2.fromOffset(40, 0), BackgroundTransparency = 1, Text = name, TextColor3 = active and WHITE or TEXT, TextSize = 11, Font = Enum.Font.Code, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 23, }, b) if active then local dot = create("Frame", { Size = UDim2.fromOffset(8, 8), Position = UDim2.new(1, -17, 0.5, -4), BackgroundColor3 = Color3.fromRGB(170, 95, 255), BorderSizePixel = 0, ZIndex = 24, }, b) corner(dot, 4) end end fileButton("main.lua", 303, true) fileButton("utility.lua", 343, false) fileButton("example.lua", 383, false) -- new script local newScript = create("TextButton", { Size = UDim2.new(1, -20, 0, 40), Position = UDim2.new(0, 10, 1, -50), BackgroundColor3 = PURPLE, Text = "+ New Script", TextColor3 = WHITE, TextSize = 12, Font = Enum.Font.GothamMedium, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 22, }, sidebar) corner(newScript, 10) gradient(newScript) --============================================================== -- RIGHT SIDE --============================================================== local right = create("Frame", { Size = UDim2.new(1, -197, 1, 0), Position = UDim2.fromOffset(197, 0), BackgroundTransparency = 1, ZIndex = 20, }, content) --============================================================== -- EDITOR --============================================================== local editor = create("Frame", { Size = UDim2.new(1, 0, 0.61, 0), BackgroundColor3 = PANEL, BorderSizePixel = 0, ClipsDescendants = true, ZIndex = 20, }, right) corner(editor, 14) stroke(editor, 0.5) -- tabs local tabs = create("Frame", { Size = UDim2.new(1, 0, 0, 45), BackgroundColor3 = Color3.fromRGB(12, 14, 23), BorderSizePixel = 0, ZIndex = 25, }, editor) local activeTab = create("TextButton", { Size = UDim2.fromOffset(125, 35), Position = UDim2.fromOffset(8, 5), BackgroundColor3 = Color3.fromRGB(34, 29, 55), Text = "main.lua ×", TextColor3 = WHITE, TextSize = 11, Font = Enum.Font.Code, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 26, }, tabs) corner(activeTab, 8) create("Frame", { Size = UDim2.new(1, 0, 0, 2), Position = UDim2.new(0, 0, 1, -2), BackgroundColor3 = PURPLE, BorderSizePixel = 0, ZIndex = 27, }, activeTab) local addTab = create("TextButton", { Size = UDim2.fromOffset(35, 35), Position = UDim2.fromOffset(140, 5), BackgroundColor3 = PANEL2, Text = "+", TextColor3 = TEXT, TextSize = 18, Font = Enum.Font.Gotham, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 26, }, tabs) corner(addTab, 8) -- editor body local editorBody = create("Frame", { Size = UDim2.new(1, 0, 1, -45), Position = UDim2.fromOffset(0, 45), BackgroundColor3 = Color3.fromRGB(10, 13, 21), BorderSizePixel = 0, ZIndex = 21, }, editor) -- line numbers local numbers = create("TextLabel", { Size = UDim2.fromOffset(38, 1), Position = UDim2.fromOffset(10, 12), BackgroundTransparency = 1, Text = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15", TextColor3 = Color3.fromRGB(65, 70, 90), TextSize = 12, Font = Enum.Font.Code, TextYAlignment = Enum.TextYAlignment.Top, TextXAlignment = Enum.TextXAlignment.Right, ZIndex = 23, }, editorBody) -- separator create("Frame", { Size = UDim2.new(0, 1, 1, -20), Position = UDim2.fromOffset(58, 10), BackgroundColor3 = Color3.fromRGB(43, 47, 64), BorderSizePixel = 0, ZIndex = 23, }, editorBody) -- code editor local codeBox = create("TextBox", { Size = UDim2.new(1, -75, 1, -20), Position = UDim2.fromOffset(70, 10), BackgroundTransparency = 1, BorderSizePixel = 0, MultiLine = true, ClearTextOnFocus = false, TextWrapped = false, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top, Font = Enum.Font.Code, TextSize = 13, TextColor3 = Color3.fromRGB(210, 215, 232), PlaceholderColor3 = Color3.fromRGB(75, 80, 100), Text = [[-- Welcome to Lua Runner -- Client-side workspace local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local function greet() print("Hello, " .. LocalPlayer.Name) end greet() -- Write your game's approved -- logic here]], ZIndex = 24, }, editorBody) --============================================================== -- BOTTOM AREA --============================================================== local bottom = create("Frame", { Size = UDim2.new(1, 0, 0.36, 0), Position = UDim2.new(0, 0, 0.64, 0), BackgroundTransparency = 1, ZIndex = 20, }, right) --============================================================== -- OUTPUT --============================================================== local output = create("Frame", { Size = UDim2.new(1, -150, 1, 0), BackgroundColor3 = PANEL, BorderSizePixel = 0, ZIndex = 20, }, bottom) corner(output, 14) stroke(output, 0.5) create("TextLabel", { Size = UDim2.fromOffset(150, 40), Position = UDim2.fromOffset(15, 0), BackgroundTransparency = 1, Text = ">_ OUTPUT", TextColor3 = Color3.fromRGB(155, 115, 255), TextSize = 11, Font = Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 25, }, output) local clearOutput = create("TextButton", { Size = UDim2.fromOffset(70, 30), Position = UDim2.new(1, -82, 0, 6), BackgroundColor3 = PANEL3, Text = "Clear", TextColor3 = TEXT, TextSize = 10, Font = Enum.Font.GothamMedium, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 26, }, output) corner(clearOutput, 8) local outputList = create("ScrollingFrame", { Size = UDim2.new(1, -20, 1, -70), Position = UDim2.fromOffset(10, 42), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarThickness = 2, CanvasSize = UDim2.new(0, 0, 0, 0), ZIndex = 25, }, output) local outputLayout = create("UIListLayout", { Padding = UDim.new(0, 4), SortOrder = Enum.SortOrder.LayoutOrder, }, outputList) local function addOutput(message, color) local label = create("TextLabel", { Size = UDim2.new(1, -5, 0, 20), BackgroundTransparency = 1, Text = message, TextColor3 = color or TEXT, TextSize = 11, Font = Enum.Font.Code, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 26, }, outputList) outputList.CanvasSize = UDim2.new( 0, 0, 0, outputLayout.AbsoluteContentSize.Y + 10 ) return label end addOutput("[10:24:01] ● Workspace initialized", GREEN) addOutput("[10:24:01] ● Ready for input", GREEN) --============================================================== -- ACTIONS --============================================================== local actions = create("Frame", { Size = UDim2.new(0, 140, 1, 0), Position = UDim2.new(1, -140, 0, 0), BackgroundColor3 = PANEL, BorderSizePixel = 0, ZIndex = 20, }, bottom) corner(actions, 14) stroke(actions, 0.5) local function actionButton(text, y, primary) local b = create("TextButton", { Size = UDim2.new(1, -20, 0, 42), Position = UDim2.fromOffset(10, y), BackgroundColor3 = primary and PURPLE or PANEL3, Text = text, TextColor3 = WHITE, TextSize = 11, Font = Enum.Font.GothamMedium, BorderSizePixel = 0, AutoButtonColor = false, ZIndex = 25, }, actions) corner(b, 10) if primary then gradient(b) end b.MouseEnter:Connect(function() if primary then tween(b, { BackgroundTransparency = 0.08 }, 0.12) else tween(b, { BackgroundColor3 = Color3.fromRGB(35, 39, 58) }, 0.12) end end) b.MouseLeave:Connect(function() if primary then tween(b, { BackgroundTransparency = 0 }, 0.12) else tween(b, { BackgroundColor3 = PANEL3 }, 0.12) end end) return b end local runButton = actionButton("▶ RUN", 10, true) local clearButton = actionButton("↻ CLEAR", 60, false) local copyButton = actionButton("▣ COPY", 110, false) -- workspace information create("Frame", { Size = UDim2.new(1, -20, 0, 1), Position = UDim2.fromOffset(10, 168), BackgroundColor3 = Color3.fromRGB(48, 51, 70), BackgroundTransparency = 0.3, BorderSizePixel = 0, ZIndex = 25, }, actions) create("TextLabel", { Size = UDim2.new(1, -20, 0, 20), Position = UDim2.fromOffset(10, 180), BackgroundTransparency = 1, Text = "WORKSPACE", TextColor3 = MUTED, TextSize = 9, Font = Enum.Font.GothamBold, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 25, }, actions) create("TextLabel", { Size = UDim2.new(1, -20, 0, 45), Position = UDim2.fromOffset(10, 203), BackgroundTransparency = 1, Text = "Local workspace\nReady", TextColor3 = TEXT, TextSize = 10, Font = Enum.Font.Gotham, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top, ZIndex = 25, }, actions) --============================================================== -- STATUS --============================================================== local status = create("TextLabel", { Size = UDim2.fromOffset(150, 20), Position = UDim2.new(0, 15, 1, -25), BackgroundTransparency = 1, Text = "● Ready", TextColor3 = GREEN, TextSize = 10, Font = Enum.Font.GothamMedium, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 30, }, main) --============================================================== -- SAFE RUN HOOK --============================================================== local function setStatus(text, color) status.Text = "● " .. text status.TextColor3 = color end local function submitCode(code) --========================================================== -- PUT YOUR OWN GAME'S APPROVED COMMAND HANDLER HERE. -- -- Do not use arbitrary loadstring/injected-code execution. --========================================================== print("[Lua Runner] Code submitted:") print(code) end runButton.MouseButton1Click:Connect(function() local code = codeBox.Text if code:gsub("%s+", "") == "" then setStatus("Nothing to run", YELLOW) addOutput("[" .. os.date("%H:%M:%S") .. "] ! Editor is empty", YELLOW) return end setStatus("Running...", YELLOW) submitCode(code) addOutput( "[" .. os.date("%H:%M:%S") .. "] ▶ Script submitted", GREEN ) setStatus("Ready", GREEN) end) clearButton.MouseButton1Click:Connect(function() codeBox.Text = "" setStatus("Editor cleared", MUTED) addOutput( "[" .. os.date("%H:%M:%S") .. "] ↻ Editor cleared", YELLOW ) end) clearOutput.MouseButton1Click:Connect(function() for _, child in ipairs(outputList:GetChildren()) do if child:IsA("TextLabel") then child:Destroy() end end setStatus("Output cleared", MUTED) end) copyButton.MouseButton1Click:Connect(function() -- Normal Roblox experiences do not have unrestricted -- clipboard access from a LocalScript. setStatus("Clipboard unavailable", YELLOW) addOutput( "[" .. os.date("%H:%M:%S") .. "] ! Clipboard unavailable", YELLOW ) end) newScript.MouseButton1Click:Connect(function() codeBox.Text = "-- New Luau script\n\n" setStatus("New script", GREEN) end) --============================================================== -- CLOSE --============================================================== close.MouseButton1Click:Connect(function() tween(main, { Size = UDim2.new(0.92, 0, 0, 0) }, 0.25) task.wait(0.25) gui:Destroy() end) --============================================================== -- MINIMIZE --============================================================== local minimized = false local normalSize = UDim2.new(0.92, 0, 0.88, 0) minimize.MouseButton1Click:Connect(function() if minimized then tween(main, { Size = normalSize }, 0.25) content.Visible = true status.Visible = true minimized = false else tween(main, { Size = UDim2.new(0.92, 0, 0, 68) }, 0.25) content.Visible = false status.Visible = false minimized = true end end) --============================================================== -- MAXIMIZE --============================================================== local maximized = false maximize.MouseButton1Click:Connect(function() if maximized then tween(main, { Size = normalSize }, 0.25) maximized = false else tween(main, { Size = UDim2.new(0.97, 0, 0.94, 0) }, 0.25) maximized = true end end) --============================================================== -- DRAGGING --============================================================== local dragging = false local dragStart local startPos header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = main.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart main.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) --============================================================== -- F8 TOGGLE --============================================================== UserInputService.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == Enum.KeyCode.F8 then gui.Enabled = not gui.Enabled end if input.KeyCode == Enum.KeyCode.Return then if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.RightControl) then runButton:Activate() end end end) print("Modern Lua Runner loaded successfully.")