fxmanifestresourcesluanui10 min read · updated 9/7/2026

Everything you can put in an fxmanifest.lua

The manifest is the only file every resource must have. It tells the server what the resource is, which files belong to it, and in what order they load. It is also, by a wide margin, the file people get wrong when a resource "will not start".

fxmanifest.lua: the complete reference

#The minimum that works

fx_version selects the manifest schema. cerulean is current and is what you should use; adamant and bodacious are older and lack features. game can be gta5, rdr3 or common for something that runs on both.

fx_version 'cerulean'
game 'gta5'

author 'Your Name'
description 'What this resource does'
version '1.0.0'

client_script 'client.lua'
server_script 'server.lua'

#Script loading and order

Each list loads in the order you write it. This is not alphabetical and it is not by dependency graph — if config.lua defines something main.lua needs, config.lua goes first.

shared_script loads on both sides. It is the right place for a config table, and the wrong place for anything containing a secret, because clients receive it.

shared_scripts {
  '@ox_lib/init.lua',   -- another resource's file, loaded first
  'config.lua',
  'shared/*.lua',       -- glob, alphabetical within the glob
}

client_scripts {
  'client/main.lua',
  'client/menu.lua',
}

server_scripts {
  '@oxmysql/lib/MySQL.lua',
  'server/main.lua',
}

#NUI: HTML interfaces

ui_page names the entry point, and files lists everything the page is allowed to load. A file not listed there returns 404 to the browser with no server-side error, which is why a NUI that works locally shows a blank panel in game.

ui_page 'html/index.html'

files {
  'html/index.html',
  'html/style.css',
  'html/script.js',
  'html/assets/*.png',
  'html/fonts/*.woff2',
}

#Data files and streaming

data_file registers a game data file so the engine reads it. The stream folder is picked up automatically in cerulean, so you rarely need to declare it.

files {
  'vehicles.meta',
  'handling.meta',
}

data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
data_file 'HANDLING_FILE'         'handling.meta'

-- only needed if your stream folder is somewhere unusual
-- this_is_a_map 'yes'

#Dependencies and load gating

dependency stops the resource starting until the named resource is running. dependencies takes a list. There is also a version form for gating on a server build.

dependency 'oxmysql'

dependencies {
  'ox_lib',
  'qb-core',
  '/server:12000',    -- requires artifact build 12000+
  '/onesync',         -- requires OneSync enabled
  '/gameBuild:3258',  -- requires this game build
}

#The full field list

FieldPurpose
fx_versionManifest schema. Use 'cerulean'.
game / games'gta5', 'rdr3' or 'common'.
author, description, versionMetadata shown in txAdmin and the console.
client_script(s)Runs on the client.
server_script(s)Runs on the server only.
shared_script(s)Runs on both. No secrets.
ui_pageThe NUI entry HTML.
filesAnything the client must be able to download.
data_fileRegisters a game data file by type.
dependency / dependenciesGates the start.
provideDeclares this resource as a replacement for another.
lua54'yes' to use Lua 5.4 features.
use_experimental_fxv2_oal'yes' for the newer Lua compiler.
escrow_ignoreFiles to leave readable in an escrowed resource.
this_is_a_map'yes' for map resources.

#Why a resource refuses to start

  • A syntax error in the manifest itself — it is Lua, so a missing comma inside a table is fatal. The console names the line.
  • A referenced file that does not exist. Case matters on Linux and does not on Windows.
  • A dependency that is not running, or is spelled differently from the folder name.
  • A folder name with a space, or with characters other than letters, digits, dash and underscore.
  • Two resources with the same folder name in different bracket folders. Only one will start.
  • fx_version missing entirely — the resource is treated as an old-style one and almost nothing works.

Questions

What is the difference between files and client_script?
client_script is Lua that the game runtime executes. files is anything else the client must be able to download — HTML, CSS, images, .meta files. A .lua listed only in files is downloaded and never run.
Do I need escrow_ignore?
Only if you publish an escrow-protected resource and want specific files, usually config.lua, to stay editable by the buyer. On your own resources it does nothing.
Does the order of the fields matter?
No, but the order inside each script list does. Put configs and libraries before the files that use them.

Ready to pick a map?

Twelve themes on three base map styles, $8 each, instant download.