FiveM Resource Errors: Couldn't load resource and All the Others
Couldn't find versus Couldn't load, missing dependencies, manifest errors, escrow, Awaiting scripts and streaming warnings - what each error means, and who can see it.
Read this distinction first - it solves half the cases
Two errors look alike and get confused constantly. They come from different machines and have nothing to do with each other:
| Error | Where it happens | What it means |
|---|---|---|
Couldn't find resource <name> |
The server | The server does not know that resource at all |
Couldn't load resource <name> |
The player's client | The file downloaded but could not be unpacked |
Find is your problem: the folder is named differently, is in the wrong place, or has not been scanned yet.
Load is a transfer problem on the player's side - usually a corrupt cache. It is rarely anything you did.
Colour codes in the log: if you run the server through a script or pipe the log to a file, you will see sequences like
^1,^3and^7in the middle of the text. Those are colour codes, not part of the error. They disappear in the normal console.
Couldn't find resource <name>
The server did not find a resource by that name.
Causes:
- The folder name does not match the name you write in
ensure. Names are case-sensitive on Linux - The resource was added after the server last scanned - run
refresh - The folder has no valid
fxmanifest.lua, so the scan skipped it entirely - The folder sits in a bracketed category that is not being started
Related messages from the same place: Couldn't find resource category <name>, Couldn't start resource <name> and Couldn't stop resource <name>.
Couldn't load resource sessionmanager
The full error on the player's side typically looks like this:
Couldn't load resource sessionmanager: Failed to open packfile:
ReadBulk of header failed: Failed to fetch: Failed to add entry to
local storage (download corrupted?)
Other tails you will see: Invalid magic, HTTP 403: filter failed : not a valid client, or Unknown error.
The name in the error is usually not the culprit.
sessionmanagerandspawnmanagerare system resources, and they are among the first things a client downloads. So if something is wrong with the transfer itself, it almost always surfaces as one of those - regardless of which resource is actually at fault.If several players report different resource names, it is a transfer problem, not a resource problem.
Causes, in order:
- A corrupt cache on the player's machine. By far the most common, and not your fault. Ask them to delete their FiveM cache folder
- A proxy or CDN in front of the server interfering with file transfers. The tail
HTTP 403: filter failed : not a valid clientis the tell - typically Cloudflare filtering the client's file requests. Disable filtering on the file transfers, or remove the proxy - Genuinely corrupt files on the server after a bad FTP upload. Produces
Invalid magic - A very large resource timing out mid-download
Could not find dependency <x> for resource <y>
For example Could not find dependency es_extended for resource esx.
What it means: the resource's manifest says it requires another resource, and that other resource is not known to the server.
Causes:
- The dependency is not installed at all. Note that
asyncandmysql-asyncare two different things - a classic ESX mix-up - The dependency is on disk but has not been scanned. Run
refresh - The folder name does not match. A folder called
es_extended-masterdoes not satisfydependency 'es_extended'. Rename it - The dependency itself has a broken or missing
fxmanifest.luaand was skipped in the scan - it is on disk but invisible - The order in
server.cfg- the dependency has to start first
Manifest errors
During startup the server scans the resources folder and writes one line per problem. The exact messages:
<name> does not have a resource manifest (fxmanifest.lua)
<name> has an outdated manifest (__resource.lua instead of fxmanifest.lua)
<name> exists in more than one place (<path> is used, the duplicate is <path>)
<name> is a category, but has a resource manifest
Resource <name> does not specify an fx_version in fxmanifest.lua.
Resource <name> does not support the current game (<game>).
Three things worth knowing:
A missing manifest is only a warning. The folder is skipped and the server starts fine. A broken manifest, on the other hand, is an error.
Warning-coloured but fatal anyway: the messages about
fx_versionand unsupported games are printed as warnings, but the resource is refused. People skim past them and then cannot work out why the resource never starts.
exists in more than one place is the most overlooked. If you have two copies of the same resource, the server uses one - and you are sitting there editing the other. That is the explanation for "I edited the file and nothing happens".
If there is a syntax error in the manifest itself, you get instead:
Could not parse resource metadata file <path>: <lua error>
Could not execute resource metadata file <path>: <lua error>
Parse means a syntax error in the manifest. Execute means the manifest is syntactically valid but failed when it ran.
Files named in the manifest that do not exist
could not find client_script client/main.lua (defined in fxmanifest.lua:12)
An exact message, line number and all. It is worth its weight in gold and is mentioned almost nowhere else.
Script errors
There are three lines, and they always come together:
Error parsing script @myresource/server/main.lua in resource myresource: <lua error>
Failed to load script server/main.lua.
Failed to load scripton its own tells you almost nothing. It is always preceded by anError parsingorError loadingline that contains the actual error. People typically copy only the last line.
Parse = a syntax error in the file. Loading = the file ran and failed - often because a dependency was not ready yet, so really an ordering problem.
Runtime errors look like this:
SCRIPT ERROR: @myresource/client/main.lua:42: attempt to index a nil value (global 'ESX')
The
@in front of the path is not an error. It is a Lua convention, and it is useful: whatever sits between the@and the first slash is always the resource name. That is how you identify the culprit from a player's screenshot.
Failed to verify protected resource <name>
This applies to paid scripts with escrow protection.
Causes, in order:
- The
.fxapfile was not uploaded. Many FTP clients skip it because they read it as a hidden file. Check that it is in the resource root - A partial or corrupt upload. Upload the original
.zipand extract it on the server rather than uploading loose files - FTP in ASCII mode corrupted the file. Use binary transfer
- The server was not restarted after installation
A related error is You lack the required entitlement to use <name>. That means something entirely different: the files are fine, but the server's license key belongs to a different Cfx account than the one that bought the script. Create a key from the right account.
A misleading error worth knowing: a Lua syntax error with an unreadable character around line 1 in an escrow-protected file looks like a bug in the code, but actually means the encrypted file was read as plain text - so the same as causes 1 and 3. People spend hours "fixing" Lua that is not broken.
Stuck on "Awaiting scripts"
This is not an error - it is a state. The client has every file and is waiting for the server's scripts to give the green light. It never times out, so no error text appears.
Causes:
spawnmanagerorsessionmanageris not running, or crashed- A framework resource failed during its own startup and never signalled ready
- A script failed inside the spawn handling - visible in the player's F8 console
- A broken loading screen that never dismisses itself
Look in the server console, not at the client. The real error is usually in the server's startup, several minutes earlier. Make sure
ensure spawnmanagerandensure sessionmanagerare in yourserver.cfg- if they are missing, that alone explains it.
Connection rejected by server: Resource prevented connection.
What it means: a resource rejected the player - not the server itself. Typically a queue, whitelist, ban or anticheat script.
If there is different text after the colon, that is the message the resource itself supplied. If it says exactly Resource prevented connection., it gave no message - often because it failed partway through its own check.
A related one: Failed handshake to server <address> - it closed the connection while deferring means the server died or dropped the connection mid-join.
Streaming warnings
Asset mymods/vehicle.ytd uses 34.2 MiB of physical memory.
Above 48 MiB this is added:
Oversized assets can and WILL lead to streaming issues
(such as models not loading/rendering).
The thresholds are:
| Size | What happens |
|---|---|
| Over 16 MiB | Warning |
| Over 32 MiB | Warning, yellow |
| Over 48 MiB | Warning with the blunt wording above |
| Over 64 MiB | Warning, red |
There is no hard 16 MB limit. It is claimed everywhere, but 16 MiB is merely the first warning threshold. Files above that size still load - they just get increasingly problematic.
On the player's side it shows up as Failed to call inflate() for streaming file <name>.ytd or Streaming data in archive is corrupt - usually a corrupt upload.
Game build and versions
This server requires a different game build (<x>) from the one you're using (<y>).
Client/Server game build revision mismatch: you are running game build <x>
revision <y>, while server expects revision <z>.
Set with sv_enforceGameBuild in server.cfg. It is startup-only and cannot be changed while the server runs.
A slightly overlooked case: a resource can itself require a particular game build in its manifest. Then you get
sv_enforceGameBuild needs to be at least <x> (current is <y>)- and "the resource will not start" is really a version problem.
Where is the log - and how do you get the error out of a player?
FXServer writes no log file of its own. The console is the log. If you run txAdmin - and you do, if you followed txAdmin and resources - the stored logs live under txData/<profile>/logs/.
The key thing to understand: an error in a client_script is invisible to you. The server never sees it. That is why you can be looking at an empty console while the player has a red error on screen.
How to get it out of them:
- Ask them to press F8 to open the client console
- Ask for a screenshot scrolled all the way to the top - the first error is the cause, the rest are knock-on effects
- Ask for the exact time, so you can find the matching point in the server console
| Error | Who sees it |
|---|---|
Manifest, dependency, Couldn't find resource |
Server only |
Errors in a server_script |
Server only |
Errors in a client_script |
Player only (F8) |
Couldn't load resource |
Player only |
| Streaming warnings at startup | The server |
Connection rejected by server |
The player, but the cause is on the server |
ensure, start, restart and refresh
| Command | What it does |
|---|---|
start <name> |
Starts it, if it is stopped. Does nothing if it is running |
restart <name> |
Restarts, only if it is already running |
ensure <name> |
Works either way. Use this one |
stop <name> |
Stops the resource |
refresh |
Rescans the folder and discovers new resources |
Three traps:
restarton a stopped resource does nothingrefreshis required after you add new files - otherwise you getCouldn't find resourcerefreshdoes not restart what is already running. If you edited a manifest, runrefreshandrestart
Good advice
- Read the log from the top down. The first error during startup is almost always the cause of all the ones after it.
- Add resources one at a time and restart in between.
- Upload paid scripts as the original
.zipand extract on the server. That removes the entire escrow category of errors. - Keep your
server.cfgin order: database, framework core, and then everything that uses them. - If several players report different resource names in the same error, look for something in the transfer - not in the resources.
Cannot place an error? Send us the first 30 lines of the server console from startup, and an F8 screenshot from an affected player.