Before You Begin#
Before installing Outfit Bag, make sure your server meets the minimum requirements. Only one resource is mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. The table creates itself. |
Framework | Optional | ESX, QBCore or Qbox — auto-detected. Without one it runs standalone: the bag is placed with a command, with no item and no jobs. |
Target | Optional |
|
Inventory | Optional | Any inventory that honours your framework's usable items — ox_inventory, qs-inventory, qb-inventory or the ESX default. |
Clothing resource | Optional | Only needed for applied outfits to survive a reconnect. See Usage → Persisting Outfits. |
Everything framework- or third-party-specific sits behind a small bridge file, and the resource picks the right one by looking at what is already running:
Layer | Detected resources |
|---|---|
Framework | es_extended · qb-core · qbx_core — none found means standalone |
Target | ox_target · qb-target · qs-textui — none found means the built-in prompt |
Clothing | illenium-appearance · fivem-appearance · qb-appearance · qb-clothing · qbx-clothing · skinchanger |
Every optional integration degrades silently. If a resource is missing, the script falls back to its own version of that part — nothing errors. Integrations has the details and how to pin one by hand.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.Downloading Outfit Bag#
After purchasing Outfit Bag, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Outfit Bag.
After extracting the download, you should have the following:
qs-outfitbag/
├── shared/config.lua -- the settings you edit
├── locales/ -- 28 translations, editable
├── client/custom/ -- framework and target bridges, editable
├── server/custom/ -- framework bridges and database queries, editable
├── client/ · server/ -- the core (encrypted)
├── html/ -- the bag window
└── fxmanifest.lua
[image]/
└── outfitbag.png -- the inventory icon for the itemThe folder must be named
qs-outfitbag. The script checks its own name on start; a renamed copy prints You have renamed the script! and then deliberately hangs the server.
Installing the Resource#
Move the qs-outfitbag folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-outfitbag/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Outfit Bag:
ensure oxmysql
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Inventory and target
ensure ox_inventory
ensure ox_target
# Clothing (optional, only for persistence)
# ensure illenium-appearance
ensure qs-outfitbagThe loading order matters. Detection only sees resources that are already started, so a framework or target that starts after Outfit Bag is not found and that part runs standalone.
The Database#
There is no SQL file to import. Outfit Bag creates its only table the first time oxmysql is ready, and never touches anything else in your database.
Table | Holds |
|---|---|
| Every saved outfit: an id, the owner's identifier, the outfit's name and its clothing as JSON. |
Outfits belong to the player, not to a bag. Every bag a player places opens on the same list, and that list survives restarts, lost items and new bags. Placed bags themselves are not stored — Usage explains their lifecycle.
Adding the Item#
The bag is an inventory item named outfitbag. Register it in your inventory, then copy outfitbag.png from the download's [image] folder into your inventory's image folder.
In ox_inventory/data/items.lua:
['outfitbag'] = {
label = 'Outfit Bag',
weight = 1000,
stack = true,
close = true,
description = 'A portable bag for storing and changing outfits anywhere.',
},Image folder: ox_inventory/web/images/
In qs-inventory/shared/items.lua:
['outfitbag'] = {
['name'] = 'outfitbag',
['label'] = 'Outfit Bag',
['weight'] = 1000,
['type'] = 'item',
['image'] = 'outfitbag.png',
['unique'] = false,
['useable'] = true,
['shouldClose'] = true,
['combinable'] = nil,
['rare'] = 'common',
['description'] = 'A portable bag for storing and changing outfits anywhere.'
},Image folder: qs-inventory/html/images/
In qb-core/shared/items.lua (Qbox servers using qb-inventory items follow the same format):
outfitbag = {
name = 'outfitbag',
label = 'Outfit Bag',
weight = 1000,
type = 'item',
image = 'outfitbag.png',
unique = false,
useable = true,
shouldClose = true,
combinable = nil,
description = 'A portable bag for storing and changing outfits anywhere.'
},Image folder: qb-inventory/html/images/
ESX keeps its items in the database. Run this once:
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`)
VALUES ('outfitbag', 'Outfit Bag', 1, 0, 1);ESX Legacy weighs items in kilograms, so 1 is a sensible weight. Restart ESX after inserting the row.
Configuring the Resource#
Everything you configure lives in one file, shared/config.lua. The framework and target are detected for you; the rest is a handful of values:
Setting | Default | What it does |
|---|---|---|
| false | Prints what the script is doing, prefixed with |
| auto |
|
| auto |
|
| 'outfitbag' | The inventory item that places a bag. |
| 'reh_prop_reh_bag_outfit_01a' | The prop used for every bag, personal and uniform. |
| false | Hands applied outfits to your clothing resource so they survive a reconnect. Read the warning in Usage first. |
| 'en' | Any language code from |
| one example | The fixed uniform bags. See Usage → Uniform Bags. |
The values worth reviewing first:
Config.Language = 'en' -- any code from locales/
Config.ItemName = 'outfitbag' -- must match your inventory item
Config.BagModel = 'reh_prop_reh_bag_outfit_01a' -- the bag prop
Config.PersistOutfitToClothing = false -- keep false if clothes are itemsThe shipped
Config.DefaultBagsholds one example: a police uniform bag inside Mission Row. Keep it, adapt it, or setConfig.DefaultBags = {}if you do not want uniform bags yet. The config is read when the resource starts, so restart it after a change.
Verifying the Installation#
After completing the installation, set Config.Debug = true, restart your server and read the console. Detection is the first thing it reports:
[Quasar Outfit Bag]: Found matching dependency: es_extended with ID: esx
[Quasar Outfit Bag]: Found matching dependency: ox_target with ID: ox_targetNo matching dependencies found means nothing from that list was running yet — check your load order. Then join your server and work through the first loop:
Give yourself the item
Use your framework's or inventory's own command, for example
/giveitem <id> outfitbag 1. On a standalone server, type/outfitbaginstead.Place the bag
Use the item. Your character sets a bag down in front of them, and the item leaves your inventory.
Unlock it and save an outfit
Target the bag and choose Use Bag. A new bag opens locked: press the padlock, then Save Outfit, type a name and press Enter.
Apply it and pick the bag up
Click the outfit to preview it, pick one of its four icons to wear it and close with ESC. Target the bag again and choose Pick Up Bag — the item is back in your inventory.
Outfits are written to the database the moment you press Enter. Pick the bag up, place another one anywhere — the same list is waiting inside.



