Logo

Stream custom vehicles on FiveM (vehicles.meta, ytd, yft)

Stream custom vehicles on FiveM (vehicles.meta, ytd, yft)

How to add custom vehicles (non-vanilla 3D models) to your VeryCloud Wisp FiveM server: file structure, vehicles.meta, handling, optimization.

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:

FileRole
<vehicle>.yft3D model
<vehicle>_hi.yftHigh-res LOD
<vehicle>.ytdTextures (skins, decals)
vehicles.metaVehicle definition (specs, class)
handling.metaHandling, mass, speed
carcols.metaPrimary/secondary colors
carvariations.metaColor/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 _hi isn'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 trainerensure 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.

Resources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members