One Studios

A focused follow-up to the first beta haul. Runtime shops now carry restrictions and open from your scripts, the player-search system is fully configurable, dynamic clothing is locked to its ped model, and a stack of fixes landed. Scroll to Updating for exactly which files to replace, add, and remove.

⚠️ Before you update

  • RegisterShop opens via OpenInventory only. Runtime-registered shops no longer place a world marker or E-to-open prompt. Open them from your own script with OpenInventory(src, 'shop', name). See RegisterShop.
  • Dynamic clothing is now locked to its ped model. A piece created for one freemode model (for example mp_m_freemode_01) can no longer be equipped on the other. The model it was made for is saved with the item, and its icon and equip resolve from that saved model instead of the wearer's current ped.

✨ Added

  • Player search configuration. A new config section for the search-player system: turn the whole system on or off, choose which jobs can search, and allow searching based on the target's state (searchable, cuffed, dead), each toggleable. Leaving the allowed-jobs list empty hides the search option from everyone.

🔌 Exports

  • RegisterShop (server): now opened only through OpenInventory (no world marker or E prompt), and supports job, gang and license restrictions. ox_inventory's groups map onto our jobs for backwards compatibility.

🛠️ Fixed

  • ox_inventory RegisterShop(name, shopDetails) now uses the first name argument even when shopDetails also carries a name; the explicit argument wins.
  • Editing a stash's slot count or max weight in the admin panel now applies live, instead of only after a restart.
  • Cancelling an item use no longer leaves the inventory stuck in a locked state.
  • Headshots in the give menu now load independently instead of waiting on one another.
  • Restricted license points now hide when you lack access, matching shops, stashes and crafting, instead of showing but refusing to open.
  • While searching another player, changing their clothing now applies to that player. Previously your own character played the animation and received the clothing.
  • Player search no longer shows for players who shouldn't see it; it now respects the allowed jobs and the target's state.
  • Removed leftover target-zone debug drawing on stashes (and any others left enabled).

♻️ Changed

  • Shop items no longer show their label in the grid: the image, stock and price are enough, and the label is still in the context menu.
  • Shops priced in cash or black money now show that currency's item image instead of a generic icon, using the item set in your config.
  • An item that's usable through both our config and a framework-registered callback now runs both, instead of one blocking the other.

📦 Updating

