The 60-second diagnosis
An invisible car in FiveM is almost never a broken model. It is the game failing to find or load the model file, and there are only seven ways that happens. Before you touch anything, do this:
asset, streaming or exceeds.ensure the resource. Errors about data_file or the manifest show up there, not in-game.Tip:
Failed spawns still consume the player's patience. Fix the resource on a dev server before pushing it to production.
Cause 1: The .yft is not inside stream/
FiveM only streams files that sit in a folder named stream (any depth, but it must be called stream). Converted mods from gta5-mods.com often arrive with the model next to the manifest, or inside stream/x64/levels/... from the original single-player structure. Both work on a local game and fail on FiveM.
Fix: Move carname.yft, carname_hi.yft and carname.ytd into resource/stream/. Subfolders inside stream are fine.
Cause 2: The texture dictionary is over 16 MB
FiveM drops any single streaming file above 16 MiB. When the .ytd is dropped you usually get a black or white car; when the .yft itself is over the limit the car is fully invisible. High-poly showroom conversions hit this constantly.
Fix: Check the file sizes. Anything over 16 MB has to shrink. Textures go down to 2048 px or 1024 px with Glory Optimizer; a model over 16 MB has to be re-exported with fewer polygons or split into LODs.
Cause 3: The spawn name does not match the file name
vehicles.meta says <modelName>bmwm4</modelName> but the file is BMW_M4.yft, or bmwm4comp.yft. The game hashes the model name and looks for a file with that exact hash. Case matters on Linux hosts.
Fix: Make the file name, the modelName, and the txdName identical and lowercase. Rename the files rather than editing metas if you are unsure; fewer places to break.
Cause 4: vehicles.meta is not declared in fxmanifest.lua
The meta exists, but the manifest never tells FiveM to mount it. Without data_file 'VEHICLE_METADATA_FILE' the game has no idea the spawn name exists, so the spawn command either fails silently or spawns nothing.
Fix: Your manifest needs both the files entry and the data_file line for every meta:
fx_version 'cerulean'
game 'gta5'
files {
'data/vehicles.meta',
'data/carvariations.meta',
'data/handling.meta',
}
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'
data_file 'HANDLING_FILE' 'data/handling.meta'The Inspector generates this block for the metas it finds in your resource.
Cause 5: Missing or wrong handlingId
vehicles.meta points at <handlingId>BMWM4</handlingId> but handling.meta has <handlingName>BMW_M4</handlingName> or no entry at all. Depending on the build this gives a car that spawns invisible, a car with default physics, or a client crash.
Fix: Copy the handlingName from handling.meta into handlingId exactly. Use the Handling Editor if the handling file is missing entirely.
Cause 6: The _hi.yft is missing or the base .yft is a copy of it
Some conversions ship only carname_hi.yft. The game needs the base carname.yft to know the car exists; the _hi file is the close-up detail model. With only the _hi file you get nothing. With only the base file you get a low-detail car that looks fine from far away and blurry up close.
Fix: Ship both. If you only have one, duplicate it and name the copy accordingly; it is not ideal for performance but it renders.
Cause 7: A spaces-or-uppercase problem in the path
stream/BMW M4/bmwm4.yft fails on Linux servers. So does data/Vehicles.meta when the manifest says data/vehicles.meta.
Fix: Lowercase everything, underscores instead of spaces, and keep the manifest paths byte-identical to the real paths.
Still invisible?
Note
If the car is invisible for only some players, it is Cause 2. Their client dropped the oversized file while yours cached an older, smaller version.
Run the resource through the Resource Inspector. It flags every one of these causes with the exact file and the exact line to change, and the paid report includes a corrected manifest you can paste over yours. If you converted the mod by hand, try the automatic converter instead; it produces the stream layout and manifest correctly on the first try.