Loading screens for FiveM
The one screen every player sees on every connect. Drag widgets onto a canvas, drop in a video background, and point your server at a single URL we host.
FAM-261023-261025-UL4B9this weekendTick it in your cart Halloween Edition36 maps, limited runlimited runShop the drop FREE TOOL · PERFORMANCE
The profiler tells you the truth about which resource is eating your frame, and then hands it to you as a Chrome timeline that is pinned to one frozen DevTools build and shows thousands of unlabelled bars. Drop the capture here and get the answer instead: the resources ranked by their own time, the loops inside them, the worst frames as flame charts, and what each pattern usually means. Nothing is uploaded — the file is read in this tab.
The file profiler saveJSON writes. It is read by this page and nothing else: there is no upload, no API call and no server involved — close the tab and it is gone.
HOW TO USE IT
Six steps. The first one is the one people skip, and skipping it wastes the other five.
profiler record 500. Five hundred frames is about eight seconds at 60 fps and is plenty.profiler saveJSON mycapture.json. The similarly named profiler save writes a binary msgpack file that nothing will open, including this page — although it will recognise it and tell you so rather than failing silently. Server captures land beside run.bat; client captures land in the FiveM application folder.BE PRECISE ABOUT IT
Most of what people believe about these files is guessed from the DevTools view. Here is what the file holds, where that comes from, and what no amount of reading it will tell you.
Every slice is two events — a begin and an end — carrying a timestamp in microseconds counted from the start of the recording, not from any clock you can compare against. There is no duration field anywhere in the file, so every length on this page is a subtraction and every self time is that minus the children.
A profiler record capture puts every slice on a single script thread under one root per frame, named Resource Manager Tick. A second thread carries only frame boundaries and screenshots. The per-resource threads you may have read about appear only in profiler resource mode.
A resource slice is named for why it was entered and then the resource in brackets — tick (chat) for a normal frame, event:playerSpawned (chat) for an event delivery. That is how this page separates work a resource does on its own schedule from work something else asked it to do.
The profiler does not instrument native invocation. Nothing in the file names DrawMarker, GetPlayerPed, SendNUIMessage or any other native, and no tool can recover them from it. Advice about those on this page is a pattern match on timing shape, and every finding that does it says so.
The line numbers you see are text baked into a Lua thread's name — the first and last line of the function, not the expensive line inside it. There is no structured source position, no call stack array and no sampled profile. For JavaScript and C# resources there is not even that.
There is a counter event with a field called jsHeapSizeUsed, because the file is shaped to be loadable by the Chrome timeline. What FiveM puts in it is a change in memory use rather than a heap size, it can be negative, and it is sampled every sixteenth scope. This page reports it and marks it unreliable.
The documented profiler page covers the commands profiler record, profiler status, profiler saveJSON and profiler view, and says the result is loaded in the Chrome DevTools performance panel. It does not describe the file's structure at all: it does not contain the word traceEvents, any field name, or the commands profiler save, record start, record stop or resource. Everything on this page about the structure was read off the emitting source, Profiler.cpp, rather than guessed — but because it is undocumented it is not a contract, and Cfx.re can change it without telling anybody. The parser here is deliberately tolerant: it accepts a bare event array and complete events with a duration field as well, even though current FiveM writes neither, and the What the file holds tab shows you exactly what it found so you can see when the shape has moved.
THE PATTERNS
Each of these is something the analyzer looks for by name. What it can measure and what it is inferring are kept apart.
Wait(0) inner loop that only spins while it is.PlayerPedId() or GetPlayerPed(-1) called every frame, often several times, when the value changes only when you respawn. Cache it outside the loop and refresh it on the spawn event.QUESTIONS
MORE
Drop a vehicle resource and get every broken link in it: a model with no .yft, a handling id with no block, a data_file line pointing at nothing, a casing mismatch that works on Windows and not on Linux.
server.cfg generatorThe config, with the start order explained and the combinations the server refuses refused here first.
All the free toolsThe references, the calculators and the generators.
FROM THE SHOP
The free tools and the paid work come out of the same place. These are the lines closest to what this page is about.
Grand opening: 25% off every product with FAM-261023-261025-UL4B9, until 25 October. It is applied at checkout.
The one screen every player sees on every connect. Drag widgets onto a canvas, drop in a video background, and point your server at a single URL we host.
One design, cut to every slot your server shows up in: the server list strip, the Discord header, the stream art, each composed for its own crop.

A native hud.gfx replacement rather than an NUI overlay, so it costs no frame time. Colours, shape and motion are yours before you pay.