Skip to main content
TRACK A·ADD CONTENT·Verified June 2026 · Lua 5.4 · ox_lib 3.x
Learning with an AI assistant?
Copies this lesson plus 2026 ground rules (no lua54 'yes', Cfx.re Portal, correct callback signatures) as a ready-to-paste mentor prompt.
Module A3 · Operate & secure

Clothing, EUP, and asset policy

Clothing and EUP packs are some of the most requested additions to a server. They are also some of the easiest to do badly. A bad pack balloons your download size, eats streaming memory, and can put you on the wrong side of asset licensing. EUP means Emergency Uniform Pack: police, medical, fire, and other uniform variations for player models. This lesson builds one tiny streamed resource so you can see the mechanism for real, then teaches you how to keep packs fast and clean.

You'll build
A correctly shaped asset resource, then validate a real licensed pack with the client streaming tools.
Time
~20 minutes.
You need
A framework server you can restart, and the streaming display turned on (resmon).
You'll learn
How the stream/ folder auto-registers assets -> how EUP differs from normal clothing -> how component IDs map to menu slots -> how to measure streaming memory instead of guessing -> the IP and policy lines you do not cross.
BEFORE YOU START

Build it

Make the resource folder

The server has one folder for this lesson.

Inside your server's resources folder, create this layout. The stream/ folder name is not optional. FiveM scans any folder named exactly stream/ and auto-registers every asset file inside it.

code
resources/qu_stream_proof/
fxmanifest.lua
server.lua
stream/

Leave stream/ empty for the structural check. When you validate a real pack later, its valid .ydd, .ytd, .ymt, .ytyp, or other documented files go here. Renaming an empty text file to .ytyp does not create a valid asset and can produce a misleading or broken test.

Write fxmanifest.lua

FiveM knows the resource and registers the streamed type.

The fxmanifest.lua is the resource's manifest: the file that tells FiveM what the resource is and what scripts to load. Open it and paste this:

code
fx_version 'cerulean'
game 'gta5'

server_script 'server.lua'

cerulean is just the name of the current manifest format version. No lua54 'yes' line is needed. When a real prop pack includes a .ytyp, copy the pack author's manifest entry, commonly data_file 'DLC_ITYP_REQUEST' 'stream/name.ytyp'. Do not add a data_file entry for a file that does not exist, and do not invent one for a clothing pack that does not ship a .ytyp.

Write the proof line

The resource reports the moment it registers its stream.

Open server.lua and paste this. It listens for the resource starting and prints one line confirming the stream/ folder went live:

code
AddEventHandler('onResourceStart', function(resourceName)
if resourceName ~= GetCurrentResourceName() then return end

print('[qu_stream_proof] resource started; validate real assets in the client')
end)

This print proves only that the server resource loaded. A server-side onResourceStart handler cannot prove that a client downloaded or rendered an asset. The resourceName check is a guard so the handler reacts only to this resource, not every resource on the server.

Start it

The proof line appears in the server console.

Open server.cfg and add this line. ensure is the command that starts a resource (and restarts it if it was already running):

code
ensure qu_stream_proof

Save, then run this in the txAdmin Live Console (the in-dashboard server terminal):

code
restart qu_stream_proof

Measure it in resmon

Streaming memory becomes a number, not a vibe.

In your own FiveM client connected to the server, open the F8 console (the in-game developer console you open by pressing F8) and run:

code
strmem 1

Only use the streaming diagnostics after adding a valid, licensed asset. An empty folder has nothing meaningful to measure. strmem is a developer command. On a normal client it is blocked with Access denied / disabled in production mode. Relaunch FiveM with the launch arg set moo 31337 or a non-production update channel (same for resmon, strdbg, and strlist), then reconnect and run strmem 1. Use the official client-console reference linked below, and confirm the asset visually in game as well as in the diagnostics.

Keep reading the full lesson

Sign in to start, then unlock every step of this lesson and the full FiveM School with a membership.

Still ahead in this lesson
  • How it works
  • If something went wrong
  • What you can do now
  • Try it yourself

The remainder of Clothing, EUP, and asset policy is available to FiveM School members.