Grand opening25% off everything with FAM-261023-261025-UL4B9this weekendAdded for you at checkout Halloween Edition36 maps, limited runlimited runShop the drop

FREE TOOL · RESOURCE MANIFEST

fxmanifest.lua generator

The manifest is twenty lines that decide whether a resource loads at all, and the three mistakes that cost the most time are all invisible: a script in the wrong list, a NUI asset missing from files, and a data_file type with a typo in it. This builds the file and points at those three while you are still typing.

Every key checked against the resource manifest reference and the data files list. 3 of them are deprecated there — they are labelled, and off by default.

This manifest is valid

fx_version cerulean · gta5 · 3 scripts · 0 files · 0 data_file entries

Resource and version

Loads NUI in a secure context, so WASM and fetch work — at the cost of NUI callbacks having to be https:// rather than http://. This is the current FXv2 version and the one to use.

One game writes game 'gta5', two or more write the games table. Runs on FiveM.

convention author, description, version and repository are not documented manifest entries. The reference says metadata keys can be arbitrary and only ever shows these in its example — they are read by txAdmin and update checkers, not by the loader.

Scripts, in load order

This list runs on the client and on the server, and on each side it runs before that side's own files. That is the whole reason it exists: a config table or a helper function defined here is already there by the time anything else loads. It is also why nothing side-specific belongs in it — the code runs twice, once per side, and it is downloaded to clients, so a database credential in a shared file is a public database credential.

Globbing works in all three — client/*.lua or modules/**/*.lua. A glob loads in filesystem order, so if two files depend on each other, name them so the order falls out right or list them explicitly.

Libraries

It goes in shared_scripts because the library has to define its lib table on both sides, and it has to do it before any of your files run — which is exactly what shared_scripts guarantees. The @ prefix means "load this file out of that other resource", so ox_lib has to be a declared dependency as well, or it may start after you and the table will not be there.

Server side only. This is the pattern qb-core itself uses, with a single dependency 'oxmysql' line to go with it.

dependency vs dependencies. The singular takes exactly one string: dependency 'oxmysql'. The plural takes a table, and it is the only one that can hold the slash-prefixed runtime constraints — /server:BUILD, /onesync, /gameBuild:ALIAS, /policy:NAME and /native:HASH. Those are not resource names, and putting one in the singular form gives you a resource that waits forever for a resource called "/onesync".

NUI

Why a blank NUI page is almost always this. ui_page only tells the game which URL to open inside the resource. It does not make a single file reachable — that is what files does. So a manifest with a ui_page and an empty files list opens a URL that resolves to nothing, and you get a transparent black rectangle with no error you would think to look for. The same applies one level down: the HTML loads a stylesheet, a bundle, a font, an image, and every one of those has to be in files too, or the page renders unstyled with a handful of 404s buried in the CEF console.

For a built front end, prefer globs over a hand-written list. A bundler that puts a hash in the filename will change it on every build, and a stale explicit list is a NUI page that worked yesterday.

Streaming — data_file entries

