# How FiveM streaming actually works

> How FiveM streaming works: every file in a stream/ folder is served by filename, and those names are global across the server. That rule explains most faults.

Source: https://fam-tools.com/guides/fivem-streaming-assets · FAM Tools · published 2026-03-21 · updated 2026-09-07 · about 15 min

**Short answer.** Any file inside a folder named stream/ is streamed to clients by filename. Names are global across the whole server, so two resources shipping the same .ytd is undefined behaviour. That single rule explains most streaming failures.

Streaming is the mechanism that lets a server hand the client files the base game does not have. It is simple in principle — put a file in a stream folder and the game can find it by name — and everything that goes wrong comes from not knowing what the file types are or that names are global.

## What each file type is

GTA V asset files all start with "y" and are RAGE containers. Knowing which is which turns "the car is invisible" from a mystery into a two-minute check.

| Extension | Contains | You will meet it in |
| --- | --- | --- |
| .ydr | A single drawable — one model with its geometry and LODs | Props, map pieces, minimap geometry |
| .ydd | A drawable dictionary — several drawables in one file | Clothing, vehicle mods, minimap tiles |
| .ytd | A texture dictionary — the images | Liveries, skins, minimap textures |
| .yft | A fragment — a model that can break apart, with a skeleton | Vehicles, breakable props |
| .ymap | Placement — what is placed where in the world | MLO interiors, map edits |
| .ytyp | Archetype definitions — what an object is | Always paired with a .ymap |
| .ybn | Collision bounds | Anything you can walk into |
| .ynv | Navmesh — where AI peds may walk | Custom map areas |
| .awc | Audio wave container | Custom vehicle and weapon sounds |

> **The quick diagnosis** — Model missing entirely — the .yft or .ydr is not being found. Model there but purple-and-black checker — the .ytd is missing or its internal name is wrong. Model there but you fall through it — the .ybn is missing.

## The stream folder

A resource declares a stream folder in its manifest, or simply has a folder called stream/ which modern manifests pick up automatically. Every file in it, at any depth, is offered to clients by its filename.

Sub-folders are purely for your own sanity — the game does not see them. Two files called vehicle.ytd in different sub-folders are still a name collision.

```text
my_cars/
├─ fxmanifest.lua
├─ vehicles.meta          <- declared with data_file
└─ stream/
   ├─ police2024/
   │  ├─ police2024.yft
   │  ├─ police2024_hi.yft   <- high detail LOD
   │  └─ police2024.ytd
   └─ ambulance2024/
      ├─ ambulance2024.yft
      └─ ambulance2024.ytd
```

> **Names are global across the entire server** — There is one namespace. If two resources both stream a file called minimap_0_0.ytd, one of them wins and which one is not defined. This is the single most common cause of "it worked until I installed X".

## Finding a name collision

Before installing anything large, check whether it collides with what you already have. On Linux this is one command; on Windows, one PowerShell line.

```bash
# Linux / git bash
find resources -path '*/stream/*' -type f -printf '%f\n' \
  | sort | uniq -d
```

#### The same on Windows

Anything it prints is a genuine conflict and needs one of the two removed.

```powershell
Get-ChildItem -Path .\resources -Recurse -File |
  Where-Object { $_.FullName -match '\\stream\\' } |
  Group-Object Name |
  Where-Object { $_.Count -gt 1 } |
  Select-Object Name, Count
```

## Add-on vehicles

A vehicle is not just a model. The game needs the model files, a vehicles.meta describing it, a carvariations.meta for colours and mods, a carcols.meta for liveries, and a handling.meta. Missing any of those gives a different, specific failure.

```lua
fx_version 'cerulean'
game 'gta5'

files {
  'vehicles.meta',
  'carvariations.meta',
  'carcols.meta',
  'handling.meta',
  'vehiclelayouts.meta',
}

data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
data_file 'CARCOLS_FILE'           'carcols.meta'
data_file 'HANDLING_FILE'          'handling.meta'
data_file 'VEHICLE_LAYOUTS_FILE'   'vehiclelayouts.meta'
```

| Symptom | Cause |
| --- | --- |
| Vehicle does not spawn at all | vehicles.meta missing, or the model name in it does not match the .yft |
| Spawns but handles like a brick | handling.meta missing or the handling id does not match |
| Spawns black or untextured | .ytd missing, or its embedded name differs from the model name |
| Spawns but no extras or liveries | carvariations.meta / carcols.meta missing |
| Client crashes on spawn | A corrupt .yft, or a model from a newer DLC than sv_enforceGameBuild allows |

