We use cookies on this site to enhance your user experience
Collapse Sidebar


This function returns true if the client has finished loading the game for the first time.

When all initial Instance|Instances in the game has finished replicating to the client, this function will return true.

Unless they are parented to ReplicatedFirst, LocalScript|LocalScripts will not run while the game has not loaded. The following snippet, ran from a LocalScript in ReplicatedFirst will yield until the game has loaded:

if not game:IsLoaded() then

See also

  • DataModel/Loaded, an event that fires when the game has loaded
  • Instance/WaitForChild, a function which can be used to wait for an individual Instance to replicate without having to wait for the whole game to


Return Type Summary

Whether the client has finished loading the game for the first time

Code Samples

Custom Loading Screen

This sample is a simple demonstration of how a custom loading screen can be implemented. To run this code it should be placed in a LocalScript and parented to ReplicatedFirst.

In this example, a basic loading screen will be created and shown until the game has loaded (for a minimum time of 3 seconds). Developers may wish to expand on this with more elegant GUI elements. When doing so ensure that all such elements are parented to ReplicatedFirst and fetched using Instance/WaitForChild to ensure they replicate correctly.

    local Players = game:GetService("Players")
    local ReplicatedFirst = game:GetService("ReplicatedFirst")
    local localPlayer = Players.LocalPlayer 
    local playerGui = localPlayer:WaitForChild("PlayerGui")
    local MIN_TIME = 3
    -- create a basic loading gui
    local screenGui = Instance.new("ScreenGui")
    local textLabel = Instance.new("TextLabel", screenGui)
    textLabel.Text = "Loading"
    textLabel.Position = UDim2.new(0.5, 0, 0.5, 0)
    textLabel.AnchorPoint = Vector2.new(0.5, 0.5)
    textLabel.Size = UDim2.new(1 , 0, 1, 100) -- make sure the topbar is covered
    textLabel.FontSize = Enum.FontSize.Size14
    screenGui.Parent = playerGui
    -- hide the default loading screen 
    -- loop
    local count = 0
    local startTick = tick()
    while true do 
    	local timeElapsed = tick() - startTick
    	-- if the game has loaded and the minimum time has elapsed then break the loop
    	if game:IsLoaded() and timeElapsed > MIN_TIME then
    	-- animate the text 
    	textLabel.Text = "Loading " .. string.rep(".",count)
    	count = (count + 1) % 4
    -- destroy the loading screen