How to add modded cars to FiveM GTA RP: full step-by-step guide

Learn how to add addon vehicles to your FiveM GTA RP server with a dedicated resource, vehicles.meta, handling, and an organized stream folder.

Adding custom cars to a FiveM RP server is one of the most common requests from owners — and also one of the most painful when the setup is sloppy. The problem is rarely the car file itself: it is the resource structure, the required metadata, and the streaming order.

This tutorial is for owners and developers of FiveM GTA RP servers who want to add addon vehicles (that do not replace vanilla cars) in an organized way, without breaking framework dealerships and without turning the [cars] folder into an unmanageable pile of 400 loose resources.

Expected execution time: 20 to 30 minutes per car, or about 1 hour to assemble an organized pack of 10 to 20 vehicles. We will cover everything from the folder structure to the database registration that makes the car show up in your framework’s dealership.

Prerequisites

What you need before starting

A running FiveM server (Linux or Windows), filesystem access to the server (SFTP or direct), an installed framework (ESX, QBCore, or vRP), and the modded car files already downloaded — typically a zip containing .yft, .ytd, and _hi.yft. A MySQL client to edit the framework’s vehicles table.

Base directory resources/[cars]/
File extensions .yft .ytd _hi.yft
Required metadata vehicles.meta carvariations.meta handling.meta
Reload command refresh; ensure resource-name

Make sure you are not running legacy OneSync on a modern server — car addons work better on OneSync infinity, which is the current FiveM default.

Resource folder structure

First rule: one resource per car or one resource per themed pack (police vehicles, supercars, sedans). Do not mix random cars into a single giant resource — debugging becomes impossible when one of them breaks.

The standard structure of an addon car is:

resources/[cars]/lambo2024/
├── fxmanifest.lua
├── stream/
│   ├── lambo2024.yft
│   ├── lambo2024_hi.yft
│   └── lambo2024.ytd
└── data/
    ├── vehicles.meta
    ├── carvariations.meta
    ├── carcols.meta
    └── handling.meta

The [cars] folder with brackets is a category — FiveM recognizes it automatically and organizes every car resource inside. It is not mandatory, but it keeps resources/ clean when you have 200 cars.

Model names are case-sensitive on Linux

If your server runs on Linux (common on a Hostini VPS), the .yft filename must match the spawn name inside vehicles.meta EXACTLY — including uppercase and lowercase letters. Lambo2024.yft is not the same as lambo2024.yft. On Windows it slips by, on Linux it breaks.

Creating the resource step by step

We will use a fictional car called lambo2024 as the example. Replace it with the name of your own model in every command.

01

Create the directory structure on the server:

cd /path/to/server/resources
mkdir -p [cars]/lambo2024/stream
mkdir -p [cars]/lambo2024/data

Use the car name in lowercase, without accents and without spaces. Special characters or uppercase letters will cause streaming problems on Linux.

02

Upload the model files to the stream/ folder:

# via SFTP or local cp
cp lambo2024.yft     [cars]/lambo2024/stream/
cp lambo2024_hi.yft  [cars]/lambo2024/stream/
cp lambo2024.ytd     [cars]/lambo2024/stream/

The _hi.yft file is the high-resolution model (LOD0) — some cars do not ship with it. If it is missing, just keep the base .yft. The .ytd contains all of the vehicle’s textures.

03

Place the 4 .meta files in the data/ folder. These files usually come with the car pack. If any is missing:

  • vehicles.meta — required. Defines spawn name, class, layouts.
  • carvariations.meta — required. Defines colors and variations.
  • carcols.meta — optional. Defines mods and visual tuning.
  • handling.meta — required. Defines drivability.

Without vehicles.meta the car does not even appear to FiveM. Without handling.meta it uses the default adder handling and feels off.

04

Create fxmanifest.lua at the resource root:

fx_version 'cerulean'
game 'gta5'

author 'CreatorName'
description 'Lamborghini 2024 Addon'
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 'CARCOLS_FILE'             'data/carcols.meta'
data_file 'VEHICLE_VARIATION_FILE'   'data/carvariations.meta'
data_file 'HANDLING_FILE'            'data/handling.meta'

The order of the data_file entries matters: FiveM reads them in the declared sequence. If you swap VEHICLE_METADATA_FILE with HANDLING_FILE, the car spawns without proper physics.

05

Add the resource to server.cfg:

# server.cfg
ensure [cars]
# or for individual resources:
ensure lambo2024

If you used the [cars] category, just ensure [cars] loads every car inside. To reload without restarting the whole server, use this in the console:

refresh
ensure lambo2024

Validating the metadata

Most crashes come from malformed vehicles.meta or handling.meta. It is worth checking them manually before the first start.

06

Open vehicles.meta and locate the <modelName> tag:

<Item>
    <modelName>lambo2024</modelName>
    <txdName>lambo2024</txdName>
    <handlingId>lambo2024</handlingId>
    <gameName>lambo2024</gameName>
    <vehicleMakeName>LAMBORGHINI</vehicleMakeName>
    <!-- rest of the config -->
</Item>

All 4 fields (modelName, txdName, handlingId, gameName) must hold the SAME value — and that value is the .yft filename without extension. Any mismatch here is the number one reason for “car shows up chequered” (untextured).

07

In handling.meta, confirm that handlingName matches:

<Item type="CHandlingData">
    <handlingName>lambo2024</handlingName>
    <fMass value="1700.00" />
    <fInitialDragCoeff value="9.85" />
    <!-- ... -->
</Item>

If you have multiple cars in a single resource, each one needs its own <Item> inside <HandlingData>. Do not duplicate IDs.

Do not edit values you do not understand

Blindly changing fMass, fInitialDriveForce, or fSuspensionForce can make the car fly on spawn, flip upside down, or crash the client. If you want to tune, change one value at a time and test.

Registering the car in the RP framework

Adding the resource is not enough — the car needs to be in the vehicles table of the database to appear in the dealership and be purchasable by players.

ESX Framework

In ESX legacy, connect to MySQL and run:

INSERT INTO vehicles (name, model, price, category)
VALUES ('Lamborghini 2024', 'lambo2024', 850000, 'super');

The model field must be EXACTLY the car’s spawn name (the same value as <modelName> in vehicles.meta).

QBCore Framework

In QBCore, edit qb-core/shared/vehicles.lua:

['lambo2024'] = {
    ['name'] = 'Lamborghini 2024',
    ['brand'] = 'Lamborghini',
    ['model'] = 'lambo2024',
    ['price'] = 850000,
    ['category'] = 'super',
    ['hash'] = `lambo2024`,
    ['shop'] = 'pdm',
},

Restart qb-core afterwards (restart qb-core in the console).

Keep a separate staging pack

Create a [cars-test]/staging resource where you drop new cars before moving them into the final [cars]. That way you test in an isolated environment without polluting your production pack. To remove, just stop the resource — no need to delete it from disk.

Verification

To confirm everything worked, join the server as admin and use:

/car lambo2024

Or use the spawn command bundled with your framework (/spawncar in ESX, /admincar in some QB scripts). The car should appear with full texture, engine sound, and consistent physics.

Also watch the server console during startup. Expected output:

Started resource lambo2024
Loading vehicle metadata: data/vehicles.meta
Loading handling: data/handling.meta

If you see Failed to load, Unable to parse XML, or Duplicate handling ID, the error is inside one of the .meta files. Check the troubleshooting section below.

Troubleshooting

Car spawns untextured (chequered)

Cause: mismatch between modelName in vehicles.meta and the .yft filename, or a missing .ytd in the stream. Fix: confirm that the 3 names match (file, modelName, txdName) and that the .ytd is inside stream/.

”Vehicle not found” error when using /car

Cause: the resource did not load, or the ensure line is missing from server.cfg. Fix: run refresh followed by ensure lambo2024 in the console. If the issue persists, check that fxmanifest.lua declares the 4 data_file entries correctly.

Server hangs during load

Cause: handling.meta with an invalid value (text where a number is expected) or malformed XML. Fix: run developer 1 in the server console before startup to see detailed messages. The error usually points to the exact line.

Car appears in the dealership but cannot be bought

Cause: the database registration has the wrong model. Fix: confirm that the model field value in the vehicles table is identical to the spawn name (case-sensitive).

Next steps

Once the first car is working, it is worth automating the rest of the pipeline:

  • Build a single pack with 10 to 30 cars grouped by category (super, sport, sedan) instead of 30 separate resources.
  • Add a custom carcols.meta to unlock visual tuning on your cars (wheels, hoods, exhausts).
  • Implement lazy loading with set sv_streamerMode 1 on servers with 400+ vehicles to cut initial download time.
  • Configure realistic handling using tools like the in-game Handling Editor before exporting to the final .meta.
  • Version [cars]/ in its own git repo to track changes and roll back easily.

If you are running a FiveM RP server in production with a heavy car pack, a dedicated game-server VPS from Hostini delivers high single-thread CPU and NVMe SSD — which makes a real difference in asset streaming time when 64 players connect at once.

Frequently asked questions

What is the difference between an addon car and a replace car in FiveM?

Addon adds a new vehicle with its own spawn name (e.g. lambo2024) without replacing any vanilla car. Replace swaps a base GTA V model (e.g. replaces the adder with the lambo). On RP servers, always prefer addon — replace breaks missions, NPCs, and dealerships that rely on the original models.

How many addon cars can I add?

Technically FiveM accepts thousands, but each streamed vehicle consumes client RAM and increases initial download time. Healthy RP servers stay between 200 and 600 addons. Beyond that, consider lazy loading or splitting into optional packs.

Why does the car spawn untextured (chequered) in FiveM?

Almost always a missing .ytd, a model name mismatch between vehicles.meta and the .yft, or wrong stream order. Confirm the spawn name in vehicles.meta matches the .yft filename exactly (no extension) and that the matching .ytd lives inside stream/.

Where do I edit the price and category of a modded car in FiveM RP?

Price lives in the dealership script of your framework (ESX, QBCore, vRP). The car must be registered in the vehicles table of the database with the same spawn name. The visual category (super, sports, sedan) is defined in vehicles.meta under the vehicleClass field.

The modded car crashes the server on spawn — what could it be?

Common causes: handling.meta with an invalid value (NaN or string where a number is expected), vehicles.meta missing the correct layouts/handlingId fragment, or a corrupted .yft. Check the server console with developer 1 and look for streaming errors during the resource load.

Do I need to restart the whole server to add a car?

No. Use 'refresh' followed by 'ensure resource-name' in the console. Connected players will need to reconnect to download the new stream files, but the server stays up.

Topics:
Next steps VPS, dedicated or managed panel for FiveM, SAMP, MTA, Tibia and more.Host your game server with Hostini →
Was this tutorial helpful?
Chat on WhatsApp