> **files and data_file are both required** — files makes the .meta downloadable; data_file tells the game what it is. Declaring only one of them fails silently — the file is there and nothing reads it.

## MLO interiors

An MLO is an interior placed into the world. It needs the .ytyp registered so the game knows the archetype exists, and the .ymap to place it. The order and the manifest lines matter.

- this_is_a_map tells the game to load the .ymap files in the resource. Without it the interior exists but is never placed.
- DLC_ITYP_REQUEST registers the archetypes. Without it you get an interior shell with missing props.
- Two MLOs at the same coordinates will z-fight and the result is undefined. Check the coordinates before installing.
- An MLO usually needs an interior-proxy removal .ymap to delete the vanilla building first. If the old building is still there, that file is missing.

```lua
fx_version 'cerulean'
game 'gta5'

this_is_a_map 'yes'

files { 'custom_interior.ytyp' }
data_file 'DLC_ITYP_REQUEST' 'custom_interior.ytyp'
```

> **note** — MLOs are where server memory goes. A dozen large interiors will do more damage to your streaming budget than every script on the server combined.

## Textures: the .ytd rules

A texture dictionary contains named textures. The model asks for a texture by name; if the name inside the .ytd does not match what the model expects, you get the checker pattern even though the file is present and loading correctly.

- Use DXT compression. DXT1 for opaque, DXT5 when you need alpha. Uncompressed textures cost several times the VRAM for no visible benefit.
- Dimensions must be powers of two — 512, 1024, 2048. Anything else is either rejected or silently rescaled.
- Generate mipmaps. Without them, distant surfaces shimmer badly.
- 1024 is enough for almost everything. 4096 on a vehicle dirt map is pure waste and a common cause of stutter.
- The dictionary name and the texture names inside it both matter, and they are checked separately.

> **How our minimaps handle this** — A minimap is twelve DXT5 texture dictionaries plus one LOD texture, replacing the ones the base game already loads. Because they replace rather than add, VRAM use is unchanged at roughly 113 MB and there is no streaming cost at all — which is why a map swap is one of the few visual upgrades that is genuinely free.

## Pool sizes

When you stream a lot, you will eventually see a console message saying a pool is full. Raise that pool, and only that pool. Raising everything "to be safe" wastes memory and hides the next real problem.

```cfg
set sv_poolSizesIncrease "{ \"TxdStore\": 25000, \"DrawableStore\": 5000 }"
```

> **warn** — If you are raising pool sizes because of a crash rather than a console warning, the pool is probably not the problem. Read the crash dump first.

## A checklist that finds it every time

1. **Is the resource started?** — Console at start. An unstarted resource streams nothing and logs one line you probably scrolled past.
2. **Is there a name collision?** — Run the duplicate check above. This is the answer more often than anything else.
3. **Did the client cache?** — FiveM caches streamed files hard. Delete FiveM Application Data/data/cache and reconnect before concluding anything.
4. **Is the game build high enough?** — Content from a DLC newer than sv_enforceGameBuild does not appear and does not warn.
5. **Are the .meta files declared twice?** — Both files and data_file, spelled exactly.
6. **Only then, suspect the asset** — Open it in CodeWalker. A file that will not open there will not load in game either.

## Questions

### Why do I see a purple and black checker pattern?

The model loaded and its texture did not. Either the .ytd is missing from the stream folder, or the texture names inside the .ytd do not match what the model asks for. It is never a permissions or a server.cfg problem.

### Do I need to restart the server after adding a stream file?

Yes. Streamed files are indexed when the resource starts, so refresh then restart the resource — and clients need to reconnect to receive the new files.

### Can two resources stream the same file name?

They can, and you should never let them. Which one wins is undefined and can change between restarts. Rename one, or remove it.

### Does streaming a custom minimap conflict with map resources?

Only with another minimap. The minimap texture dictionaries are a fixed set of names, so two minimap resources collide with each other — but never with an MLO, a vehicle pack or a map edit, which use entirely different names.

## Related

- https://fam-tools.com/guides/fivem-fxmanifest
- https://fam-tools.com/guides/fivem-server-performance
- https://fam-tools.com/guides/install-fivem-minimap
