Guide Β· Server Setup
A full walkthrough of installing any FiveM custom vehicle β YFT/YTD files, the four meta files (vehicles.meta, carvariations.meta, carcols.meta, handling.meta), add-on vs. replace setups, and how to fix missing textures, wheels, or extras.
Every custom vehicle install starts with one decision that shapes the rest of the setup:
bmwm4_f82). Doesn't touch the stock cars at all. This is the recommended approach for roleplay servers.police/police2/sheriff.Most marketplace vehicles ship as add-ons by default because they're non-destructive. Police/EMS packs often ship as replacements so they slot into existing dispatch scripts without code changes.
vehicles.meta with a brand-new <modelName> that doesn't match any vanilla car, it's an add-on. If the modelName is police, ambulance, t20, or similar vanilla name, it's a replacement. The seller's README will also say.
fxmanifest.lua, server.cfg, and occasionally the meta XML files.server-data/resources/[vehicle-name]/stream/ contains YFT + YTD, and meta files are at the resource root (or in data/)fxmanifest.luaensure [vehicle-name] to server.cfgA properly-packaged vehicle resource looks like this:
bmw-m4/
βββ fxmanifest.lua
βββ stream/
β βββ bmwm4.yft # vehicle model (exterior + chassis)
β βββ bmwm4_hi.yft # LOD / high-detail variant (optional)
β βββ bmwm4.ytd # texture dictionary
β βββ bmwm4+hi.ytd # (sometimes) hi-res texture pack
βββ data/
β βββ vehicles.meta
β βββ carvariations.meta
β βββ carcols.meta
β βββ handling.meta
βββ README.md
The file types you'll see:
.yft β the 3D model. name.yft is the main model; name_hi.yft is a high-LOD variant for close-up rendering..ytd β texture dictionary (paint, interior, liveries). The +hi variant holds high-res textures.vehicles.meta β core spawn definition: model name, type, seats, flags, category.carvariations.meta β which colors, modkits, and liveries the car can spawn with.carcols.meta β defines the modkit (custom rims, spoilers, bumpers) the car uses.handling.meta β physics: braking, acceleration, mass, grip, suspension, rollbar.fxmanifest.lua) instead of in a data/ subfolder. Both work β what matters is that the fxmanifest.lua paths point to wherever the files actually are.
resources/Upload the entire vehicle folder (containing fxmanifest.lua and stream/) into your server's resources/ directory. Many server owners group vehicles by category:
server-data/
βββ resources/
βββ [vehicles]/
β βββ [civilian]/
β β βββ bmw-m4/
β β βββ audi-r8/
β β βββ porsche-911-gt3/
β βββ [police]/
β β βββ police-cars/
β β βββ swat-car/
β βββ [emergency]/
β βββ ambulance/
The square-bracket folders are organizational only β FiveM scans subdirectories recursively, so any nesting works.
.yft and .ytd must sit directly inside stream/, not in a subfolder. stream/textures/bmwm4.ytd won't auto-stream β move it to stream/bmwm4.ytd.
fxmanifest.luaThe manifest registers the meta files so FiveM knows to load them. A valid vehicle manifest looks like this:
fx_version 'cerulean'
game 'gta5'
author 'VehicleStudio'
description 'BMW M4 F82'
version '1.0.0'
files {
'data/vehicles.meta',
'data/carvariations.meta',
'data/carcols.meta',
'data/handling.meta',
}
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'
data_file 'CARCOLS_FILE' 'data/carcols.meta'
data_file 'HANDLING_FILE' 'data/handling.meta'
Each data_file line tells the FiveM streamer how to interpret the file:
VEHICLE_METADATA_FILE β for vehicles.meta.VEHICLE_VARIATION_FILE β for carvariations.meta.CARCOLS_FILE β for carcols.meta.HANDLING_FILE β for handling.meta.If a data_file line is missing, that specific aspect of the car silently fails. Missing HANDLING_FILE β car spawns but drives with default flying-brick handling. Missing CARCOLS_FILE β car spawns but has no custom modkit (no aftermarket rims, no spoilers). Missing VEHICLE_VARIATION_FILE β car always spawns in the default primary color, no livery options.
stream/ without being listed in files { }. Only the meta files need both entries.
server.cfgFor add-on vehicles (new spawn name), the install is identical to any other resource β one ensure line:
# server.cfg
# Framework & scripts first
ensure es_extended
ensure ox_inventory
ensure advanced-garage-script
# Vehicles at the bottom of the config
ensure bmw-m4
ensure audi-r8
ensure porsche-911-gt3
ensure police-cars
That's it for add-ons. Restart, then in-game run /car bmwm4 (or whatever the modelName is in vehicles.meta) to spawn it. If you use a garage or dealership script, the model name is what you enter in the script's vehicle list config.
vehicles.meta declares <modelName>bmwm4</modelName>, you spawn it with bmwm4, not BMWM4 or BmwM4. Check the meta file if /car yourname returns "model not found."
Replacement vehicles need one extra step β the modelName in vehicles.meta must match the vanilla car being replaced. Most replacement packs ship this way out of the box, but if the pack was originally sold as an add-on and you want to convert it to a replacement, you'll edit the meta yourself.
Example β replacing the stock police car with a custom Dodge Charger:
data/vehicles.meta in your text editor.<modelName> tag. Change it from the custom name (e.g., charger_police) to police.carvariations.meta β the first <modelName> inside each <Item> must match.stream/ accordingly: charger_police.yft β police.yft, and the YTD to police.ytd.ensure to server.cfg as normal.Now every script or mission that spawns police will spawn the custom Charger instead. This works for traffic spawns, NPC vehicles, vehicle shops referencing the vanilla name, and dispatch scripts.
police (or any other vanilla name), only one will load β whichever streams last, alphabetically by resource name. Don't double up on the same vanilla slot. Remove one or convert it to an add-on.
Restart the server and join in-game. To verify the vehicle:
/car modelname (admin) or spawn it from your dealership/garage script with the model name from vehicles.meta./car police β and confirm the custom model appears.Once it spawns, walk around it and check the essentials:
Take it on a short drive to check handling and sound β if the car feels like a brick or has no engine audio, the handling.meta or vehicles.meta audio reference is wrong (see troubleshooting).
The model name doesn't match the filename. FiveM expects modelName.yft to match what's inside vehicles.meta. Check: (1) the filename of the YFT in stream/, (2) the <modelName> tag in vehicles.meta, (3) case. All three must agree. Linux servers are case-sensitive on filenames.
Missing _hi.yft or an incorrectly-set-up modkit. Open carcols.meta and check the <kits> section β if there's a modkit referencing a kit ID that doesn't exist in the file, wheels won't load. The fastest fix: re-download the pack (in case the seller pushed a fix), and if it's still wrong, message the seller for a corrected file.
The YTD didn't stream, or the texture name inside the YTD doesn't match what the YFT expects. First check that stream/modelname.ytd exists and is in stream/ flat (not nested). If that's right, the YTD is corrupted or mismatched β re-download or ask the seller for a rebuild.
The audioNameHash in vehicles.meta points to a sound bank that doesn't exist or doesn't match the engine type. Open vehicles.meta and look for <audioNameHash> β if it's set to a custom name, make sure the corresponding audio pack resource is running. If it's blank, the car uses the <modelName> fallback, which may not have a real sound bank on non-vanilla names. Quick fix: change audioNameHash to a similar vanilla car's name (e.g., turismor for sports cars, police for cruisers).
The handlingName in vehicles.meta doesn't match any <handlingName> in handling.meta, so the game falls back to a default. Open vehicles.meta and handling.meta side by side β the <handlingName> tags must match exactly, case included.
The modkit isn't registered. Check carcols.meta for a <Kit> block with a numeric ID, and verify carvariations.meta lists that same ID under <kits>. Without that link, the tuning menu shows no custom options. For a car that was originally sold as add-on but you converted to replacement, also double-check you updated the modkit number in carvariations.meta β it might still reference the add-on's original kit ID that's missing now.
Missing the +hi.ytd (high-res texture variant). The low-LOD textures load from the main YTD, and the daytime high-res textures come from modelname+hi.ytd. If that file is missing, the car looks fine from far away but muddy up close. Ask the seller for the missing file.
carvariations.meta needs <sirens> and <liveries> sections declaring which livery slots the car supports. Each livery must also have a matching texture named sign_1, sign_2, etc. inside the YTD. If liveries don't show in the tuning menu, one of those links is broken. For custom dispatch liveries, a custom vehicle commission is usually the cleanest fix.
Malformed XML in one of the meta files. Isolate: remove the new pack from server.cfg, confirm the server boots. Then add it back and watch the console β the line right before the crash names the failing file. Most often it's an unclosed tag or a syntax error in a handling curve. Message the seller with the error line.
Each vehicle contributes to streaming memory. Run resmon client-side and profile server-side. If your server targets lower-end clients, cap total add-on vehicles to ~50β100 depending on detail level. For heavy fleets, a dedicated server handles streaming bandwidth better than a VPS β useful when many players spawn many custom cars at once.
Once vehicle installs are familiar:
stream/ + fxmanifest.lua pattern is the same across all FiveM asset types.Yes β they don't conflict with each other. Add-ons use new spawn names, replacements use vanilla names. A typical server has dozens of add-on civilian cars plus replacement police/EMS cruisers at the same time.
Yes. Vehicles are pure asset data with no framework dependency β they work identically on ESX, QBCore, QBox, or standalone servers. The scripts that spawn or manage them (garages, dealerships, tuning menus) care about the framework, but the vehicle resources themselves don't.
Edit carvariations.meta. The first <colors> entry is the default; reorder them or add/remove palette entries to control which colors the car spawns with from scripts that don't specify a color.
Yes β handling.meta is plain XML and every parameter is documented on the Cfx.re wiki. Common tweaks: fInitialDriveForce for acceleration, fBrakeForce for braking, fTractionCurveMax for grip. Change, restart the resource (restart bmw-m4 in console), and re-spawn the car to test.
GTA V streams low-detail textures from far away and high-detail textures up close. The +hi.ytd holds the close-up versions. If you drop only the low-res YTD, the car looks blurry when close. Always ship both if the pack includes both.
Yes, and many marketplace vehicle packs are bundled this way. The stream/ folder holds every car's YFT/YTD, vehicles.meta contains a <Item> per car, and so on for the other metas. One resource, many cars, one ensure line in server.cfg.
Usually a bad audioNameHash in vehicles.meta. Set it to a vanilla car whose engine character is close to what you want β turismor, adder, infernus, police, etc. Custom engine audio requires a separate sound-pack resource that registers new banks, which is a bigger undertaking than most vehicle packs ship with.