Upload item images straight from your PC in-game with no restart, catch a post event after every hook, filter hooks like ox, pick blip sprites and colours visually instead of typing ids, plus a reworked state bag system and a long list of fixes. Scroll to Updating for exactly which files to replace, add, and remove.
⚠️ Before you update
- State bags reworked (breaking).
inv_busyno longer means "inventory open". It now means an inventory action is running (item use, hotbar use, ammo load). The open state moved toinv_open(with aninvOpenox alias). Always truthy-check the busy bags, never compare with== true. Scripts that readinv_busyas "inventory open" must readinv_openinstead. See Statebags. - Hook changes (breaking).
RemoveHookis now scoped to the calling resource: you can no longer remove another resource's hook by id, andRemoveHook(nil)removes all of your own. The ox compatregisterHooknow matches current ox exactly, returning a string hook id that doubles as the post-event name instead of the old numeric id. See Backwards Compatibility. - Parachute unequip moved. Re-using a parachute item no longer unequips it (it notifies that one is already equipped). Unequip is now a right-click "Unequip Parachute" button so it can't be triggered from the hotbar. See Parachutes.
- ox
setContainerPropertiesnow uses runtime definitions. It creates or updates an in-memory container definition instead of a saved database row, and a saved admin container definition with the same name is refused (the database wins). See Backwards Compatibility.
✨ Added
- In-game item image uploads. Upload an item image straight from your PC in the create and edit modal's image picker (shared by items, weapons, containers and clothing): paste with
Ctrl+Vor use Browse. Uploads save intoweb/images/and show instantly for everyone with no restart. You can also add external image hosts in the config, andmetadata.image/metadata.imageurlnow accept full URLs. See the new Item Images guide. - Visual blip pickers. Blip sprites and colours are now picked from a visual grid across Shops, Crafting, Stashes and Licenses, instead of typing raw ids. Search all sprites by name, or enter an id manually for anything newer than the list.


- Post-hook events. After every hooked action finishes, a post event fires with
(success, payload), wheresuccessis false when a hook cancelled the action or it errored. A hook can now register for post events only. See Hooks. - Hook filters.
RegisterHooknow acceptsprint,itemFilter,inventoryFilterandtypeFilteroptions, AND-combined with the same semantics as ox, so a hook only runs when all its filters pass. See Hooks. - Runtime container definitions. Register containers at runtime with the new
CreateContainersDefinitionexport, exactly like runtime item definitions: in-memory, tagged in the admin panel, and never persisted. - Disarm export. A new client
DisarmPlayerexport (with an optionalnoAnimflag), plus backwards compatibility for theox_inventory:disarmclient event.
🔌 Exports
CreateContainersDefinition(server). New. Registers one container, an array, or a name-keyed map of runtime container definitions.DisarmPlayer(client). New. Holsters and removes the equipped weapon; passnoAnimto skip the holster animation. No-op when nothing is equipped.RegisterHookandRemoveHook(server). Post events, filter options, and resource-scoped removal (see Before you update).
🪝 Hooks & events
- Post-hook events. Every hook can now receive a post event after its action finishes. See Hooks.
- Hook filters.
print,itemFilter,inventoryFilterandtypeFilteron both native and ox compat hooks. See Hooks. - Player server id in payloads. Hook and event payloads now expose the player's server id (a number) for player inventories in every inventory-reference field (
inventoryId,fromInventory,toInventory). Non-player inventories keep their string id.
🛠️ Fixed
- The inventory can no longer be opened while parachuting or in skydive free-fall.
- The petrol can and fire extinguisher now empty correctly as you use them, matching the hazard and fertilizer cans. Custom weapons in those GTA groups work automatically.
- Client read-only exports (
SearchInventory,GetInventoryItems,GetItemCount,HasItem,GetSlotand more) now return fresh results after dropping and picking an item back up, and after any drag that moves items into your inventory (stashes, trunks, gloveboxes, bags, dumpsters, searched players, quick-move, weapon throw, and within-inventory moves). - Every colour picker (markers, theme colours, item rarity) now selects the exact colour you see, and the thumb no longer jumps around while dragging.
- Pasting into any search box (items, weapons, animations, jobs, npcs) now filters results immediately instead of waiting for a keystroke.
- Usable items whose effect is still running (like a lockpick minigame) can no longer be triggered again to stack a second effect.
- The
onItemAdded,onShopPurchasedandonItemCraftedevents now report the item's final stored metadata (serial, durability, container id) instead of the input. - Add-style payload
slotandtoSlotfields now report where the item actually landed, not the requested slot. - Overriding
StartProgressnow replaces the whole progress bar, so you no longer get a doubled bar. - A container's context menu now shows the number of unique items instead of the total quantity, fixing a full-bag miscount for large stacks.
- A second player at an emptied dumpster no longer hits "not valid" errors, and a stale dumpster panel now resyncs.
- Aim no longer stays locked in forced first person when a weapon runs out of ammo.
RegisterItemButtonnow works on weapons, attachments and every other item type, not just plain items.
♻️ Changed
- State bag rework.
inv_busynow signals a running inventory action and is replicated alongside the oxinvBusyalias; setting either truthy from any script blocks item use and inventory opening. The open state isinv_open(with aninvOpenalias). Stale flags left over from a restart are cleared on start. See Statebags. - Parachute is equip-only. Using the item equips the parachute; unequip is now a right-click "Unequip Parachute" button.
- Holding the open key no longer loops. Holding the open keybind no longer rapidly opens and closes the inventory.
📚 Documentation
- New Item Images guide covering every way to get item images in, the upload flow, external image hosts, and the exact resolution order.
📦 Updating
Back up your install first, especially any open-source files you've edited. folder/* below means every file in that folder.
Replace with the new build:
fxmanifest.luaclient/main.lua,client/utils.lua,client/modules/*,client/compat/*server/main.lua,server/utils.lua,server/classes/*,server/modules/*,server/compat/*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.
Open-source files (re-apply your local edits, or merge by hand). Only the functions to re-check are listed:
client/integrations/opensource.lua:StartProgressfunction,CanUseInventoryfunction (new; used by the hotbar and use-item guards),CanOpenInventoryfunction (now also rejects while parachuting or in skydive free-fall)
Restart the server after updating. The backwards-compatibility exports now survive restarting one_inventory on its own, so consuming resources no longer need a restart of their own.
Looking for the developer API? See the documentation. 📚


