Roblox loading screen script
Replace Roblox's default loading screen with your own: it appears instantly, waits until the game has loaded, then fades out.
LocalScriptUpdated November 2, 2026
Where to put it
LocalScript — ReplicatedFirst > LoadingScreen (LocalScript). It runs on each player's device.
- Insert a LocalScript into ReplicatedFirst and paste the code. It builds the screen in code, so no GUI setup is needed.
The script
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local gui = Instance.new("ScreenGui")
gui.IgnoreGuiInset = true
gui.DisplayOrder = 100
gui.Parent = playerGui
local background = Instance.new("Frame")
background.Size = UDim2.fromScale(1, 1)
background.BackgroundColor3 = Color3.fromRGB(12, 14, 20)
background.Parent = gui
local label = Instance.new("TextLabel")
label.Size = UDim2.fromScale(1, 0.1)
label.Position = UDim2.fromScale(0, 0.45)
label.BackgroundTransparency = 1
label.Text = "Loading..."
label.TextColor3 = Color3.new(1, 1, 1)
label.TextScaled = true
label.Font = Enum.Font.BuilderSansBold
label.Parent = background
ReplicatedFirst:RemoveDefaultLoadingScreen()
if not game:IsLoaded() then
game.Loaded:Wait()
end
task.wait(1) -- a moment for the first frame of the map
local info = TweenInfo.new(0.6)
TweenService:Create(background, info, { BackgroundTransparency = 1 }):Play()
TweenService:Create(label, info, { TextTransparency = 1 }):Play()
task.wait(0.6)
gui:Destroy()How it works
- Scripts in ReplicatedFirst run before the rest of the game loads, so the screen shows immediately.
RemoveDefaultLoadingScreenhides Roblox's own screen once yours is visible.game.Loadedfires when the place's content has arrived; then the screen fades out.
Variations
Preload images and sounds
Before fading, call ContentProvider:PreloadAsync({ ... }) with your UI images or music so they don't pop in. Keep the list short — preloading everything makes loading slower.
A skip button
Add a TextButton that destroys the GUI. Players who have loaded before appreciate it.
Common mistakes
- Putting the script in StarterGui — it runs too late, after the default screen.
- Preloading the whole game with
PreloadAsync(workspace:GetDescendants()): it makes the wait much longer. - Forgetting
IgnoreGuiInset, which leaves a gap at the top of the screen.
FAQ
Where do I put a loading screen script in Roblox?
In ReplicatedFirst. Scripts there run first on the client, before the rest of the game is replicated.
Why does my loading screen flash and disappear?
Roblox may already have loaded the place, especially in Studio. Check game:IsLoaded() first and keep a short minimum display time, as this script does.