Creator playbook Guide

FiveM loading screen tutorial: a minimal page and real progress events

Create a small FiveM loading-screen resource with an accessible progress indicator. Understand loadscreen declarations, progress messages and shutdown choices.

FiveM loading screen tutorial: a minimal page and real progress events — original Magnate explanatory diagram Original explanatory diagram · Not game footage

Begin with the loading page, not a large theme

This original example targets current FiveM/GTA V development. It has not been run in a FiveM session and does not claim GTA VI support. Create a development resource containing fxmanifest.lua and loading.html. The resource-manifest tutorial explains the folder placement if this is your first resource.

The Cfx loading-screen guide uses the loadscreen declaration for the special joining screen. Keep this initial resource small: one local HTML file lets you investigate installation and message behavior without also diagnosing external fonts, video playback or an asset bundle.

fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
loadscreen 'loading.html'
files { 'loading.html' }

Show the reported progress without inventing an ETA

Put the example below in loading.html. Its progress element has an associated label, and its status text starts with a waiting message. The event handler ignores unrelated messages and rejects values that are not finite numbers before updating the display.

The fraction is clamped between zero and one to keep unexpected values from producing an invalid visual state. The label says reported progress because a percentage alone does not establish how many seconds remain, whether a framework is ready or when a player will be able to move.

loading.html — original minimal example
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Server loading</title>
<body>
<h1>Joining the server</h1>
<label for="progress">Loading progress</label>
<progress id="progress" value="0" max="1"></progress>
<p id="status" role="status">Waiting for progress information.</p>
<script>
const bar = document.querySelector('#progress');
const status = document.querySelector('#status');
window.addEventListener('message', ({ data }) => {
  if (!data || data.eventName !== 'loadProgress') return;
  if (typeof data.loadFraction !== 'number' || !Number.isFinite(data.loadFraction)) return;
  const fraction = Math.min(1, Math.max(0, data.loadFraction));
  bar.value = fraction;
  status.textContent = `Reported loading progress: ${Math.round(fraction * 100)}%`;
});
</script>
</body>
</html>

Keep progress reporting separate from shutdown

Cfx documents a default loading-screen lifecycle and an optional manual-shutdown directive. This small example does not enable manual shutdown. Do not add that option merely because a downloaded theme includes it: decide which part of your application owns completion first.

If you later choose manual control, identify the readiness signal and the code path that closes the loading UI. Write those down before adding an animation. An attractive fade-out cannot fix a missing completion path, and reaching the end of a progress bar is not a substitute for application readiness.

Test the lightweight version before adding media

In your own development environment, verify a new connection, reconnection and a failed connection path. Observe the status text and game/client logs. Test a version without added media as a baseline, then add one asset at a time so you can isolate the change that caused a blank page or longer preparation.

For a video theme, assess the extra download and decode work separately from game loading. A looping background can continue after progress stops changing, which makes motion a poor health indicator. Keep visible text useful even when the background media fails to load.

Loading-screen symptoms and the next inspection
Observed problemInspect before changing the design
Default screen still appearsResource startup and loadscreen path
Custom page is blankPackaged files and HTML asset paths
Progress text never changesMessage event name and fraction value
Progress says 100% but joining continuesReadiness and shutdown logic separately
Theme works without video onlyMedia size, format and browser errors

Questions, answered.

Is loadscreen the same as ui_page?

No. Cfx documents loadscreen for the special joining/loading frame. ui_page declares an ordinary resource UI page.

Does 100% loading progress mean the player has spawned?

Do not infer that from the percentage alone. Verify the application’s readiness and loading-screen shutdown behavior separately.

Sources & editorial notes

Source review: October 6, 2026. Platform announcements can change. This guide separates published facts from Magnate’s original analysis and preparation advice.

  1. Cfx — Loading screens Official loading frame, progress messages and lifecycle documentation.
  2. Cfx — Resource manifest Official manifest metadata and file declarations.

Published by an independent editorial brand. Read our editorial standards.

Find your next move

Search the Magnate guide library.

Browse every guide