A stream/ folder is picked up automatically; you do not list ydr, ytd or ymap files anywhere. data_file is for the metadata that tells the game what those assets are — and the type name has to be exact, because a wrong one fails without a word in the console. Your add-on car simply gets stock handling and you spend an evening on the handling file.

    Everything else

    Anything that declares a dependency on the named resource is satisfied by yours instead. This is how qbx_core lets qb-* resources run on Qbox at all.

    The reference is blunt about this one: “This setting is deprecated and you do not need to enable it. As of June 2025, Lua 5.3 has been deprecated and all Lua scripts now use the 5.4 version.” It is off here by default. It does no harm — it just does nothing, and a manifest that still carries it is a manifest nobody has looked at since mid-2025.

    fxmanifest.lua25 lines
    The whole manifest

    Save it as fxmanifest.lua in the root of the my_resource folder — not in a subfolder, and not named __resource.lua, which has been superseded.

    -- my_resource/fxmanifest.lua
    -- Built with fam-tools.com/free-tools/fxmanifest-generator
    
    -- cerulean is the current FXv2 version. Each version inherits the
    -- previous one, so cerulean is bodacious plus the NUI secure context.
    fx_version 'cerulean'
    game 'gta5'
    
    -- Metadata. These three are convention, not documented entries:
    -- the manifest reference says metadata keys can be arbitrary.
    author 'PiTyUs C'
    description 'What this resource does, in one line.'
    version '1.0.0'
    
    -- shared_scripts loads on BOTH sides, and on each side it loads
    -- before that side's own list. Config tables and pure helpers go
    -- here. Anything that touches a native or the database does not,
    -- because this code also runs on the client.
    shared_script 'config.lua'
    
    client_script 'client/main.lua'
    
    -- Server files are never downloaded to clients. Secrets live here.
    server_script 'server/main.lua'
    

    HOW TO USE IT

    From a preset to a loading resource

    Start from the preset closest to what you are building. Each one is a working shape, not a blank form.

    1. Pick the preset. Plain script for a config plus a client and a server file. NUI for anything with an interface. Vehicle, map and clothing for streamed assets — those three come with the data_file entries already filled in, which is the part that is hard to remember and silent when it is wrong.
    2. Name the folder in lowercase. Underscores or dashes, nothing else. A capital letter works on your Windows machine and then fails on the Linux box you deploy to, because that filesystem is case-sensitive and the resource name is a path.
    3. Put the shared things in shared_scripts. Config, constants, locale tables, pure helpers. Not the database layer, not an API key, not anything that calls a native on one side only — shared files are downloaded to clients and run on both sides.
    4. If there is a ui_page, fill in files properly. The page itself and every asset it loads. Globs for a bundled front end. The validator will tell you if the page is not covered, because that is the bug that produces a blank black rectangle and no error anybody finds.
    5. Declare what you depend on. Resource names in the dependencies list, runtime constraints in their own fields. If you tick ox_lib or oxmysql, both the load line and the dependency are added for you.
    6. Download it as fxmanifest.lua into the resource root. Not a subfolder, and not __resource.lua — that is the superseded name, and a resource with both is a resource where you will edit the wrong one.

    The load order, in one paragraph

    On the server: shared files, then server files. On the client: shared files, then client files. Within each list, the order you write them in is the order they load, and a glob loads in filesystem order — so two files that depend on each other should either be named so the order falls out right, or be listed explicitly. The manifest gives you no ordering at all between resources; that is what dependency is for, and failing that, the order of ensure lines in server.cfg.

    FX_VERSION

    The three versions, and what each actually changed

    They inherit each other, so picking one picks everything below it too.

    cerulean2020-05current

    Loads NUI in a secure context, so WASM and fetch work — at the cost of NUI callbacks having to be https:// rather than http://. This is the current FXv2 version and the one to use.

    bodacious2020-02

    Implies clr_disable_task_scheduler, and stops defining `window` in JS contexts for library compatibility. Only pick it if a dependency genuinely needs it.

    adamant2019-12

    The FXv1 equivalent. Requires a game to be specified and is mandatory for RedM. There is no reason to start a new resource here.

    REFERENCE

    Every manifest key, and the trap that comes with it

    Marked documented, deprecated or convention — because the reference itself says metadata keys can be arbitrary, and three of the keys everybody uses are in that category.

    KeyWhat it doesSource
    fx_versionWhich functionality set the resource gets. One of adamant, bodacious or cerulean; each inherits the one before it. cerulean is current. Missing it entirely is the commonest cause of "resource manifest is invalid" — the server will not guess.documented
    game / gamesWhich game APIs the resource may use: common, gta5 or rdr3. Singular for one, the games table for several. adamant and above require it. A FiveM-only script wants game 'gta5', not common — common cannot reach a single game native.documented
    authorYour name. It appears in the reference's example but is not a documented entry — the page says metadata keys can be arbitrary.convention
    descriptionWhat the resource is. Same status as author: convention, shown in txAdmin, not in the spec.convention
    versionYour version string. Also convention. Several update checkers read it, which is the only reason it matters.convention
    shared_script / shared_scriptsLoaded on both sides, and added to the resource packfile. Runs before the client and server lists on its own side. Anything in here runs twice — once per side. Configuration tables and pure functions belong here; anything that touches a native or a database does not.documented
    client_script / client_scriptsLoaded on the client, and implicitly added to the packfile so it downloads. Supports globbing.documented
    server_script / server_scriptsLoaded on the server only. Never downloaded to clients, which is why secrets go here and nowhere else.documented
    ui_pageSets the resource's NUI page, to a file in the resource or a URL. Setting it is half the job. The page and every asset it loads must also be in files, or NUI fetches a 404 and draws nothing.documented
    file / filesAdds a file to the packfile so clients download it on joining the resource. This is the list NUI serves from. A stylesheet or font that is not in it gives you an unstyled page with no error in the console you would notice.documented
    dependency / dependenciesRequires another resource to load first. The table form also takes runtime constraints: /server:BUILD, /onesync, /gameBuild:ALIAS, /policy:NAME and /native:HASH. Singular takes one string, plural takes a table. The plural one is where the slash-prefixed constraints go — they are not resource names.documented
    provideMarks this resource as a replacement for another, so resources that depend on the original are satisfied. qbx_core provides qb-core this way, which is how qb-* resources run on Qbox at all.documented
    data_fileMounts a file into the game's extra content system, by type. Supports globbing in the filename. A wrong type name fails silently: the file never mounts, no error appears, and your add-on car has stock handling.documented
    this_is_a_mapMarks the resource as a GTA map and reloads map storage when it starts. Any value will do.documented
    server_onlyClients download nothing from this resource at all. It is the right answer for a pure server script, and it will break any resource with a client script or a ui_page.documented
    loadscreenThe HTML file used as the game loading screen.documented
    loadscreen_manual_shutdownKeeps the loading screen up after the game data loads; you close it yourself with SHUTDOWN_LOADING_SCREEN_NUI.documented
    escrow_ignoreWhich files stay readable when the resource is pushed through Asset Escrow. It only does anything to an escrowed asset. In an open resource it is inert — and leaving it in tells everybody which files you planned to encrypt.documented
    lua54The reference now says: deprecated, you do not need to enable it, and as of June 2025 all Lua scripts use 5.4 already. Harmless but pointless. If you see it in a resource you downloaded, that resource predates June 2025 and probably has other assumptions to check.deprecated
    node_versionPicks the Node version for the server scripting runtime. Documented values are 16, the default, and 22.documented
    clr_disable_task_schedulerTurns off the custom C# task scheduler on the server. Already implied from bodacious upward.documented
    replace_level_metaReplaces the level meta with your own file. The file also has to be listed in files.documented
    before_level_meta / after_level_metaLoads a level meta around the primary one. The reference says to use data files wherever possible instead.deprecated
    resource_manifest_versionThe FXv1 GUID. The reference says outright: you should be using fxmanifest.lua and fx_version instead.deprecated
    use_experimental_fxv2_oalEnables One Argument List for Lua. Marked experimental in the reference; qbx_core ships with it on.experimental
    export / server_exportExports a global function from a client or server script. The reference steers you away from export: use the exports('name', fn) call instead. server_export has no such note.documented
    convar_categoryAdds your convars to the Project Settings page in FxDK, with a type: CV_STRING, CV_BOOL, CV_INT, CV_SLIDER, CV_COMBI, CV_PASSWORD or CV_MULTI.documented

    STREAMING

    The data_file types this tool offers

    A working subset of the published list, spelled exactly as the reference spells them. A wrong type never errors — it just does not mount.

    TypeWhat it mountsExample path
    VEHICLE_METADATA_FILEvehicles.meta — the model definition itself.data/vehicles.meta
    HANDLING_FILEhandling.meta — how it drives.data/handling.meta
    CARCOLS_FILEcarcols.meta — model variation and mod kit data.data/carcols.meta
    VEHICLE_VARIATION_FILEcarvariations.meta — colour combinations and kits.data/carvariations.meta
    VEHICLE_LAYOUTS_FILEvehiclelayouts.meta — seats, entry animations, in-car layout.data/vehiclelayouts.meta
    VEHICLE_SHOP_DLC_FILEDealership entries for an add-on vehicle.data/dlctext.meta
    VEHICLEEXTRAS_FILEExtras data.data/vehicleExtras.dat
    VFXVEHICLEINFO_FILEVehicle particle and effect info.data/vfxvehicleinfo.meta
    DLC_ITYP_REQUESTRegisters a prop type definition. The documented example is an .ityp; streamed map resources point it at the .ytyp.stream/myprops.ytyp
    DLC_POP_GROUPSpopgroups.ymt — which peds and vehicles populate the world.data/popgroups.ymt
    POPSCHED_FILEPopulation scheduling override.data/popcycle.dat
    GTXD_PARENTING_DATATXD parent and child relationships for map textures.data/gtxd.meta
    INTERIOR_PROXY_ORDER_FILEInterior proxy order for an MLO.data/interiorproxies.meta
    SCENARIO_POINTS_OVERRIDE_PSO_FILEScenario points manifest, for ambient animations in a map.data/scenarios.ymt
    SHOP_PED_APPAREL_META_FILEClothing shop entries for streamed apparel.data/shop_ped_apparel.meta
    PED_METADATA_FILEThe ped definition itself, for an add-on ped.data/peds.meta
    PED_PERSONALITY_FILEpedpersonality.meta — behaviour profile for an add-on ped.data/pedpersonality.meta
    TATTOO_SHOP_DLC_FILETattoo and overlay shop entries.data/tattoo.meta
    OVERLAY_INFO_FILEOverlay definitions for ped decoration.data/overlay.xml
    WEAPONINFO_FILEAn add-on or modified weapon definition.data/weapons.meta
    WEAPON_METADATA_FILEWeapon metadata.data/weaponmeta.meta
    WEAPONCOMPONENTSINFO_FILEAttachments and components.data/weaponcomponents.meta
    WEAPON_ANIMATIONS_FILEPer-weapon animation set.data/weaponanimations.meta
    LOADOUTS_FILELoadout definitions.data/loadouts.meta
    DLC_WEAPON_PICKUPSPickup definitions for an add-on weapon.data/pickups.meta
    AUDIO_WAVEPACKA folder of wave packs, not a single file.audio/sfx/mypack
    AUDIO_GAMEDATAA .dat151.rel game data file.audio/mysounds_game.dat
    AUDIO_SOUNDDATAA .dat54.rel sound data file.audio/mysounds_sounds.dat
    AUDIO_SPEECHDATAA .dat4.rel speech data file.audio/myspeech.dat
    CLIP_SETS_FILEClip set definitions for custom animations.data/clip_sets.xml
    CONDITIONAL_ANIMS_FILEConditional animation definitions.data/conditionalanims.meta
    SCENARIO_INFO_FILEScenario definitions.data/scenarios.meta
    EXPLOSION_INFO_FILEExplosion definitions.data/explosion.meta
    PTFXASSETINFO_FILEParticle effect asset registration.data/ptfxassetinfo.meta
    TIMECYCLEMOD_FILEA timecycle modifier, for interior lighting.data/timecycle_mods.xml
    TRAINTRACK_FILETrain tracks.data/traintracks.xml
    TRAINCONFIGS_FILETrain configuration.data/trainconfigs.xml
    CONTENT_UNLOCKING_META_FILEContent unlock definitions.data/unlocks.meta
    STREAMING_REQUEST_LISTS_FILEStreaming request lists.data/streamingrequestlists.meta
    ZONEBIND_FILEZone binding.data/zonebind.ymt

    The full reference lists 89 types, most of them with no description at all. These are the ones a FiveM resource actually uses. Note that the published list gives no file extensions — the example paths above are the ones the reference shows, except DLC_ITYP_REQUEST, where the documented example is an .ityp and every streamed map resource in practice points it at the .ytyp. If you are following a map tutorial, use the .ytyp.

    QUESTIONS

    About the resource manifest

    Which fx_version should I use?
    cerulean. The reference lists three — adamant from December 2019, bodacious from February 2020 and cerulean from May 2020 — and calls cerulean the current FXv2 version. They inherit each other, so cerulean is bodacious plus one change: NUI loads in a secure context, which lets you use WASM and fetch, and requires your NUI callbacks to be https:// rather than http://. That is the only thing you have to fix when you move an old resource up, and it is a find-and-replace.
    Why does shared_scripts load first, and what belongs in it?
    shared_scripts is loaded on both the client and the server, and on each side it runs before that side's own list. So a config table or a helper function defined in a shared file is already present by the time your client and server code starts. That is what it is for: configuration, constants, pure functions, locale tables, anything both sides need to agree on. What does not belong in it is anything side-specific, for two reasons. The code genuinely runs twice, once per side, so a loop or a registration in a shared file happens on both. And shared files are downloaded to clients — so a database credential or an API key in a shared file is a public credential.
    My NUI page is blank. Why?
    Almost always because files does not list it. ui_page tells the game which URL to open inside your resource; it does nothing at all to make that file reachable. files is the list of what a client actually downloads, so a ui_page with no matching files entry opens a URL that resolves to nothing and you get a transparent rectangle with no useful error. The same applies to every asset the page pulls in — the stylesheet, the JS bundle, the fonts, the images. Miss the CSS out and the page renders unstyled, which looks like a layout bug rather than a manifest one. For a bundled front end use globs, because a hashed filename changes on every build and a hand-written list goes stale silently.
    Why does @ox_lib/init.lua go in shared_scripts?
    Because the library has to define its lib table on both sides, and it has to do it before any of your own files run. shared_scripts is the only list that guarantees both of those. The @ prefix means "load this file out of that other resource" rather than out of mine, so the file lives in ox_lib and is pulled in at load time — which is also why ox_lib has to be a declared dependency. Without the dependency it works right up until the day ox_lib happens to start after you, and then lib is nil and the error points at your file rather than at the missing line. ox_lib's own documentation publishes exactly this: shared_scripts { '@ox_lib/init.lua' }.
    What is the difference between dependency and dependencies?
    The singular takes exactly one string — dependency 'oxmysql' — and qb-core's own manifest uses precisely that. The plural takes a table, and it is the only one that can hold the slash-prefixed runtime constraints: /server:BUILD for a minimum FXServer artifact, /onesync to refuse to start with OneSync off, /gameBuild:ALIAS, /policy:NAME and /native:HASH. Those are not resource names. Put /onesync in a singular dependency line and you have a resource waiting forever for a resource called "/onesync", which never appears and never errors in a way that tells you why. qbx_core is the worked example: its dependencies block lists /server:10731, /onesync, ox_lib and oxmysql together.
    Do I still need lua54?
    No, and the reference says so in as many words: "This setting is deprecated and you do not need to enable it. As of June 2025, Lua 5.3 has been deprecated and all Lua scripts now use the 5.4 version." This generator leaves it out by default. It is harmless if you keep it, it simply does nothing — but a manifest that still carries it is one nobody has read since mid-2025, which is a useful thing to know about a resource you just downloaded.
    Why did my add-on car load but drive like the stock model?
    A data_file type that is not spelled exactly right fails silently. No error, no warning — the file is never mounted, so the game falls back to whatever it already had. HANDLING_FILE missing or misspelled is the classic: the model streams in perfectly and handles like the vehicle it was based on. The picker here only offers types from the published data files reference for that reason. Note too that a streamed .meta usually needs to be in both data_file, which says what it is, and files, which gets it to the client.