Back up your install first. folder/* below means every file in that folder.

Replace with the new build:

  • fxmanifest.lua
  • client/main.lua, client/utils.lua, client/compat/*, client/modules/*
  • server/main.lua, server/utils.lua, server/classes/*, server/compat/*, server/modules/*
  • web/dist/*
  • locales/* (keys were added and changed across every locale file). Replace wholesale, or merge with a diff tool if you maintain custom languages.

No files were added or removed this release, and no open-source integration files (server/integrations/, client/integrations/) changed, so there is nothing to merge by hand.

Restart the server fully after updating. Restarting one_inventory on its own from in-game disables the backwards-compatibility exports until the next full restart.

Looking for the developer API? See the documentation. 📚

The first big update since the beta release. Clothing items are now dynamic, covering all of your clothing in your server. There is a proper permission system, a new quick-move flow, several new exports, and a stack of additions & fixes. Scroll to Updating for exactly which files to replace, add, and remove.

⚠️ Before you update

A few changes need action on your side:

  • Hook and event renames. beforeItemCreate is now beforeItemAdd, and the onItemCreated event is now onItemAdded. "Create" is reserved for creating a definition. Update any scripts that register these.
  • Drag keybinds changed (defaults, configurable). Stack half-split moved from Shift + drag to Left-Alt + drag. Dropping is now Shift + right-click instead of left-click, so items can't be dropped by accident. All of these can be rebound in the admin panel under config, keybinds.
  • Admin panel now needs an ACE. Opening the admin panel requires the one_inventory.admin ace in server.cfg. Without it the panel can't be opened. See the new Setting Permissions guide.
  • ESX and QBCore: new dependency. screenshot-basic must be started before one_inventory (used by the admin clothing-icon capture). QBox already ships it. See the ESX and QB-Core install pages.
  • In-game restarts break compatibility exports. Restarting one_inventory from in-game disables the backwards-compatibility exports until a full server restart. See Backwards Compatibility.

✨ Added

  • Dynamic clothing. The clothing system is extended, not replaced. Alongside fixed pieces, one item per component now carries its drawable and texture in its metadata, so a single item covers every variant of that slot and can mirror all the clothing on your server. Items auto-create whenever the worn outfit changes, and any appearance script is auto-detected with zero per-script setup (qb-clothing needs one small export). Full walkthrough in the Clothing as Items guide.
  • Permission system. Panel access is gated by the one_inventory.admin ace; per-group command permissions (who can run /giveitem and friends) are managed in-game from the panel's Permissions tab, with an "Enable all commands" toggle per group. See Setting Permissions.
  • Quick-move. Hold the quick-move key and click an item to send it straight to the open secondary inventory, with backpacks taking priority, then stash or ground, and back again. The key shows in the item hover overlay and the info modal. Configurable.
  • Admin menu hotkey. A configurable key to open the admin panel (keybindAdmin, unbound by default, perm-checked, closes on the same key).
  • me as a command target. Run commands like /giveitem me bread 5 or /clearinv me on yourself.
  • Backpack item actions. Drop, use (when usable) and give buttons on items inside backpacks.
  • Orphan items kept safe. Items whose definition no longer exists are preserved as inert, greyed ? slots that survive a save and resolve back when the definition returns.
  • Import from file on the weapons, ammo and components tabs, same flow as item import.
  • Custom components can be added through the component combobox.
  • Throwable weapons can be marked throwable on creation (for custom throwables).
  • Free shop prices. A shop price of 0 is allowed and shows as "Free".
  • Open key now closes. The open-inventory key also closes the inventory when it's already open.
  • Press-to-set keybinds. Rebinding a key in config now captures the pressed key instead of needing the key name typed.
  • Polish translation.

🔌 Exports

New and updated exports. Click through for full docs.

  • CloseInventory (client): force-close the inventory and clean up any open secondary.
  • SetCanOpenInventory / CanOpenInventory (client): lock or unlock the player's ability to open the inventory (including the hotbar) while another resource's UI is open.
  • CreateItemsDefinition (server): register item definitions at runtime. Backwards compatible with QBCore AddItem(s).
  • RegisterShop (server): register a shop at runtime, opened with OpenInventory.
  • GetClientConfig (server and client) / GetServerConfig (server only): read the config, split so server-only keys never leak to clients.
  • AddItem (server): pass metadata.serial = false to add a weapon without a serial (for example blackmarket guns).
  • GetItemDefinition / GetAllItemDefinitions (server and client): now resolve every definition type (item, weapon, ammo, component, backpack, clothing), each tagged with a type field, with an optional type filter.

🪝 Hooks & events

  • Renamed beforeItemCreate to beforeItemAdd and the onItemCreated event to onItemAdded.
  • ox_inventory parity. Native hooks now carry the same payload fields as ox_inventory's hooks, with a lot of extra params added so existing ox-style handlers line up, plus a new beforeShopOpen hook. Full list of events and payloads on the Hooks page.

🛠️ Fixed

  • Cash statistic in the inventory now refreshes live on give, drop, move and stash, instead of only on reopen.
  • Clothing menu no longer shows when searching a player while clothing is disabled.
  • A weapon moved from the hotbar back into the inventory now correctly shows "Unequip", not "Equip".
  • Opening the inventory over the hotbar no longer leaves the hotbar stuck closed afterwards.
  • TAB no longer cycles focus inside the inventory, so a TAB keybind can close it again.
  • qbx_core usable items now work.
  • Usable items registered through QBCore's backwards compatibility now fire.
  • Admin panel statistic cards now count correctly.
  • Stash editor resets its locations when switching location type, matching shops, instead of carrying target coords over to markers.
  • Equipped clothing can now be dropped.
  • The give picker now shows the target's headshot instead of your own.
  • A receiver with their inventory open now sees a given item sync live, without reopening.
  • In the immersive layout the ped is now invisible only to the player themselves, not to everyone.
  • The "Use" button is hidden in the context menu for items that aren't usable.
  • Context-menu total weight for stacked ammo is now correct.
  • A bad or non-existent item-use export can no longer break the inventory.

♻️ Changed

  • Admin dashboard UI refresh.
  • Insufficient-funds messages now name the account (Cash, Bank, Black Money) instead of a generic message.
  • Adding an item that is usable through both our config and a framework now surfaces a clear error.

📚 Documentation

  • New guide: Clothing as Items, covering appearance-script support, how it works, and adding a new appearance script.
  • New guide: Setting Permissions, covering panel access and per-group command permissions.
  • New guide: Usable Items, covering how to bind actions to items across one_inventory, ESX and QBCore.
  • New page: Backwards Compatibility, listing exactly which framework and inventory functions keep working.
  • The migration guide is now Migrate Inventory, refreshed for the latest import flow.

📦 Updating

Back up your install first, especially any open-source files you've edited. folder/* below means every file in that folder; folder/**/* means every file in it and its subfolders.

