Before You Begin#
Before installing Advanced Inventory, make sure your server meets the requirements below. Everything marked optional is detected on its own when it is already running.
Requirement | Status | Notes |
|---|---|---|
FiveM server artifact | Required | Build 4752 or newer. |
| Required | Database access. It must start before the inventory. |
| Required | Callbacks and shared helpers, plus notifications and progress bars when qs-interface is not running. |
| Required | Declared as a dependency: the inventory does not start until it is running. |
| Required | Ships in the download. Streams the 3D backgrounds behind your character — 31 gradient rooms and the Cyberpunk one. |
Framework | Required |
|
OneSync | Recommended | Needed for kickable bags on the ground, strict vehicle access and the server-side distance checks on searches, robberies and trades. |
Appearance | Optional |
|
Target | Optional |
|
| Optional | Notifications, progress bars, the HUD and 3D prompts. Without them, ox_lib and the game's own text take over. |
The inventory picks each integration by looking at what is already started:
Layer | Detection |
|---|---|
Framework |
|
Appearance |
|
Target |
|
Framework Modifications#
Advanced Inventory takes over the inventory functions of your framework, so the framework needs a few small changes. The fastest and safest route is to use the pre-edited versions Quasar maintains:
github.comes_extended 1.16.3 for qs-inventoryESX Legacy, pre-edited for Quasar Advanced Inventory.github.comqb-core 1.3.0 for qs-inventoryQBCore, pre-edited for Quasar Advanced Inventory.github.comqbx_core 1.24.0 for qs-inventoryQbox, pre-edited for Quasar Advanced Inventory.Older framework versions are still in the quasar-store-organizations GitHub organization, but they don't support items created in-game.
The edited es_extended hands its inventory to qs-inventory with this line in es_extended/shared/config/main.lua:
Config.CustomInventory = 'qs'With it, ESX reads its item list from the inventory instead of the items SQL table, and every xPlayer item function is answered by qs-inventory. Without it, usable items registered by your other scripts are not picked up.
Use the edited qb-core. On top of it, the inventory replaces the player methods AddItem, RemoveItem, GetItemBySlot, GetItemByName, GetItemsByName, ClearInventory and SetInventory at runtime, so scripts calling them keep working. Items and weapons still come from qb-core/shared/items.lua and qb-core/shared/weapons.lua.
Use the edited qbx_core. Qbox is detected as QBCore in Qbox mode: it uses the inventory's own shared/items.lua and shared/weapons.lua, and money is the cash item.
Downloading Advanced Inventory#
After purchasing Advanced Inventory, 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 Advanced Inventory.
After extracting the download, you should have the following folders:
[advancedinventory]/
├── qs-inventory/ -- the inventory itself
│ ├── config/config.lua -- framework and appearance detection only
│ ├── client/custom/ -- bridges and gameplay hooks (editable)
│ ├── server/custom/ -- bridges, commands and webhooks (editable)
│ ├── shared/items.lua -- item list (ESX and Qbox)
│ ├── shared/weapons.lua -- weapon list (ESX and Qbox)
│ ├── shared/data/ -- factory defaults of every setting
│ ├── locales/ -- 41 languages
│ └── web/ -- the interface, already built
├── qs-inventory-objects/ -- streamed 3D backgrounds (required)
├── [dlc]/ -- qs-armor, qs-licenses, qs-weapondraw, qs-weaponsonback
└── [sql]/ -- esx.sql and qb.sqlThe folder must be named
qs-inventory. Every Quasar and third-party script callsexports['qs-inventory'], and a renamed copy prints an error in the console and refuses to run. The add-ons in[dlc]keep their names for the same reason.
Installing the Resource#
Move the folders into your server's resources directory. They can live anywhere inside it, including a category folder:
resources/
└── [qs]/
├── qs-inventory/
├── qs-inventory-objects/
└── [dlc]/Then open your server.cfg and make sure every dependency — and everything the inventory should detect — starts before it:
ensure oxmysql
ensure ox_lib
# Framework (one of them)
ensure es_extended
# ensure qb-core
# ensure qbx_core
ensure MugShotBase64
# Appearance, target and interface, if you use them
ensure illenium-appearance
ensure ox_target
ensure qs-interface
ensure qs-inventory-objects
ensure qs-inventory
# Optional add-ons, after the inventory
ensure qs-armor
ensure qs-licenses
ensure qs-weapondraw
ensure qs-weaponsonbackThe loading order matters. The framework, the appearance script and the target are detected once, when the inventory starts, so anything that starts after it is not found.
The Database#
Import the SQL file that matches your framework from the [sql] folder with HeidiSQL or any MariaDB client:
Import [sql]/esx.sql. Besides the inventory tables, it adds the inventory_skill, unlocked_skills and metadata columns to users, and its first line resets the inventory column of every player to [].
Import [sql]/qb.sql. Besides the inventory tables, it adds the inventory_skill and unlocked_skills columns to players. Player inventories already live in players.inventory and are left as they are.
Tables | Hold |
|---|---|
| Every stash, by stash id. |
| Trunk and glovebox contents, by plate. |
| The clothing pieces each player is wearing. |
| Per-player data kept by the inventory and its add-ons, such as stored armour. |
| Each player's missions: progress, rewards to claim and missions completed. |
| The player's own inventory, level and XP ( |
The tables behind the two in-game panels are created by the inventory itself on first start, all prefixed qs_inventory_:
Tables | Hold |
|---|---|
| Every setting you changed in |
| Stashes, shops, sell points, crafting benches, items and weapons made in |
| The skill tree, the missions and the pause-menu news. |
| The history of every item created and the anti-dupe alerts. |
| A copy of every row the importer rewrites, made before it touches it. |
On that first start the inventory also writes its starter content: eight shops with 36 locations between them, two crafting benches, two sell points, the wallet and backpack items, a 43-skill tree, 21 missions and eight pause-menu announcements. Each set is written once — delete a starter shop and it stays deleted.
The files use MariaDB's
ADD COLUMN IF NOT EXISTS, which MySQL 8 does not accept. Run the database on MariaDB, and avoid XAMPP and similar local stacks for a live server — they are a common source of connection errors.
Items per Framework#
Items are not stored in SQL. Where the base list lives depends on the framework:
Framework | Items | Weapons |
|---|---|---|
ESX |
|
|
Qbox |
|
|
QBCore |
|
|
On ESX the items SQL table is not read at all. On QBCore, copy the items that come with the inventory — clothing pieces, attachments, tints, ammo, backpacks — into qb-core/shared/items.lua, and keep QBCore's own cash item, which is what the inventory uses as money there. If some items behave strangely on QBCore, your items file is probably outdated; Quasar keeps a reference items.lua for QBCore.
New items do not have to go in a file at all. An item made in
/inventorycreator→ Items exists for every player the moment you save it, on every framework — on QBCore it is pushed into qb-core's item list live. See Usage.
Clothing items for QBCore — copy and paste
['tshirt'] = { ['name'] = 'tshirt', ['label'] = 'T-shirt', ['weight'] = 0, ['type'] = 'item', ['image'] = 'tshirt.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['torso'] = { ['name'] = 'torso', ['label'] = 'Torso', ['weight'] = 0, ['type'] = 'item', ['image'] = 'torso.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['arms'] = { ['name'] = 'arms', ['label'] = 'Arms', ['weight'] = 0, ['type'] = 'item', ['image'] = 'arms.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['jeans'] = { ['name'] = 'jeans', ['label'] = 'Jeans', ['weight'] = 0, ['type'] = 'item', ['image'] = 'jeans.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['shoes'] = { ['name'] = 'shoes', ['label'] = 'Shoes', ['weight'] = 0, ['type'] = 'item', ['image'] = 'shoes.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['mask'] = { ['name'] = 'mask', ['label'] = 'Mask', ['weight'] = 0, ['type'] = 'item', ['image'] = 'mask.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['ears'] = { ['name'] = 'ears', ['label'] = 'Ears', ['weight'] = 0, ['type'] = 'item', ['image'] = 'ears.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['glasses'] = { ['name'] = 'glasses', ['label'] = 'Glasses', ['weight'] = 0, ['type'] = 'item', ['image'] = 'glasses.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['helmet'] = { ['name'] = 'helmet', ['label'] = 'Helmet', ['weight'] = 0, ['type'] = 'item', ['image'] = 'helmet.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['bag'] = { ['name'] = 'bag', ['label'] = 'Bag', ['weight'] = 0, ['type'] = 'item', ['image'] = 'bag.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'A nice piece of clothing' },
['chain'] = { ['name'] = 'chain', ['label'] = 'Chain', ['weight'] = 100, ['type'] = 'item', ['image'] = 'goldchain.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['rare'] = 'epic', ['description'] = 'It is very fragile, watch out' },
['vest'] = { ['name'] = 'vest', ['label'] = 'Vest', ['weight'] = 100, ['type'] = 'item', ['image'] = 'vest.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['rare'] = 'epic', ['description'] = 'Body Armor' },
['bracelets'] = { ['name'] = 'bracelets', ['label'] = 'Bracelets', ['weight'] = 100, ['type'] = 'item', ['image'] = 'bracelets.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['rare'] = 'epic', ['description'] = 'It is very fragile, watch out' },
['watch'] = { ['name'] = 'watch', ['label'] = 'Watch', ['weight'] = 100, ['type'] = 'item', ['image'] = 'rolex.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['rare'] = 'epic', ['description'] = 'It is very fragile, watch out' },Claiming Admin Access#
Everything is configured in game through two panels: /inventoryconfig for the settings and /inventorycreator for stashes, shops, benches, items and more. Both are behind an admin check, and any of these routes lets you in:
The usual route. Add these lines to server.cfg and restart the server:
add_ace group.admin command.inventoryconfig allow
add_ace group.admin command.inventorycreator allowSwap group.admin for any principal — a single identifier.license:… works too. Give only command.inventorycreator to staff who should build shops and stashes but not touch the settings.
Automatic, nothing to configure. ESX admin and superadmin, and QBCore / Qbox god and admin (or anyone with the command ace) open both panels.
In /inventoryconfig → Access & commands you can rename the ace each panel checks, and the command that opens it. A new ace applies at once; a new command name applies after a restart.
Somebody without access who types either command gets a notification, and the server console prints the exact add_ace line that would let them in.
Configuring the Resource#
Almost nothing is configured in files. Weights, slots, keys, vehicles, robbery, weapons, the quick wheel, the pause menu, security — every behaviour lives in /inventoryconfig, is applied to every player when saved, and is kept in the database, so an update never wipes it. The files that are still worth knowing:
File | Contents |
|---|---|
| Framework and appearance detection. Touch it only if you renamed your core resource. |
| Discord webhook URLs, one per log category, and the Discord bot token used to show avatars in the pause menu. |
| The base item and weapon lists on ESX and Qbox. The guide at the top of |
| The ESX starter items — an ID card, five water bottles, five sandwiches and a phone — handed out once per character when your character creator triggers |
| The example benches, sell points and equipment items written on the first start. |
| Open bridges: framework, clothing, target, notifications, robbery, selling and the admin commands. |
| The factory defaults the panels start from. Change the values in game, not here. |
The language can be set for every Quasar resource at once with a convar in server.cfg, or for the inventory alone in /inventoryconfig → General → Language (applies after a restart):
setr qs:locale "es"41 languages are included: ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi and zh.
Editing
shared/data/after a setting was saved in the panel changes nothing — the database wins. The server also mirrors the saved settings todata/settings.jsonso they load before any other script on the next start; never edit that file by hand. Reset section in the panel puts back what shipped.
Verifying the Installation#
After completing the installation, restart your server and read the console. The version check prints one of these lines:
You are using the latest version of qs-advancedinventory!
New version available for qs-advancedinventory!A warning listing Missing webhooks is expected until you fill in webhook.lua. Then join your server and work through the first loop:
Open the inventory
Press
TAB. Your character appears beside the grid, and the What's in the Bag? mission is ready to claim on the missions page.Give yourself an item
Type
/inventorycreator, open Give, pick yourself and fivewater_bottle. Drag one onto the hotbar and press its number key to drink it.Press ESC
The pause menu opens with your card, money, job and the server announcements. From there, Usage covers everything else.
Nothing needs a restart for content. Stashes, shops, items, skills, missions and most settings apply to every player the moment you save them; the few settings that need a restart are marked in the panel.



