How to add custom props to FiveM
Updated October 11, 2026 · 5 min read
A custom prop is a resource with the model as a .ydr (with its collision inside), its textures, and a .ytyp archetype that registers the model name. Its fxmanifest.lua loads the .ytyp with data_file 'DLC_ITYP_REQUEST'. Put the folder in resources, add ensure to server.cfg, restart, and spawn the prop by name with CreateObject.
The files a prop needs
| File | What it is | Needed? |
|---|---|---|
| .ydr | The drawable: the mesh and its materials. The collision can live inside it. | Yes |
| .ytd | The texture dictionary. Textures can also be embedded in the .ydr. | If the textures are not embedded |
| .ytyp | The archetype: registers the model name with its bounds and draw distance. | Yes, to spawn it by name |
| .ybn | Collision as a separate file. For a prop spawned by name, put the collision inside the .ydr instead. | No |
| fxmanifest.lua | The resource manifest. | Yes |
The folder and the fxmanifest.lua
my_prop/
fxmanifest.lua
stream/
my_prop.ydr
my_prop.ytd
my_prop.ytypfx_version 'cerulean'
game 'gta5'
files {
'stream/**/*.ydr',
'stream/**/*.ytd',
'stream/**/*.ytyp',
}
-- Registers the archetype so the game knows this model exists.
data_file 'DLC_ITYP_REQUEST' 'stream/**/*.ytyp'Without the data_file line the model streams, but CreateObject returns 0 or an invisible prop.
Install it and spawn it
- 1
Copy the folder
Put
my_prop/in your server'sresources/folder. - 2
Start it
Add
ensure my_propto server.cfg. - 3
Restart
Restart the server, or run
refreshand thenensure my_propin the server console.
local model = `my_prop` RequestModel(model) while not HasModelLoaded(model) do Wait(0) end -- The 7th argument (dynamic) must be true for a prop that moves with physics. local obj = CreateObject(model, x, y, z, true, false, true) SetModelAsNoLongerNeeded(model)
The model name is what the hash resolves to, so keep it unique on your server.
Props converted with THE ORB Studio also carry a client.lua with a chat command named after the prop: stand where you want it and type /my_prop, and it is placed on the ground in front of you, facing your direction, and frozen in place. /my_prop undo removes the last one. Props placed this way are not saved to any file and are gone after a server restart. To place a prop permanently, add it to a map file (.ymap), for example with CodeWalker.
Route 1: Blender and Sollumz
- 1
Install
Blender and the free Sollumz add-on (from the Sollumz GitHub releases page).
- 2
Import and check the size
GTA V works in metres. A model exported at the wrong scale shows up 100 times too big or too small.
- 3
Set up the materials
Turn the model into a Sollumz drawable and give its materials GTA shaders, for example
normal_spec, oremissivefor parts that glow. - 4
Convert the textures to DDS
The game only uses DDS textures and Blender cannot write them. Microsoft's texconv converts them from the command line. A prop exported without DDS textures comes out untextured.
- 5
Build the collision
Make a copy of the mesh into a bound composite and give it a collision material (wood, metal, concrete…). Parent it under the drawable so Sollumz exports it inside the .ydr.
- 6
Export
Set Sollumz to export the native format for the legacy game (GEN8). It can also write CodeWalker XML and the Enhanced format (GEN9), and FiveM streams neither. Export the .ytyp too; if your Sollumz version writes it as .ytyp.xml, import it in CodeWalker to get the binary file.
- 7
Package
Copy the .ydr, .ytd and .ytyp into
stream/with the fxmanifest.lua above.
Route 2: from a GLB, with the converter
The GLB to FiveM Converter does route 1 on our server, with Blender and Sollumz already set up, and shows you the model first:
- 1
Drop a .glb or .gltf
That is what Meshy, Blender and Sketchfab export. You can also pick a model from Sketchfab after connecting your account.
- 2
Check the size
The model stands next to a 1.80 m person on a metre grid, so a prop exported 100 times too big is obvious before it reaches your server.
- 3
Pick what it is
Hand item, Furniture, Street prop or Hero piece. Each one sets a triangle and texture budget, and the converter scores how heavy the model is against it.
- 4
Pick what it is made of
The collision surface: wood, metal, concrete, glass, rubber, cloth and more. It decides how the prop sounds and reacts when it is shot, hit or walked on.
- 5
Download
A zip with fxmanifest.lua, the files in
stream/with the collision inside the .ydr, an INSTRUCTIONS.txt and the /command described above (you can leave it out).
Free to try with your Discord login: 10 exports the first month and 5 a month after on the Free plan, unlimited on any paid plan. Each conversion is one export.
Route 3: no model yet
The FiveM Prop Generator makes the model from a sentence ("a weathered wooden crate") or a reference photo, in about a minute. You preview it at real scale next to a 1.80 m figure, and one click sends it to the converter. Generating uses AI credits: paid plans include them every month, and on the Free plan it needs the Pro Pass or a credit pack. You only spend them if a model comes back. See pricing.
Keep it light
A prop that looks fine in a viewer can still cost the server. These are the budgets our converter uses:
| Type | Used for | Triangles | Textures |
|---|---|---|---|
| Hand item | held, thrown, on a table | 10,000 | 2048 px |
| Furniture | interiors, shops, houses | 12,000 | 2048 px |
| Street prop | stalls, signs, decoration | 15,000 | 2048 px |
| Hero piece | a centrepiece, seen up close | 50,000 | 4096 px |
It also warns about textures above 2048 px, textures or files over 8 MB, more than 4 materials, and a model longer than 20 m or shorter than 5 cm. A texture dictionary over about 16 MB is skipped by FiveM: see Streaming asset over the size limit.
Turn a model into a prop
Drop a .glb, check its real size and weight, and download a resource with the .ytyp, the collision and a /command to place it. Free to try with your Discord login: 10 exports the first month and 5 a month after on the Free plan, unlimited on any paid plan.
Frequently asked questions
Why is my custom prop invisible in FiveM?
Usually the .ytyp is missing or the fxmanifest does not load it with data_file 'DLC_ITYP_REQUEST'. Then the model streams but CreateObject returns 0 or an invisible prop. Also check that the resource is started and the model name matches everywhere.
Why do players walk through my prop?
The game is not loading a collision for it. In our converter, a standalone .ybn next to a prop spawned by name was not loaded, so put the collision inside the .ydr (in Sollumz, parent the bound composite under the drawable).
Why is my prop white or untextured?
The textures are not DDS, the .ytd name does not match what the model asks for, or the .ytd is not in the stream folder. See Missing textures.
A thrown prop goes through walls. Why?
A prop with a mesh collision is treated by GTA as static world collision, and a fast-moving dynamic prop can pass through it. For thrown props, give the prop a primitive bound in Blender, or check the hit in your script with a swept shape test.
Do custom props work on ESX and QBCore?
Yes. A prop is a streamed resource, not a framework feature, so it works the same on any framework.