[{"data":1,"prerenderedAt":53},["ShallowReactive",2],{"site":3,"blog-post-en-fxmanifest-lua54-cerulean":15,"blog-slug-site":46,"blog-scripts-en-fxmanifest-lua54-cerulean":52},{"site":4,"contact":10,"seo":13,"payment":14},{"name":5,"host":6,"default_locale":7,"locales":8},"X3D Developer","fivem.x3d-developer.com","th",[7,9],"en",{"discord_invite":11,"email":12,"line":12},"https:\u002F\u002Fdiscord.gg\u002FNA5kPVynFv","",{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},{"post":16,"html":21,"others":22,"productSlugs":45},{"slug":17,"title":18,"description":19,"date":20},"fxmanifest-lua54-cerulean","Why fxmanifest.lua needs fx_version 'cerulean' and lua54 'yes' (what breaks without them, plus a template)","The two lines every modern FiveM resource starts with, explained: fx_version 'cerulean' is the manifest version that fixes runtime and NUI behaviour, lua54 'yes' enables Lua 5.4 for that resource. Why ox_lib and ESX Legacy require it, the errors you get when it is missing, adamant\u002Fbodacious\u002F__resource.lua history, and a working fxmanifest.lua for an ESX script.","2026-09-27","\u003Cp>Open the \u003Ccode>fxmanifest.lua\u003C\u002Fcode> of almost any current script and the first two lines are the same:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-lua\">fx_version 'cerulean'\nlua54 'yes'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>New script authors copy them without knowing what they do, then leave them out of their own resource and hit an error they cannot read. This post explains each line: what it is, why it is required, what breaks without it, and what a correct manifest for an ESX script looks like.\u003C\u002Fp>\n\u003Ch2 id=\"what-fxmanifest-lua-is\">What fxmanifest.lua is\u003C\u002Fh2>\n\u003Cp>It is the &quot;loading order&quot; FXServer reads before starting a resource: which files run on the client, which on the server, where the NUI page lives, which resources it depends on, and \u003Cstrong>which version of the rules it runs under\u003C\u002Fstrong>. The two lines in question are the &quot;rules&quot; part. Before 2019 the file was called \u003Ccode>__resource.lua\u003C\u002Fcode> and declared its version with \u003Ccode>resource_manifest_version\u003C\u002Fcode> followed by a long GUID nobody could remember. \u003Ccode>fxmanifest.lua\u003C\u002Fcode> and \u003Ccode>fx_version\u003C\u002Fcode> replaced that with names people can read.\u003C\u002Fp>\n\u003Ch2 id=\"what-fx-version-cerulean-means\">What fx_version 'cerulean' means\u003C\u002Fh2>\n\u003Cp>\u003Ccode>fx_version\u003C\u002Fcode> tells FXServer \u003Cstrong>which generation of manifest rules\u003C\u002Fstrong> this resource was written against. FiveM changes runtime behaviour over time and does not want old scripts to break on update, so behaviour is pinned to the version the author declares. The names are alphabetical:\u003C\u002Fp>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>fx_version\u003C\u002Fth>\n\u003Cth>When\u003C\u002Fth>\n\u003Cth>Meaning\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>adamant\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>late 2019\u003C\u002Ftd>\n\u003Ctd>First version of the \u003Ccode>fxmanifest.lua\u003C\u002Fcode> format replacing \u003Ccode>__resource.lua\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>bodacious\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>early 2020\u003C\u002Ftd>\n\u003Ctd>Intermediate version with some runtime behaviour changes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>cerulean\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>mid 2020 to today\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>Current version.\u003C\u002Fstrong> NUI pages load from the origin \u003Ccode>https:\u002F\u002Fcfx-nui-&lt;resource&gt;\u002F\u003C\u002Fcode> instead of \u003Ccode>nui:\u002F\u002F\u003C\u002Fcode>, so the page is a secure context, \u003Ccode>fetch\u003C\u002Fcode> to callbacks works, and https assets load directly\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>There has been no version after \u003Ccode>cerulean\u003C\u002Fcode> since 2020. Every new resource uses this one value.\u003C\u002Fp>\n\u003Cp>Leave \u003Ccode>fx_version\u003C\u002Fcode> out and FXServer does not know which rules to load with; the resource does not start and the console reports an invalid manifest. Use \u003Ccode>adamant\u003C\u002Fcode> with a modern NUI and the UI that relies on \u003Ccode>fetch\u003C\u002Fcode> or loads fonts and images over https misbehaves because the origin is still \u003Ccode>nui:\u002F\u002F\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"what-lua54-yes-means\">What lua54 'yes' means\u003C\u002Fh2>\n\u003Cp>FiveM runs Lua on its own runtime (CfxLua), which defaults to \u003Cstrong>Lua 5.3\u003C\u002Fstrong>. Since 2021 a \u003Cstrong>Lua 5.4\u003C\u002Fstrong> runtime is available, but it is enabled \u003Cstrong>per resource\u003C\u002Fstrong> with \u003Ccode>lua54 'yes'\u003C\u002Fcode>, because 5.4 changes some behaviour (string-to-number coercion, integer overflow in for loops) and some old scripts would break if it were forced server-wide.\u003C\u002Fp>\n\u003Cp>What Lua 5.4 gives you:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Speed\u003C\u002Fstrong>: a generational garbage collector and cheaper function calls. Scripts with tight loops (HUD, distance checks, zone polling) benefit visibly\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New syntax\u003C\u002Fstrong>: \u003Ccode>local x &lt;const&gt; = 1\u003C\u002Fcode> (a constant; assigning to it is a compile-time error) and \u003Ccode>local f &lt;close&gt; = ...\u003C\u002Fcode> (resources closed automatically when the scope ends)\u003C\u002Fli>\n\u003Cli>New functions such as \u003Ccode>coroutine.close\u003C\u002Fcode>, \u003Ccode>warn\u003C\u002Fcode>, \u003Ccode>math.tointeger\u003C\u002Fcode>, and a stricter \u003Ccode>utf8\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Why &quot;required&quot; rather than &quot;recommended&quot;: \u003Cstrong>the libraries modern scripts depend on are written in 5.4 syntax and check for it.\u003C\u002Fstrong> The most common example is ox_lib. The first lines of \u003Ccode>@ox_lib\u002Finit.lua\u003C\u002Fcode> are\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-lua\">if not _VERSION:find('5.4') then\n    error('Lua 5.4 must be enabled in the resource manifest!', 2)\nend\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Because the runtime is chosen \u003Cstrong>per resource\u003C\u002Fstrong>, ox_lib having \u003Ccode>lua54 'yes'\u003C\u002Fcode> in its own manifest does nothing for you. Your script that does \u003Ccode>shared_script '@ox_lib\u002Finit.lua'\u003C\u002Fcode> needs \u003Ccode>lua54 'yes'\u003C\u002Fcode> in its own manifest, or you get that error at start. The same goes for ox_inventory, ox_target, qbx_core, and current ESX Legacy, whose \u003Ccode>es_extended\u003C\u002Fcode> manifest has declared \u003Ccode>lua54 'yes'\u003C\u002Fcode> from the start.\u003C\u002Fp>\n\u003Cp>Symptoms when it is missing but the code uses 5.4 syntax: a load error like \u003Ccode>'=' expected near '&lt;'\u003C\u002Fcode> pointing at a line with \u003Ccode>&lt;const&gt;\u003C\u002Fcode> or \u003Ccode>&lt;close&gt;\u003C\u002Fcode>, or \u003Ccode>attempt to call a nil value (field 'close')\u003C\u002Fcode> when calling \u003Ccode>coroutine.close\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"and-use-experimental-fxv2-oal-yes\">And use_experimental_fxv2_oal 'yes'?\u003C\u002Fh2>\n\u003Cp>The third line usually seen next to them in ESX Legacy is\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-lua\">use_experimental_fxv2_oal 'yes'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>It enables the newer, faster native invocation path (one-argument-list). Optional, safe for newly written scripts, and a measurable gain in scripts that call natives very often. If a native returning multiple values behaves oddly, disable this line first.\u003C\u002Fp>\n\u003Ch2 id=\"example-fxmanifest-lua-for-an-esx-script\">Example fxmanifest.lua for an ESX script\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-lua\">fx_version 'cerulean'\ngame 'gta5'\nlua54 'yes'\nuse_experimental_fxv2_oal 'yes'\n\nauthor 'X3D Developer'\ndescription 'x3d_example: manifest skeleton'\nversion '1.0.0'\n\nshared_scripts {\n  '@es_extended\u002Fimports.lua',\n  '@ox_lib\u002Finit.lua',\n  'config\u002Fconfig.lua',\n}\n\nclient_scripts {\n  'client\u002F*.lua',\n}\n\nserver_scripts {\n  '@oxmysql\u002Flib\u002FMySQL.lua',\n  'config\u002Fconfig.license.lua',\n  'server\u002F*.lua',\n}\n\nui_page 'html\u002Findex.html'\n\nfiles {\n  'html\u002Findex.html',\n  'html\u002F**\u002F*',\n  'locales\u002F*.json',\n}\n\ndependencies {\n  '\u002Fserver:7290',\n  '\u002Fonesync',\n  'es_extended',\n  'ox_lib',\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Common mistakes:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>game 'gta5'\u003C\u002Fcode> is required. For RedM use \u003Ccode>game 'rdr3'\u003C\u002Fcode> and add the \u003Ccode>rdr3_warning\u003C\u002Fcode> line FXServer asks for\u003C\u002Fli>\n\u003Cli>Anything the NUI page opens (images, fonts, sounds) must be listed in \u003Ccode>files\u003C\u002Fcode>, otherwise it does not load even though the file exists (\u003Ccode>html\u002F**\u002F*\u003C\u002Fcode> covers the whole folder)\u003C\u002Fli>\n\u003Cli>Files holding server secrets such as \u003Ccode>config\u002Fconfig.license.lua\u003C\u002Fcode> must \u003Cstrong>never\u003C\u002Fstrong> be in \u003Ccode>shared_scripts\u003C\u002Fcode>, because shared scripts are sent to every client. Server only (every X3D script puts the license config first in \u003Ccode>server_scripts\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>\u003Ccode>dependencies\u003C\u002Fcode> entries like \u003Ccode>\u002Fserver:7290\u003C\u002Fcode> enforce a minimum FXServer version and \u003Ccode>\u002Fonesync\u003C\u002Fcode> requires OneSync. If unmet, the resource refuses to start with a clear message instead of failing quietly later\u003C\u002Fli>\n\u003Cli>Order in \u003Ccode>server.cfg\u003C\u002Fcode> still matters: \u003Ccode>es_extended\u003C\u002Fcode> and \u003Ccode>ox_lib\u003C\u002Fcode> must be \u003Ccode>ensure\u003C\u002Fcode>d before any script that imports from them\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"faq\">FAQ\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Do old scripts still on \u003Ccode>__resource.lua\u003C\u002Fcode> need converting?\u003C\u002Fstrong> They still run, but rename the file to \u003Ccode>fxmanifest.lua\u003C\u002Fcode>, replace \u003Ccode>resource_manifest_version '...'\u003C\u002Fcode> with \u003Ccode>fx_version 'cerulean'\u003C\u002Fcode>, and re-test the NUI.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Will adding \u003Ccode>lua54 'yes'\u003C\u002Fcode> break an old script?\u003C\u002Fstrong> Usually not. The cases seen are code relying on automatic \u003Ccode>&quot;10&quot; + 5\u003C\u002Fcode> coercion (5.4 still does it through string metamethods) and integer overflow in for loops, where 5.4 stops the loop instead of wrapping. Test before production.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Is \u003Ccode>lua54 'yes'\u003C\u002Fcode> on es_extended alone enough?\u003C\u002Fstrong> No. It is per resource; every resource that uses 5.4 syntax or imports ox_lib needs its own.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>A script I bought says \u003Ccode>fx_version 'bodacious'\u003C\u002Fcode>.\u003C\u002Fstrong> It works, but it signals code untouched since 2020. Check its NUI and its compatibility with current ESX Legacy before relying on it.\u003C\u002Fp>\n\u003Cp>Every free X3D script (for example \u003Ca href=\"\u002Fen\u002Fproducts\u002Fes-extended\u002F\">ESX Legacy Core — X3D Build\u003C\u002Fa> and \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-phone\u002F\">X3D Phone\u003C\u002Fa>) uses the manifest layout above; grab the real files from the \u003Ca href=\"\u002Fen\u002Fblog\u002Ffree-fivem-scripts\u002F\">free FiveM scripts post\u003C\u002Fa>. Need a script written to spec: \u003Ca href=\"\u002Fen\u002Fservices\u002Fcustom-script\u002F\">custom FiveM script development\u003C\u002Fa>.\u003C\u002Fp>\n",[23,29,35,40],{"slug":24,"title":25,"description":26,"date":27,"updated":28},"free-fivem-scripts","27 Free FiveM Scripts From the Developer: Weapon Skins, Weapon Damage, ESX Inventory, Vaults, Admin Panel and More","Twenty-seven free FiveM scripts from X3D — collectible weapon skins, a weapon damage system, ESX inventory with hotkeys 1–9, vaults, trunk storage, an admin panel with token bans, bank and ATM, YouTube boombox, fortune teller with siamsi and tarot, ESX phone, death screen, drug selling, house robbery, minigames, ESX Legacy Core X3D Build, loading screen, Notify, Progress Bar, usable items, slide, Character Skin, Main Menu, Daily Login, Mailbox, Carry and Environment.","2026-09-18","2026-10-11",{"slug":30,"title":31,"description":32,"date":33,"updated":34},"open-fivem-server-budget","How Much Does It Cost to Open a FiveM Server, and What Do You Need? From 32 Players to a 2,000-Player City (2026)","The essential scripts to launch a FiveM server in 2026 with budgets at three scales: starter 32–64, public 128–500, and a 1,000–2,048-player city (Element Club Platinum, dedicated hardware, separate voice and database, staff). Which parts free scripts cover, which are worth paying for, and which must be rewritten once you reach two thousand players.","2026-09-15","2026-10-14",{"slug":36,"title":37,"description":38,"date":39,"updated":20},"fivem-stuck-loading-screen","FiveM Stuck on Loading Screen? 8 Fixes for Players, 5 for Server Owners","FiveM stuck on the loading screen, on the Rockstar launcher, on Connecting, or on a loading screen with music playing; black screen, white screen, loading never finishes. Step-by-step fixes for players (clear cache, move to SSD, disable ReShade, verify game files) and the server-side causes only the owner can fix (white loading screen, a client resource erroring at boot, the core spawning players before the world is ready).","2026-09-24",{"slug":41,"title":42,"description":43,"date":44,"updated":34},"fivem-scripts-guide","FiveM Scripts Explained: Types, ESX vs QBCore vs Standalone, and How to Choose","A plain-language guide to FiveM scripts: the main categories (HUD, jobs, casino, anti-cheat, map cleanup), framework differences, and a checklist for picking scripts that won't lag your server.","2026-09-16",[],{"site":47,"contact":49,"seo":50,"payment":51},{"name":5,"host":6,"default_locale":7,"locales":48},[7,9],{"discord_invite":11,"email":12,"line":12},{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},[],1792316317600]