FiveM fxmanifest.lua Guide 2026: Reference, Examples, Fixes

Published on | Updated

fxmanifest.lua guide for FiveM: every key from the official docs, client_script vs client_scripts, shared_script, files, dependencies, lua54 and console fixes.

Two players standing between parked cars at night with the Vinewood sign lit up behind them

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.luaSimple 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.

KeyWhat it doesExample
fx_versionRequired. Picks the manifest feature set; cerulean is the current onefx_version 'cerulean'
game / gamesGame the resource runs on: gta5 (FiveM), rdr3 (RedM) or common (CitizenFX APIs only)game 'gta5'
author, description, versionFree metadata that scripts can read with GetResourceMetadataversion '1.0.0'
client_scriptLoads a .lua, .js or .net.dll file on each player and adds it to the download. Globbingclient_script 'client/*.lua'
server_scriptLoads a script on the server only. Globbingserver_script 'server.lua'
shared_scriptLoads a script on both sides and adds it to the download. Globbingshared_script 'config.lua'
file / filesExtra files players download: NUI pages, images, meta filesfiles { 'html/*.js' }
ui_pageThe resource's NUI page: a file (also listed in files) or a URLui_page 'html/index.html'
loadscreenHTML file used as the loading screen (also listed in files)loadscreen 'html/loading.html'
loadscreen_manual_shutdownKeeps the loading screen up until a script calls ShutdownLoadingScreenNuiloadscreen_manual_shutdown 'yes'
dependency / dependenciesResources or runtime constraints that must be in place before this one startsdependency 'oxmysql'
provideMarks this resource as a replacement for another oneprovide 'mysql-async'
export / server_exportExports a global client or server function by name; the docs prefer exports('name', fn) in codeexport 'getWidget'
data_fileLoads a game data file such as handling or vehicle meta. Globbing in the file namedata_file 'HANDLING_FILE' 'data/handling.meta'
this_is_a_mapMarks a map resource and reloads map storage when it loadsthis_is_a_map 'yes'
server_onlyPlayers download nothing from this resourceserver_only 'yes'
replace_level_metaReplaces the level meta with a file listed in filesreplace_level_meta 'mymap'
before_level_meta, after_level_metaLoad a level meta before or after the main one; deprecated in favour of data files
escrow_ignoreFiles Asset Escrow leaves readable, such as a configescrow_ignore { 'config.lua' }
lua54Deprecated: since June 2025 all Lua scripts use Lua 5.4lua54 'yes'
node_versionNode.js version for server JavaScript: 16 (default) or 22node_version '22'
use_experimental_fxv2_oalExperimental faster native calls for Lua; vector unpacking stops workinguse_experimental_fxv2_oal 'yes'
clr_disable_task_schedulerTurns off the custom C# task scheduler on the server; implied from bodacious onclr_disable_task_scheduler 'yes'
convar_categoryLists the resource's convars on the Project Settings page in FxDKsee the docs
resource_manifest_versionThe 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 a game line.
  • bodacious (February 2020): implies clr_disable_task_scheduler and stops defining window in 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 over https:// instead of http://; the NUI callback docs call https://${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 writeFXServer storesWorks?
client_script 'client.lua'one client_scriptYes
client_scripts { 'a.lua', 'b.lua' }two client_script entriesYes
client_script { 'a.lua', 'b.lua' }two client_script entriesYes
client_scripts 'client.lua'one entry called client_scriptsNo, 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

PatternMatches
*.luaLua files in the resource root only
client/*.luaLua files directly inside client
**/*.luaLua files in subfolders at any depth, such as dir1/a.lua and dir1/dir2/f.lua
**/cl_*.luaFiles 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:

  1. Rename __resource.lua to fxmanifest.lua.
  2. Replace the resource_manifest_version '...' line with fx_version 'cerulean'.
  3. Add game 'gta5'. A new-style manifest without a game line does not start.
  4. Keep the script, file and dependency lines; they use the same names.
  5. If the resource has a NUI page, change its callback URLs from http:// to https://.
  6. Run refresh and ensure with 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 messageCauseFix
my_resource does not have a resource manifest (fxmanifest.lua)No file with that exact name in the folder rootRename fxmanifest.lua.txt or Fxmanifest.lua, or move the file up out of a nested folder
Could not parse resource metadata file .../fxmanifest.luaLua syntax error in the manifestLook 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 misspelledAdd fx_version 'cerulean'
Resource my_resource does not support the current game (gta5).No game line, or only rdr3Add game 'gta5'
could not find client_script ...Path or capital letters do not match the fileFix 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 differentlyInstall it, or rename the folder to the exact name
Resource 'my_resource' can't run:A runtime constraint failedUpdate 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 itCheck 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: