Grand opening25% off everything with FAM-261023-261025-UL4B9this weekendTick it in your cart Halloween Edition36 maps, limited runlimited runShop the drop

FREE TOOL · VEHICLES

FiveM vehicle pack validator

A vehicle is five files that have to agree with each other: the model in stream, the entry in vehicles.meta, the block in handling.meta, the entry in carvariations.meta and the kit in carcols.meta. When one of them disagrees, almost nothing is printed in the console — the car spawns untextured, or drives like stock, or has an empty mod menu, or cannot be spawned at all. This reads the whole resource and tells you which reference is broken, in which file, on which line.

16 checks that mean something is broken, 6 that mean it will break somewhere, 4 for information. Nothing is uploaded: the folder is read inside this tab.

Drop the vehicle resource folder here

Or the .zip it came in. Everything is read inside your browser — no upload, no API call, no copy on our side. The models are never even opened: only their names and sizes are used, so a 400 MB pack costs you nothing but the time to read the folder.

HOW TO USE IT

From a car that will not spawn to the line that is wrong

Five steps. The order matters, because one broken reference high up makes everything below it look broken too.

  1. Drop the resource folder, not the server. The folder that contains fxmanifest.lua — the one you would put in resources/. If several resources are inside what you drop, each is checked on its own and you can switch between them. If the pack came as a zip, drop the zip: it is opened here and nothing is extracted to disk.
  2. Fix the manifest findings first. A meta file that is never mounted, or mounted and not in the files block, makes every reference inside it look broken — because at runtime it is. There is no point chasing a missing handling block if handling.meta itself is not being loaded.
  3. Then the model and texture errors. Each one names the exact file it wanted and the exact name it found. Where it is a casing difference, the finding says which of the two to change; the rule is that the <modelName>, the <handlingId>, the carvariations entry and the file names all have to be identical and all lower case.
  4. Read the vehicle table as a checklist. One row per declared vehicle, with whether its model, texture, handling and variation resolve. A row with four greens is a vehicle that will spawn, drive and paint correctly. It is also the fastest way to see that a pack sold as ten cars contains metas for ten and models for three.
  5. Check the siren ids before you install it. They are global to the server, not local to the resource, so two packs claiming the same id means whichever loads second has no lights. The ids this pack takes are listed for exactly that comparison — it is the one check nothing can do for you from inside a single resource.

EVERY CHECK

What it looks for, and what each one actually breaks

Severity is about what happens in game, not about how unusual the mistake is. An error means something is measurably broken right now.

CheckSeverityWhat it breaks
A modelName in vehicles.meta with no matching .yft under streambrokenThe spawn name registers and the streamer has nothing behind it. Spawning gives you an invalid-model error or silence.
A modelName whose .yft exists only with different letter casebrokenWindows finds it, Linux does not. The pack works on your test box and every vehicle is invalid on the live host.
A handlingId with no handlingName in handling.metabrokenThe vehicle drives on fallback physics and no amount of editing handling.meta changes it.
A txdName with no matching .ytdbrokenThe model loads untextured. Shared vanilla dictionaries such as vehshare are recognised and reported as a note instead.
A data_file line whose path resolves to nothingbrokenNothing mounts and nothing is logged. The most common reason a pack installs cleanly and still drives like stock.
A data_file target that is not in the files blockbrokenThe server knows what the file means and the client never receives it, so it is stock for everybody but you.
A meta file in the resource that no data_file mountsbrokenIdentified by its root element, not its name, so a renamed or glob-matched file is caught too.
A data_file type that does not match the file it points atbrokenhandling.meta mounted as CARCOLS_FILE is read by the wrong parser and discarded without a word.
A carvariations entry naming a mod kit carcols does not definebrokenAn empty LS Customs menu on a car that otherwise works.
A carvariations entry for a model vehicles.meta never declaresbrokenUsually a typo, which means the real vehicle has no colours or kits at all.
Two mod kits claiming the same idbrokenKits resolve by id. One car silently loses every modification.
A duplicate spawn name, handling block or variation entrybrokenThe second definition replaces the first, so the block you are editing may not be the one in use.
A _hi.yft with no base .yft beside itbrokenThere is no model for the high-detail version to swap into.
A .yft or .ytd outside a folder named streambrokenFiveM only registers assets inside a stream folder, at any depth. Elsewhere they are just files.
Two streamed files with the same namebrokenStreamed names are one flat namespace. One wins and you cannot tell which.
A client_script or files entry naming a file that is not therebrokenA missing script stops the resource at load. Packs that ship a vehicle_names.lua reference without the file are the classic case.
A model name with capital lettersriskyThe game tolerates it. File systems, spawn menus and garage scripts are less forgiving.
A handlingId that matches its block only case-insensitivelyriskyIt resolves in game and breaks every tool that compares the two strings directly.
A vehicle with no carvariations entry while the pack ships oneriskyFirst colour, no liveries, no kit, even when carcols defines one for it.
An empty audioNameHash in a pack that ships no audioriskyThe vehicle is silent — no engine, no horn, no collisions.
More than one manifest inside one resourceriskyA resource is not recursive. The inner ones are inert, and everything they declare is not loaded.
A complete-looking model in stream that nothing registersriskyA .yft with its own .ytd and no vehicles.meta entry. Dead weight every player downloads.
A kit whose name prefix disagrees with its idinformationThe game reads the id. The number in the name is the convention that keeps ids unique across packs.
The siren setting ids this pack claimsinformationSiren ids are global to the server. Listed so you can check them against your other packs before installing.
A handling block or mod kit nothing referencesinformationLoaded and never read. Often left over from the vehicle the pack was built from.
A texture dictionary over 16 MBinformationNot an error. It is what turns into texture loss for players on smaller cards.

Nothing is uploaded, and the models are never opened

The folder is read with the browser File API and a zip is unpacked in the tab with JavaScript. There is no API route behind this page and no request carries your files anywhere — which matters when the pack is one you paid for. Only text files are read: the .meta files, the manifest and the scripts. Every .yft and .ytd is checked by name and size alone, which is both why a paid pack stays private and why a 400 MB resource is validated in a second or two.

The data_file types are checked against the published reference list as a known set rather than as an exhaustive one: a type we do not recognise is reported as information, not as an error, because the published list is long and a valid type we have missed should not look like a mistake. The AUDIO_GAMEDATA, AUDIO_SOUNDDATA and AUDIO_SPEECHDATA types are special-cased, because the path in the manifest is written without the .dat151.rel suffix the file carries on disk, and AUDIO_WAVEPACK points at a folder rather than a file — checking those naively produces four false errors on every pack that ships its own audio.

QUESTIONS

About broken vehicle packs

Why does my add-on car not spawn?
In order of how often it is the cause: the .yft in stream is not named exactly like the modelName in vehicles.meta, including letter case; vehicles.meta is in the resource but no data_file line mounts it; the data_file line exists and the file is not in the files block, so only the server has it; or the model is sitting somewhere other than a folder called stream. This page checks all four and tells you which one it is, with the line number.
My car spawns but drives like a stock Adder. Why?
Its handlingId resolves to nothing. Either handling.meta has no block with that handlingName, or handling.meta is in the folder and the manifest never mounts it, or it is mounted under the wrong data_file type. All three leave the vehicle on fallback physics and none of them prints anything in the console, which is why people edit handling.meta for an hour with no effect.
It works on my PC and breaks on the server. What changed?
Letter case, almost always. Windows treats Adder.yft and adder.yft as the same file and Linux does not, so a pack with a capital in the model name or the texture name works locally and has invalid models on the host. This checker compares the meta names against the real file names character by character and flags the difference as an error rather than a style note, because that is what it is.
Why does it say a meta file is not mounted when it is in the files block?
Because the two do different jobs and both are needed. files sends the file to the client; data_file tells the game what kind of file it is. With only files, the client has a .meta sitting on disk that nothing reads. With only data_file, the server reads it and the client never receives it — which is the worse of the two, because it works perfectly for you and is stock for every player.
Does it handle the data/**/vehicles.meta glob style?
Yes. Real packs use data//handling.meta, data//**/carcols.meta, *.meta and vehiclelayouts_**.meta, and all of those are matched the way FiveM matches them, so a glob that covers your file is not reported as missing. A glob that matches nothing at all is reported, because it usually means a folder was renamed and the data_file line beside it is now dead too.
Can I drop a zip, or does it have to be a folder?
Either. Drag the extracted folder in, use the folder picker, or drop the .zip exactly as it was downloaded and it is opened in the browser. Only .zip — a .rar or .7z cannot be read in a browser and the page says so rather than failing quietly.
Is my pack uploaded anywhere?
No. The folder is read with the browser File API and the zip is opened in the tab, so nothing leaves your machine — which matters for a paid pack. The model and texture files are not even read: only their names and sizes are used, which is also why a 400 MB pack is checked in a second or two.

FROM THE SHOP

What we build when it is not free

The free tools and the paid work come out of the same place. These are the lines closest to what this page is about.

Grand opening: 25% off every product with FAM-261023-261025-UL4B9, until 25 October. It is applied at checkout.

The Downtown Dusk graphics design, shown at Discord banner size
Graphics packs

Graphics packs for FiveM

One design, cut to every slot your server shows up in: the server list strip, the Discord header, the stream art, each composed for its own crop.

From $12.00124 designs · 20 formatsBrowse the designs
Orange EMBER FiveM-compatible minimap for GTA 5 — google style — showing Los Santos street detail
Minimaps

Minimaps for FiveM

Twelve colour palettes across three base map styles, each one a drop-in resource. Add your logo and your district labels in the editor.

From $8.0036 finished mapsBrowse the minimaps
Loading screens

Loading screens for FiveM

The one screen every player sees on every connect. Drag widgets onto a canvas, drop in a video background, and point your server at a single URL we host.

Free50 live widgets · 30 fontsOpen the screen builder