Replace with the new build:

  • fxmanifest.lua
  • client/main.lua, client/utils.lua, client/modules/*
  • server/main.lua, server/utils.lua, server/seed.lua, server/classes/*, server/compat/*, server/modules/*
  • web/dist/*
  • locales/* (keys were added and changed across every locale file). Replace wholesale, or merge with a diff tool if you maintain custom languages.

Add (new this update):

  • stream_disabled/* (green-screen capture map for clothing icons, disabled by default)
  • web/images/clothing/**/* (generated clothing icons)
  • client/integrations/clothing/*
  • server/integrations/clothing/*
  • [INSTALLATION]/clothing/*

Remove:

  • client/functions.lua (deleted)

Open-source files (re-apply your local edits, or merge by hand). Only the functions to re-check are listed:

  • server/integrations/qb.lua: isQbx, Framework.UseItem, Framework.IsItemUsable
  • server/integrations/opensource.lua: new IsPanelAdmin(src) and GetPlayerGroups(src)
  • client/integrations/qb.lua and client/integrations/esx.lua: the player-loaded handler now calls ApplyClothingOnSpawn()

Server config and setup:

  • Add the one_inventory.admin ace to server.cfg (required to open the panel). See Setting Permissions.
  • ESX and QBCore: ensure screenshot-basic before one_inventory in server.cfg. See the ESX and QB-Core install pages.
  • qb-clothing users only: add the one-line GetSkinData export from the Clothing as Items guide.

Restart the server fully after updating. Restarting one_inventory on its own from in-game disables the backwards-compatibility exports until the next full restart.

Looking for the developer API? See the documentation. 📚

Beta releasev0.1.0

The first public release of One Inventory, a modern grid inventory for FiveM. 🎉

📦 Inventory core

  • Grid based inventory with drag and drop
  • Configurable slot count and weight per inventory
  • Stack splitting with Shift or Ctrl + drag
  • Auto saving

🎒 Items

  • Use animations with progress bars and item props
  • Execute exports and events on item use
  • Per item metadata, optionally visible in tooltips
  • Built in hunger, thirst, health, and armor effects
  • Item durability that degrades over time or with use
  • Rarity tiers with colored glow
  • Custom right click actions per item
  • 3D props on the ground when items are dropped
  • Identification cards that remember who picked them up

🔫 Weapons

  • Durability with optional break at zero
  • Ammo loading, with families for special ammo types
  • Component and attachment system
  • Weapon tints
  • Unique serial numbers
  • Auto reload, first person aim, and other behavior config toggles
  • Equip and disarm from the hotbar

🗄️ Storage

  • Shared, unique, private, and restricted stashes
  • Vehicle trunks and gloveboxes with per class and per model overrides
  • Hood storage on supercars (frunk)
  • Automatic trunk transfer when a vehicle plate changes
  • Dumpsters with random loot, plus randomized garbage items
  • Backpacks that carry their own inventory
  • Confiscation and one call restore for custom workflows

🛒 Shops, crafting, and licenses

  • Shops with multiple currencies: cash or dirty money
  • Random pricing and stock control
  • Job, gang, and license restrictions
  • NPC vendors, target zones, or markers
  • Auto created blips
  • Multi ingredient crafting with progress bars
  • License purchase system

⚡ Hotbar

  • 5 quick access slots
  • Drag from inventory to assign
  • Press 1 through 5 to use or equip
  • Auto hide with item icons, counts, and durability

👕 Clothing

  • Equipment silhouette for hats, shirts, pants, shoes, and more
  • Ctrl + click to quick equip
  • Saved with the player inventory

🤝 Multiplayer

  • Give items to nearby players with shared trade animation
  • Search and frisk for police, gated by job and player state
  • Read only inventory inspection

🛠️ Admin panel

  • Full in game dashboard
  • Manage players, items, weapons, backpacks, clothing, stashes, shops, crafting, licenses, vehicles, animations, and config
  • Add, remove, or set items on any player
  • Changes broadcast live to all clients, no restart needed

🎨 Themes and customization

  • Layout modes: minimal and immersive
  • Color presets: Midnight Blue, Crimson, Emerald, Purple Haze, Gold, and Custom
  • Custom theme editor
  • Smooth drag and drop, transitions, and hover effects
  • Responsive design with virtual scrolling for large inventories

🌍 Localization

  • Many popular languages built in, with the option to add your own
  • Language picker in the admin panel
  • Instant sync across clients
  • Friendly fallback for missing translations

🔌 Framework support

  • (Backwards) compatibility for ESX, QB-Core, and Qbox so existing scripts keep working
  • Framework money mirrored inside the inventory as items

📥 Migration

  • One click import from ox_inventory and qb-inventory
  • Brings over both your definitions (items, weapons, shops, stashes, crafting, and more) and live player data
  • Conflict strategy per category: overwrite or keep
  • Wizard with preview, progress, and summary reports
  • Server lock after migration until restart, to keep your data safe

🛡️ Safety and performance

  • A lot of built-in checks for every interaction
  • Duplication prevention
  • Competing inventory script detection at startup

Looking for the developer API? See the documentation. 📚