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.

  1. Insert a LocalScript into ReplicatedFirst and paste the code. It builds the screen in code, so no GUI setup is needed.

The script

ReplicatedFirst > LoadingScreen (LocalScript)
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.
  • RemoveDefaultLoadingScreen hides Roblox's own screen once yours is visible.
  • game.Loaded fires 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.

Keep reading