
A FiveM resource will not start, a script tells you to "add this line to your fxmanifest.lua", or a car download came without one. All three lead back to the same file. This guide explains what fxmanifest.lua does, gives you a template to copy, lists every key in the official resource manifest docs and matches the console errors FXServer prints to their fix. Everything below was checked against docs.fivem.net and the FiveM source code on GitHub on 3 November 2026.
Quick answer: fxmanifest.lua is the resource manifest of a FiveM resource: a small Lua file in the root of the resource folder that tells FXServer which scripts run on the server, which run on each player's game, which files players download and which resources must start first. You do not download it; you create it as a plain text file. A script resource needs at least fx_version 'cerulean', game 'gta5' and one client_script, server_script or shared_script line. After you change it, type refresh and then ensure your_resource in the server console.
fxmanifest.lua in FiveM: shared_script, client_script, server_script
Think of fxmanifest.lua as the loading list for your resource. It does not contain your script. It tells FiveM which files exist, which files run on the player, which run on the server and which run on both.
| Line in fxmanifest.lua | Simple meaning |
|---|---|
fx_version 'cerulean' | Use the current manifest feature set |
game 'gta5' | This resource is for GTA V (FiveM) |
shared_script 'config.lua' | Load on the server and on every player |
client_script 'client.lua' | Run on each player's game |
server_script 'server.lua' | Run on the server only |
files { 'html/index.html' } | Extra files players download, such as NUI pages |
ui_page 'html/index.html' | Use this HTML file as the resource's NUI page |
The rule that matters most: FXServer puts every client_script, shared_script and file entry into the package that players download. Only server_script files stay on the server. Payments, item rewards, database calls and API keys belong in server scripts, never in client or shared scripts.
The manifest itself runs in its own small Lua runtime, separate from your scripts. It cannot read variables from your config.lua, and the loader removes dofile, load and loadfile before it runs your file. Keep it a plain list of declarations.
Minimal Working fxmanifest.lua (Copy This Template)
Searching for an "fxmanifest.lua download" will not turn up an official file, because there is none: every resource has its own. Start with this layout:
my_resource/
fxmanifest.lua
config.lua
client.lua
server.lua
html/
index.html
app.js
style.css
And this manifest:
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'Example resource'
version '1.0.0'
shared_script 'config.lua'
client_script 'client.lua'
server_script 'server.lua'
Save it as fxmanifest.lua (all lower case, not fxmanifest.lua.txt) in the root of the resource folder, next to the scripts. The folder name is the resource name, so this one starts with ensure my_resource in server.cfg or the console. Folders in square brackets, such as [jobs], are categories that hold several resources; they do not need a manifest themselves.
fxmanifest.lua Key Reference (docs.fivem.net)
These are the built-in keys in the official resource manifest reference. "Globbing" means the key accepts patterns such as client/*.lua.
| Key | What it does | Example |
|---|---|---|
fx_version | Required. Picks the manifest feature set; cerulean is the current one | fx_version 'cerulean' |
game / games | Game the resource runs on: gta5 (FiveM), rdr3 (RedM) or common (CitizenFX APIs only) | game 'gta5' |
author, description, version | Free metadata that scripts can read with GetResourceMetadata | version '1.0.0' |
client_script | Loads a .lua, .js or .net.dll file on each player and adds it to the download. Globbing | client_script 'client/*.lua' |
server_script | Loads a script on the server only. Globbing | server_script 'server.lua' |
shared_script | Loads a script on both sides and adds it to the download. Globbing | shared_script 'config.lua' |
file / files | Extra files players download: NUI pages, images, meta files | files { 'html/*.js' } |
ui_page | The resource's NUI page: a file (also listed in files) or a URL | ui_page 'html/index.html' |
loadscreen | HTML file used as the loading screen (also listed in files) | loadscreen 'html/loading.html' |
loadscreen_manual_shutdown | Keeps the loading screen up until a script calls ShutdownLoadingScreenNui | loadscreen_manual_shutdown 'yes' |
dependency / dependencies | Resources or runtime constraints that must be in place before this one starts | dependency 'oxmysql' |
provide | Marks this resource as a replacement for another one | provide 'mysql-async' |
export / server_export | Exports a global client or server function by name; the docs prefer exports('name', fn) in code | export 'getWidget' |
data_file | Loads a game data file such as handling or vehicle meta. Globbing in the file name | data_file 'HANDLING_FILE' 'data/handling.meta' |
this_is_a_map | Marks a map resource and reloads map storage when it loads | this_is_a_map 'yes' |
server_only | Players download nothing from this resource | server_only 'yes' |
replace_level_meta | Replaces the level meta with a file listed in files | replace_level_meta 'mymap' |
before_level_meta, after_level_meta | Load a level meta before or after the main one; deprecated in favour of data files | |
escrow_ignore | Files Asset Escrow leaves readable, such as a config | escrow_ignore { 'config.lua' } |
lua54 | Deprecated: since June 2025 all Lua scripts use Lua 5.4 | lua54 'yes' |
node_version | Node.js version for server JavaScript: 16 (default) or 22 | node_version '22' |
use_experimental_fxv2_oal | Experimental faster native calls for Lua; vector unpacking stops working | use_experimental_fxv2_oal 'yes' |
clr_disable_task_scheduler | Turns off the custom C# task scheduler on the server; implied from bodacious on | clr_disable_task_scheduler 'yes' |
convar_category | Lists the resource's convars on the Project Settings page in FxDK | see the docs |
resource_manifest_version | The old __resource.lua version line; deprecated, use fx_version |
Any other key you write becomes custom metadata. The official example manifest even contains pizza_topping 'pineapple', and a script reads such a value with GetResourceMetadata(GetCurrentResourceName(), 'pizza_topping', 0).
fx_version: cerulean, bodacious, adamant
The docs list three versions, and each one includes the features of the versions before it:
adamant(December 2019): requires agameline.bodacious(February 2020): impliesclr_disable_task_schedulerand stops definingwindowin JavaScript, for library compatibility.cerulean(May 2020): loads NUI pages in a secure context, which makes WASM and the fetch API work. NUI callbacks then go overhttps://instead ofhttp://; the NUI callback docs callhttps://${GetParentResourceName()}/getItemInfo.
Use cerulean for anything new. Older downloads that say adamant or bodacious still load.
client_script vs client_scripts
Both forms work, and the reason is in FiveM's own manifest code (resource_init.lua): when you pass a table, a trailing s is dropped from the key and every entry is stored on its own. client_scripts { 'a.lua', 'b.lua' } becomes two client_script entries, which is also what the official example shows.
| You write | FXServer stores | Works? |
|---|---|---|
client_script 'client.lua' | one client_script | Yes |
client_scripts { 'a.lua', 'b.lua' } | two client_script entries | Yes |
client_script { 'a.lua', 'b.lua' } | two client_script entries | Yes |
client_scripts 'client.lua' | one entry called client_scripts | No, the file never loads |
The last row is the trap. A plural key with a single string keeps its plural name, FXServer never looks it up, and nothing warns you. The same goes for server_scripts, shared_scripts, files and dependencies. Use the singular for one string, or put the string in braces.
fxmanifest shared_script Example and @ Includes
shared_script loads a file on the server and on every player, which makes it the place for config values and helpers both sides need:
shared_script 'config.lua'
A path that starts with @ points into another resource: @resource_name/path/file.lua. FXServer passes these through to the script loader instead of looking in your own folder. The common case is ox_lib, whose docs tell you to add its init file as a shared script:
shared_scripts {
'@ox_lib/init.lua',
'config.lua',
}
List the library line first, so its globals exist when your config runs. The name after @ must match the other resource's folder name exactly, including capital letters. ox_lib's init.lua stops with ox_lib must be started before this resource. when ox_lib is not running, so also put ensure ox_lib above your resource in server.cfg. Our ox_lib guide covers the install.
Dependencies and Load Order
dependency 'oxmysql'
dependencies {
'ox_lib',
'oxmysql',
}
This is what FXServer's dependency loader does before your resource starts. A dependency that is already running is skipped. One that exists but is stopped gets started for you. If no resource with that name exists, your resource does not start and the console prints Could not find dependency oxmysql for resource my_resource. The name is the folder name, so a folder called oxmysql-main from a source zip does not count as oxmysql.
Runtime constraints
The same key can require a server build or feature. These lines are from the docs:
dependencies {
'/server:4500', -- requires at least server build 4500
'/onesync', -- requires state awareness to be enabled
'/gameBuild:h4', -- requires at least game build 2189
}
When a constraint fails, the console prints Resource 'my_resource' can't run: followed by a numbered list of what is missing.
Optional integrations
There is no optional_dependencies key in the official manifest docs. If your script works with or without another resource, leave that resource out of dependencies and check at runtime:
if GetResourceState('ox_target') == 'started' then
-- register your ox_target zones here
end
GetResourceState returns missing, started, starting, stopped, stopping, uninitialized or unknown.
NUI: ui_page and files
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/app.js',
'html/assets/*.png',
}
The docs say a local ui_page file, and everything it loads, has to be listed under files; ui_page can also point to a full URL. files entries use the same glob rules as scripts, so html/assets/*.png picks up every PNG in that folder. A file that is not listed is not in the package players download, which shows up as a missing image or a white screen.
If you build the UI with a bundler, list the build output, not the source folder, and use a pattern such as 'web/dist/assets/*.js', so new hashed file names are included after the next build.
Globs That Work
| Pattern | Matches |
|---|---|
*.lua | Lua files in the resource root only |
client/*.lua | Lua files directly inside client |
**/*.lua | Lua files in subfolders at any depth, such as dir1/a.lua and dir1/dir2/f.lua |
**/cl_*.lua | Files starting with cl_ at any depth |
Globbing works for client_script, server_script, shared_script, files and the file name in data_file. Prefer explicit folders over one huge recursive pattern: you see faster what loads, and you do not ship test files by accident. A listed file that cannot be found shows up as a warning in this format, and the start line then reads Started resource my_resource (1 warning):
could not find client_script `client/main.lua` (defined in fxmanifest.lua:12)
fxmanifest for a FiveM Car
A car download that only has .yft, .ytd and .meta files needs a manifest before FiveM can load it. Make a folder such as mycar, put the models and textures in mycar/stream/, put the meta files in mycar/data/, and add this fxmanifest.lua:
fx_version 'cerulean'
game 'gta5'
files {
'data/vehicles.meta',
'data/carvariations.meta',
'data/carcols.meta',
'data/handling.meta',
}
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'CARCOLS_FILE' 'data/carcols.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'
The stream folder needs no lines: FXServer scans stream/ and its subfolders by itself. Each meta file needs a files entry, so players download it, and a data_file line, so the game loads it as the right type. The four type names come from the data file reference. Only list the meta files your car actually has. Our add-on cars guide walks through the rest.
lua54, node_version and Other Version Lines
lua54 'yes': no longer needed. Cfx.re announced the removal of Lua 5.3 on 24 June 2025, and the manifest docs now say all Lua scripts use Lua 5.4. You can delete the line from old manifests and leave it out of new ones. If an old script misbehaves, the announcement lists the 5.3 to 5.4 differences, such as strings no longer being turned into numbers in bitwise operations.node_version '22': server JavaScript runs on Node.js 16 unless you set 22, the only other version the docs list.version '1.0.0': the resource's own version as free text. Bump it when you ship changes, so you and the people running your resource can tell builds apart.
fxmanifest.lua vs __resource.lua
__resource.lua is the old name, with a resource_manifest_version GUID instead of fx_version. FXServer still reads it, but it looks for fxmanifest.lua first: if both files exist, it uses fxmanifest.lua and ignores the old one. The docs say the server warns that __resource.lua is deprecated.
To migrate an old resource:
- Rename
__resource.luatofxmanifest.lua. - Replace the
resource_manifest_version '...'line withfx_version 'cerulean'. - Add
game 'gta5'. A new-style manifest without a game line does not start. - Keep the script, file and dependency lines; they use the same names.
- If the resource has a NUI page, change its callback URLs from
http://tohttps://. - Run
refreshandensurewith the resource name, then read the server console (not the F8 console in your game) for errors.
Console Errors and Fixes
These messages come from FXServer itself: from its source code on GitHub and from the docs. Read them in the server console or in txAdmin's live console.
| Console message | Cause | Fix |
|---|---|---|
my_resource does not have a resource manifest (fxmanifest.lua) | No file with that exact name in the folder root | Rename fxmanifest.lua.txt or Fxmanifest.lua, or move the file up out of a nested folder |
Could not parse resource metadata file .../fxmanifest.lua | Lua syntax error in the manifest | Look for a missing quote, comma or closing brace on the line it names |
Resource my_resource does not specify an `fx_version` in fxmanifest.lua. | fx_version missing or misspelled | Add fx_version 'cerulean' |
Resource my_resource does not support the current game (gta5). | No game line, or only rdr3 | Add game 'gta5' |
could not find client_script ... | Path or capital letters do not match the file | Fix the path; on Linux, Config.lua and config.lua are different files |
Could not find dependency ox_lib for resource my_resource. | Dependency missing or its folder named differently | Install it, or rename the folder to the exact name |
Resource 'my_resource' can't run: | A runtime constraint failed | Update the server build or enable what the numbered list names |
Couldn't find resource my_resource. | The ensure name matches no folder, or no refresh after adding it | Check the folder name and run refresh |
After every manifest change, run refresh, which the server command docs describe as rescanning the resources folder and loading all resource manifests, and then ensure my_resource, which starts the resource or restarts it if it was already running.
Real-World Combined Example
fx_version 'cerulean'
game 'gta5'
author 'Jochem'
description 'Job pack with NUI'
version '1.2.0'
shared_scripts {
'@ox_lib/init.lua',
'config.lua',
}
client_scripts {
'client/*.lua',
}
server_scripts {
'server/*.lua',
}
ui_page 'web/index.html'
files {
'web/index.html',
'web/style.css',
'web/app.js',
}
dependencies {
'ox_lib',
'oxmysql',
}
Use it as a base and delete what you do not use. The most common mistake is copying a big manifest from another resource and keeping dependencies, NUI files or escrow lines your script does not need.
If your server runs on our FiveM server hosting, you upload the resource folder through the control panel or SFTP and start it the same way, with refresh and ensure in the console.
FAQ
What is fxmanifest.lua in FiveM?
It is the resource manifest: a Lua file in the root of every resource folder that lists the client, server and shared scripts, the files players download, the NUI page and the resources it depends on. The docs say a folder needs one to be read as a resource.
Where can I download fxmanifest.lua?
Nowhere official, because each resource needs its own. Create a text file called fxmanifest.lua, paste the template from this guide and change the script names to match your files.
What is a shared_script in fxmanifest?
A file that loads on both the server and every player, usually config values and helper functions. Players download it, so keep secrets in server_script files.
Do I still need lua54 'yes' in fxmanifest.lua?
No. Cfx.re removed Lua 5.3 support (announced on 24 June 2025), and all Lua scripts now run on Lua 5.4. The manifest docs mark lua54 as deprecated.
My console asks me to specify a version in fxmanifest.lua. What do I add?
Check two different lines. FXServer needs fx_version 'cerulean'; without it the resource does not start. version '1.0.0' is the resource's own version, which some scripts read with GetResourceMetadata for update checks. Add both and the message goes away whichever line it meant.
Do dependencies auto-install?
No. A dependency line only starts resources that already sit in your resources folder. If one is missing, your resource does not start and the console prints "Could not find dependency".
Sources
All opened on 3 November 2026:
- Cfx.re docs: Resource manifest and its example fxmanifest.lua, Introduction to resources, Server commands, NUI callbacks, Data files, Asset escrow
- FiveM source on GitHub: resource_init.lua, LuaMetaDataLoader.cpp, ResourceDependencyLoader.cpp, ResourceMetaDataComponent.cpp, ServerResources.cpp, ResourceFilesComponent.cpp, ResourceStreamComponent.cpp
- Natives: GET_RESOURCE_STATE, GET_RESOURCE_METADATA
- Cfx.re forum: Removal of Lua 5.3 support
- Overextended: ox_lib docs, usage section, ox_lib init.lua