Introduction
Streaming a custom vehicle = adding a 3D model, textures and metadata to your server. Players download files on connection and the vehicle becomes spawnable like a vanilla one. This is what lets you have Lamborghinis, custom police cars, RP vehicles on your server.
Prerequisites
- A FiveM server at VeryCloud
- Access to Files in Wisp
- A legally obtained/purchased custom vehicle (.zip with ytd, yft, meta)
- An admin trainer to test spawn (vMenu works fine)
Step 1: FiveM vehicle structure
A FiveM vehicle minimum:
| File | Role |
|---|---|
<vehicle>.yft | 3D model |
<vehicle>_hi.yft | High-res LOD |
<vehicle>.ytd | Textures (skins, decals) |
vehicles.meta | Vehicle definition (specs, class) |
handling.meta | Handling, mass, speed |
carcols.meta | Primary/secondary colors |
carvariations.meta | Color/extra combos |
Some vehicles add _hi, +hi, damage models, etc.
Step 2: Create the resource
In Wisp → Files → /resources/[vehicles]/[custom_cars]/myveh/:
Recommended structure:
/resources/
└── [vehicles]/
└── [custom_cars]/
└── myveh/
├── fxmanifest.lua
└── stream/
├── myveh.yft
├── myveh_hi.yft
├── myveh.ytd
└── data/
├── vehicles.meta
├── handling.meta
├── carcols.meta
└── carvariations.meta
Step 3: fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'VeryCloud'
description 'Custom vehicle: myveh'
version '1.0.0'
files {
'data/vehicles.meta',
'data/handling.meta',
'data/carcols.meta',
'data/carvariations.meta'
}
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'
These data_file tell FiveM how to interpret each meta.
Step 4: vehicles.meta (the minimum)
<?xml version="1.0" encoding="UTF-8"?>
<CVehicleModelInfo__InitDataList>
<InitDatas>
<Item>
<modelName>myveh</modelName>
<txdName>myveh</txdName>
<handlingId>myveh</handlingId>
<gameName>myveh</gameName>
<vehicleMakeName>VeryCloud</vehicleMakeName>
<vehicleClass>VC_SPORT</vehicleClass>
<type>VEHICLE_TYPE_CAR</type>
<plateType>VPT_FRONT_AND_BACK_PLATES</plateType>
<wheelType>VWT_SPORT</wheelType>
<seats value="2"/>
</Item>
</InitDatas>
</CVehicleModelInfo__InitDataList>
<modelName> is the ID you use to spawn (/car myveh).
Step 5: Add to server.cfg
ensure myveh
Restart.
Step 6: Test in-game
Connect, open trainer (vMenu: M) → Vehicle Spawner → Spawn by Name → type myveh.
If the vehicle appears, success. Otherwise check troubleshooting.
Step 7: Multiple vehicles in one resource
Group several vehicles in one resource to manage as a pack:
/resources/[vehicles]/sport_pack/
├── fxmanifest.lua
└── stream/
├── car1.yft, car1.ytd
├── car2.yft, car2.ytd
└── data/
├── vehicles.meta (with multiple <Item>)
├── handling.meta (with multiple <Item>)
└── ...
Benefit: one ensure instead of N.
Step 8: Asset optimization
To avoid saturating player download:
- Compress YTD: OpenIV can re-encode at lower bitrate (negligible visual loss)
- No useless LODs: a 50 MB
_hiisn't needed for background cars - No duplicate files: one .yft per model, don't ship Blender sources
Clean custom vehicle = 10-30 MB. If you see 100+ MB, optimize.
Step 9: Spawn permissions
To limit certain custom vehicles to groups (e.g. VIP), use ACE:
add_ace group.vip "vehicle.spawn.myveh" allow
add_ace group.user "vehicle.spawn.myveh" deny
Resource-side, check permission before spawn.
Step 10: Handle conflicts
Multiple vehicles can share the same modelName if you grab packs from random sites. Guaranteed conflict.
Verify:
grep -r "<modelName>" /resources/ | sort | uniq -d
Rename conflicting ones (modify modelName in vehicles.meta + .yft/.ytd files).
Troubleshooting
Vehicle doesn't appear in trainer — ensure missing in server.cfg. Parse error in vehicles.meta → check F8 console.
Spawn but transparent/black vehicle — YTD doesn't load (mismatch with YFT). Check txdName in vehicles.meta matches the YTD file.
Player crash on spawn — badly exported 3D model (often from Blender/3ds Max with wrong settings). LOD too high / corrupted files.
Weird handling (car doesn't grip) — handling.meta missing or <handlingId> mismatch. Copy a similar vanilla handling as a base.
Useful commands
# Verify fxmanifest
cat /resources/[vehicles]/myveh/fxmanifest.lua
# View asset size
du -sh /resources/[vehicles]/myveh/
Conclusion
Streaming a custom FiveM vehicle = file structure + fxmanifest + ensure. Main work is optimization: 50 badly compressed vehicles = 2 GB players download on every connection (cache helps). Stay <500 MB total custom assets for a reasonable UX.
Going further: custom liveries (per-player textures), custom tuning (extras in GTA V), emergency/police vehicles with custom sirens and lights.


















