Vehicle Pack Validator
Check a FiveM vehicle resource for broken links between metas, stream files and fxmanifest. Every check it runs, what it means and how to fix it.
Эта документация пока на английском.
The Vehicle Pack Validator reads an addon car resource (or a whole [cars] folder) and reports every broken link between fxmanifest.lua, the vehicle metas and the files in stream/. Each finding names the file and line and says what to change. It is for server owners installing car packs and for devs who build them.
What it is for
A car that does not spawn, spawns without textures, has no tuning parts or flashes another car’s light pattern is almost always a wiring problem, not a model problem: a data_file line with the wrong type, a meta missing from files { }, a handlingId with a typo, a kit id that another pack already uses. Finding those by hand across five metas and a manifest takes a long time, and it gets worse when you merge twenty car resources.
Drop the pack here before you put it on the server, or when a car misbehaves and you want to rule out the metas.
Quick start
- Open the tool and use Choose a folder (pick the resource folder, or the parent
[cars]folder), Open a .zip, or drag the folder or zip onto the card. - Wait for the progress bar to finish reading the files.
- Read the verdict at the top: Ready to ship, Works, with problems or Broken, with counts of errors, warnings, notes, vehicles, broken cars and resources.
- Work through the Findings tab, errors first. Click a model name under a finding to jump to that car in the Vehicles tab.
- Open the fxmanifest tab to compare your manifest with the one built from the files that are really in the folder.
- Press Report .md to download the whole report as Markdown for a ticket or a Discord post.
No pack at hand? Try a sample loads a made up pack with invented names and placeholder model files, broken on purpose.
Note
Everything is read in your browser, nothing is uploaded. Big model files are not opened in full, so even a large car folder checks quickly.
Input
What you can drop:
- One resource folder (the one with
fxmanifest.luaor__resource.lua). - A folder holding many resources. Each folder with a manifest becomes its own resource, and conflicts between them are checked.
- A
.zip. Normal and zip64 archives with store or deflate compression work. Password protected zips and 7z or rar archives must be extracted first. Files the zip reader skips are listed under the verdict.
Vehicle files that sit in no resource with a manifest are grouped by their top folder (the folder above stream/, data/, meta/, metas/, audioconfig/ or sfx/), so a pack without a manifest is still checked and gets a “no fxmanifest” error.
Ignored: __MACOSX/, .git/, .DS_Store, Thumbs.db, desktop.ini.
What it looks at:
| Files | Used for |
|---|---|
*.meta |
The vehicle metas. You can name them anything: a meta is recognised by its root element (CVehicleModelInfo__InitDataList is vehicles.meta, CHandlingDataMgr handling, CVehicleModelInfoVarGlobal carcols, CVehicleModelInfoVariation carvariations, CVehicleMetadataMgr vehiclelayouts, plus dlctext, content unlocks and shop metas). |
.yft .ytd .ydr .ydd |
Presence, location, file type and memory size. |
Other stream files (.ybn .ycd .ymap .ytyp …) |
Name and location. |
*.dat151.rel, *.dat54.rel, .awc and other audio data |
Engine sound checks and the audio data_file lines. |
Client and shared *.lua |
AddTextEntry calls for car display names. |
*.fxap |
Marks the resource as escrowed. |
The report
Verdict
- Broken: at least one error. The title says how many cars will not work as shipped.
- Works, with problems: no errors, some warnings.
- Ready to ship: no errors or warnings. Notes may remain, they are optional.
Findings tab
Findings are grouped: fxmanifest and data_file, Stream files, vehicles.meta, handling.meta, Mod kits (carcols and carvariations), Sirens, Engine sound, Asset size, Conflicts between resources, File and folder names. The filter row switches between All, Errors, Warnings and Notes. Each finding has a title, evidence lines (file:line and what was found) and a fix. Model buttons under a finding open that car in the Vehicles tab.
Vehicles tab
One row per modelName, worst status first. The chips show what the car links to:
| Chip | Meaning |
|---|---|
.yft |
The model file, with its path and memory size. Red when missing, amber when over 16 MiB. |
_hi |
The high detail model. Amber when missing. |
.ytd |
The texture dictionary from txdName. |
handling |
The matching handlingName, or “base game”. |
variations |
The carvariations entry. |
kit |
Kits and their ids. |
siren |
sirenSettings id, only for cars that have one. |
sound |
audioNameHash and whether it is a base game sound, in this pack or not found. |
Open a row to see the meta file and line plus all findings for that car. With more than 6 vehicles a filter box appears (by model or resource).
fxmanifest tab
A suggested manifest per resource, built from what is really in the folder. It says whether it differs from the current manifest or matches it. The rules:
fx_version 'cerulean'andgame 'gta5', pluslua54,name,author,description,versionif you had them.- Your
shared_scripts,client_scriptsandserver_scriptsare kept. - One
data_fileline per vehicle meta with the type that matches its root element, and one per sound file, in Rockstar’s DLC order:HANDLING_FILE,VEHICLE_LAYOUTS_FILE,VEHICLE_METADATA_FILE,CARCOLS_FILE,VEHICLE_VARIATION_FILE,CONTENT_UNLOCKING_META_FILE,VEHICLE_SHOP_DLC_FILE,TEXTFILE_METAFILE,AUDIO_SYNTHDATA,AUDIO_GAMEDATA,AUDIO_SOUNDDATA,AUDIO_WAVEPACK. - Other valid
data_filelines you had (types this tool does not manage) are kept.DLCTEXT_FILEis dropped. files { }lists every data file target, the.nametablefiles,<folder>/*.awcfor wave packs, and your own entries for other files (images, json).escrow_ignoreis kept.
Compare it with yours before you replace anything.
Every check
Severity: Error blocks loading (car does not spawn, meta not loaded, crash). Warning means it loads but looks, sounds or behaves wrong, or clashes with something. Note is information.
fxmanifest and data_file
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| No fxmanifest.lua | Error | A folder with metas or stream files has no manifest, so FiveM never starts it. | Add an fxmanifest.lua (the suggested one is a start) and ensure the folder. |
| Both manifests | Warning | fxmanifest.lua and __resource.lua exist. FiveM ignores __resource.lua. |
Move what you need into fxmanifest.lua, delete __resource.lua. |
| Legacy manifest | Note | The resource still uses __resource.lua. |
Rename to fxmanifest.lua, replace resource_manifest_version with fx_version 'cerulean' and game 'gta5'. |
| Lua syntax problem | Error | Unclosed string, unclosed --[[ comment, unclosed {, a missing comma between table entries, or data_file without both a type and a path. Everything after the break is silently missing. |
Fix the line shown. The server console shows the same error on start. |
fx_version missing |
Error | The resource does not start. | Add fx_version 'cerulean' at the top. |
game missing |
Warning | The server warns about manifests without a game. | Add game 'gta5'. |
this_is_a_map in a vehicle resource |
Note | Makes the client reload the map store on start. Cars do not need it. | Remove it unless the resource also streams map files. |
| files entry matches no file | Warning | A files { } path points at nothing. |
Fix the path (relative to the resource folder) or remove it. |
| files entry only matches with different case | Warning | Works on Windows, finds nothing on Linux. | Make the path match the real file name exactly. |
| data_file loaded twice | Warning | The same type and path appear twice, so every entry is added twice. | Remove the duplicate line. |
DLCTEXT_FILE |
Note | Not a type FiveM has a loader for. It does nothing. | Delete the line. Car names come from AddTextEntry. |
| Unknown data_file type | Error | A misspelled type is ignored, so the file never loads. Close matches are suggested. | Use the exact type name, it is case sensitive. |
| Audio data_file uses a wildcard | Error | Audio data files cannot be globbed. | One line per sound pack with the exact path. |
| data_file points at a missing file | Error | Nothing matches the path. For audio types the path must be the file without the version suffix, for AUDIO_WAVEPACK the folder. |
Fix the path. audioconfig/mycar_game.dat151.rel is written audioconfig/mycar_game.dat. |
| data_file not in files { } | Error | Clients only download what files { } lists, so the game never sees it. |
Add the path to files { }. |
| Wrong data_file type for a meta | Error | A vehicles.meta loaded as HANDLING_FILE and so on. The type is checked against the root element. |
Change the type to the one the finding names. |
| Meta never loaded | Error (core metas), Note (content unlocks, shop meta) | A vehicles, handling, carcols, carvariations or vehiclelayouts meta has no data_file line. |
Add the data_file line and list the file in files { }. |
| CARCOLS or VARIATION before VEHICLE_METADATA | Note | Rockstar loads vehicles.meta, then carcols.meta, then carvariations.meta. FiveM only moves handling and layouts to the front. | Reorder the lines to rule it out. |
| Not a vehicle meta | Note | A meta with an unknown root element. Not checked. | Make sure it has the right data_file type if it belongs to the car. |
| Not valid XML | Error | The game skips or crashes on a meta it cannot parse. | Fix the tag at the line shown (VS Code highlights the break). |
Globs follow FiveM’s rules: * and ? stay inside one folder, ** matches any number of folders.
Stream files
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| Files outside stream/ | Error | .yft, .ytd, .ydr or .ydd not under stream/. Listing them in files { } does not stream them. |
Move them into stream/ (subfolders are fine). |
| Stream folder spelled differently | Warning | Stream/ or STREAM/. Linux hosts do not find it. |
Rename to lowercase stream. |
| Exported XML or openFormats file | Error | .yft.xml, .ytd.xml, .oft, .otd and so on. The game only loads compiled files. |
Import in CodeWalker (or OpenIV) and save the binary, delete the export. |
| Not a GTA V resource file | Error | Empty, damaged or renamed from another format (not checked for escrowed resources). | Re-export the file or get a fresh copy from the author. |
| Enhanced edition (RSC8) asset | Error | FiveM runs the Legacy game and cannot load RSC8. | Use the Legacy version or convert it with CodeWalker. |
| Wrong resource version | Warning | Expected yft 162, ytd 13, ydr 165, ydd 165. Usually a file renamed to the wrong extension. |
Check the file really is what its extension says. |
| Same file twice in one resource | Warning | Streaming uses the file name only, so one silently replaces the other. | Keep one copy. |
| Meta or script inside stream/ | Warning | Files in stream/ are streamed as assets, not loaded as data. |
Move metas to data/ and load them with data_file. Scripts go in client_scripts. |
vehicles.meta
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| Defines no vehicles | Warning | <InitDatas> is missing or empty. |
Check the file was not saved half way. |
| No modelName | Error | An entry without <modelName>. |
Set it to the .yft name without extension. |
| No .yft for modelName | Error | The car cannot spawn (“model does not exist”). If the name is a base game car, it is a Note instead: the entry edits that car. | Stream <model>.yft or fix <modelName>. |
_hi.yft missing |
Warning | No high detail model, the car can look low poly or flicker up close. | Stream <model>_hi.yft (a copy of the .yft works). |
| No txdName | Error | Entry without <txdName>. |
Set it to the model name and stream <model>.ytd. |
| txdName has no .ytd | Error | Not in the pack, not a model name, not a shared game txd. Car renders white, checkered or not at all. | Stream the .ytd or point txdName at the right one. If <model>.ytd exists, the fix says to use it. |
<model>.ytd exists but txdName differs |
Warning | The model’s own .ytd is streamed for nothing. |
Set <txdName> to the model name if that is where the textures are. |
| Layout does not exist | Error | Not a base game layout and not in a loaded vehiclelayouts.meta. Breaks entering the car or crashes. | Use LAYOUT_STANDARD, LAYOUT_LOW or ship the layouts file. |
| Unknown vehicle type | Warning | <type> is not a game type. |
Usually VEHICLE_TYPE_CAR. |
| Unknown vehicle class | Warning | <vehicleClass> is not a game class. |
Use one the finding lists. |
| No display name | Note | No AddTextEntry for <gameName> in the resource’s Lua, so menus show NULL. |
Add AddTextEntry('<gameName>', 'Your Car Name') in a client script. |
| txd parent does not exist | Warning | <txdRelationships> parent is not in the pack or the game. |
Point it at a .ytd in the pack or a shared game txd like vehshare. |
| txd child is not in the pack | Note | The relationship does nothing. | The child is usually the car’s txdName. |
| modelName has special characters | Warning | Spaces and symbols break spawn commands and garages. | Use a-z, 0-9 and _, rename files to match. |
| No carvariations entry | Warning | No default colours and no mod kit, tuning menus stay empty. | Add an entry with colours and <kits> (0_default_modkit if no custom parts). |
| Also a base game car | Warning | A streamed .yft with a base game model name replaces that car for everyone, traffic too. |
Rename the model if it is meant as a new car. |
handling.meta
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| No handlingId | Error | Entry without <handlingId>. |
Set it to a <handlingName> from handling.meta. |
| handlingId not in any handling.meta | Error | Keeps the car from spawning or crashes the client. | Add the handling entry or fix the id. |
| Uses base game handling | Note | The id is a base game handling name. | Fine if on purpose. |
| handling without handlingName | Error | Empty <handlingName>. |
Use the name vehicles.meta refers to. |
| handling not used | Note | No vehicle in the pack uses it. | Check for a typo or remove it. |
| handling changes a base game car | Warning | The name is a base game handling, so every car of that model on the server drives differently. | Rename it and point handlingId at the new name. |
| handlingName defined more than once | Warning | Only the last one loaded is used, start order decides. | Keep one, or give each car its own name. |
Mod kits (carcols and carvariations)
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| carvariations for an unknown model | Warning | No vehicles.meta defines that modelName. |
Fix the typo or add the missing vehicles.meta. |
| No mod kit | Note | <kits> is empty, tuning menus show nothing. |
Add <Item>0_default_modkit</Item> or the car’s own kit. |
| Kit not in any carcols.meta | Warning | The car gets no tuning parts. | Match the <kitName> exactly or load the carcols.meta that has it. |
| Kit has no numeric id | Error | <id value="..." /> missing or not a number. |
Give every kit a unique id. |
| Kit id above 65535 | Error | Kit ids are 16 bit, it wraps and collides. | Pick an unused id between 1000 and 65535. |
| Kit id used by the base game | Warning | Tuning parts get mixed with a game car’s kit. Game ids run 0 to 640 and 999. | Move yours above 1000 and keep a list across your packs. |
| Kit not used by any car | Note | No carvariations entry lists it. | Add it to the car’s <kits>. |
| Tuning parts with no .yft | Warning | visibleMods or linkMods model missing, the part shows in the menu but is invisible. |
Stream the .yft or remove the entry. |
| Kit id used by several kits | Error | Two kits with different names share an id, across resources too. | Give all but one a new id. |
| Kit name with different ids | Warning | carvariations picks kits by name, so only one is used. | Rename one kit and update its carvariations. |
Sirens
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| sirenSettings not defined | Warning | The id in carvariations exists in no carcols.meta or the game. Lights stay dark. | Load the carcols.meta with that siren id or use one that exists. |
| Siren id above 255 | Warning | FiveM keeps 8 bits, so 300 acts as 44 (citizenfx/fivem issue 2612). | Use a free id between 21 and 254. |
| Siren id taken by the base game | Warning | Game ids are 0 to 20. The patterns overwrite each other. | Pick a free id above that. |
| Siren settings share an id | Error | Also after the 255 wrap. Only one wins, other cars flash the wrong pattern. | Give each its own id and update sirenSettings. |
Engine sound
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| No audioNameHash | Note | Empty on a new model, so the car falls back to a generic engine. | Set it to a base car (ADDER, SULTAN) or your sound pack name. |
| Sound not in this pack’s game.dat | Warning | The pack has sound files but none of its .dat151.rel files defines a sound with that name. |
Check the spelling against the sound pack. |
| Sound is not a base game sound | Warning | No sound pack in the drop. Silent or default sound unless another resource streams it and starts first. | Ship the sound pack or use a base car name. |
| Audio file never loaded | Error | A .dat151.rel, .dat54.rel or .dat10.rel has no matching AUDIO_GAMEDATA, AUDIO_SOUNDDATA or AUDIO_SYNTHDATA line (or the wrong type). |
Add data_file '<TYPE>' '<path without the number and .rel>' and list the .rel in files { }. |
| Sound folder has no AUDIO_WAVEPACK | Error | A folder of .awc files is never mounted. The car is silent. |
Add data_file 'AUDIO_WAVEPACK' '<folder>' and list the .awc files. |
Asset size
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| Oversized asset | Warning over 16 MiB, Error over 48 MiB | The file’s physical or virtual memory size, the number the server prints in its “Asset uses X MiB of physical memory” warning. FiveM says assets over 48 MiB “can and WILL lead to streaming issues”. | .ytd: 2048 px is plenty for a body, 512 to 1024 for details, DXT1/BC1 without alpha. Models: fewer polygons, textures out to the .ytd. |
| Large file (header unreadable) | Warning | Escrowed or unreadable header and the file is over 16 MiB on disk. Only a hint. | Check it in CodeWalker. |
File and folder names
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| Resource folder name | Error with spaces, Warning with other symbols | ensure cannot start a name with spaces. |
Rename to lowercase letters, numbers, _ or -. |
| Paths with spaces | Warning | Break globs and some hosting panels. | Use underscores and update metas and manifest. |
| Stream files with special characters | Warning | The asset name no longer matches what the metas ask for. | Rename to plain lowercase names. |
| Stream files with uppercase | Note | Works, the game ignores case. | Lowercase avoids typos. |
| Escrowed resource | Note | .fxap found. Only runs with the owning license key, sizes are estimated. |
Do not rename or move escrowed files. |
Conflicts between resources
| Check | Severity | What it means | How to fix |
|---|---|---|---|
| modelName defined more than once | Error | Only one definition wins, start order decides. | Keep one, or rename a car. |
| Stream files in several resources | Warning | One finding per group of resources that share file names. The last started wins. | Often the same car installed twice: remove one. |
Handling, kit, kit name and siren duplicates across resources are also listed under Conflicts.
Example
A typical manifest from the fxmanifest tab for a car with its own engine sound:
fx_version 'cerulean'
game 'gta5'
client_scripts {
'client.lua',
}
files {
'data/handling.meta',
'data/vehicles.meta',
'data/carcols.meta',
'data/carvariations.meta',
'audioconfig/mycar_game.dat151.rel',
'audioconfig/mycar_sounds.dat54.rel',
'sfx/dlc_mycar/*.awc',
}
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'
data_file 'AUDIO_GAMEDATA' 'audioconfig/mycar_game.dat'
data_file 'AUDIO_SOUNDDATA' 'audioconfig/mycar_sounds.dat'
data_file 'AUDIO_WAVEPACK' 'sfx/dlc_mycar'And the display name the “No display name” note asks for:
CreateThread(function()
AddTextEntry('MYCAR', 'My Car GT')
end)Tips
- Drop all your car resources at once. Kit id, siren id, handling and stream file clashes only show up when the tool sees both sides.
- Keep one list of the kit and siren ids you use across packs. Base game kits run up to 640 (and 999), sirens up to 20.
- Links with
?sampleopen the tool with the sample pack loaded, and?tab=vehiclesor?tab=manifestpicks the tab that opens after a check.
Warning
If a check is clean and a car still misbehaves, open the F8 console while you spawn it and look for streaming errors. This tool does not open the models.
Limitations
- It reads metas and file headers. It does not open the models, so it cannot see a broken mesh, missing bones or a wrong embedded texture.
- Escrowed (
.fxap) stream files are encrypted, so their memory size is estimated from the file size. - A sound that another resource provides cannot be seen from here. The finding says so instead of calling it broken.
- Handling values themselves are not judged. Use the handling editor for that.
- Everything runs in your browser. Nothing is uploaded.
Related tools
- Vehicle Handling Editor
- Vehicle Sirens to build siren settings with free ids
- YTD Optimizer for oversized texture dictionaries
- Native Audio Builder for custom sound banks
- fxmanifest Generator
