F5 StudioF5 Studio
Skip to main content
F5 Shadow Market

Installation

F5 Shadow Market is a dark-web style player-to-player auction house and marketplace: anonymous sellers, live auctions, buy-now listings, bargaining, seller-set discounts, escrow, physical package delivery, reviews, an encrypted in-app chat, and a full NUI admin panel — all on a self-detecting multi-framework bridge.

Requirements​

RequirementDetails
FrameworkQBCore, QBox Core, or ESX (auto-detected)
FiveM ServerRecent artifacts recommended
Lua5.4 (enabled automatically via lua54 'yes')
DatabaseMySQL 8.0+ or MariaDB 10.6+
Database Resourceoxmysql (recommended), mysql-async, or ghmattimysql — auto-detected by the built-in SQL bridge (see note below)
Target (optional)ox_target, qb-target, a custom target, or none (auto-detected)
Inventoryox_inventory, qb-inventory, qs-inventory, ps-inventory, codem-inventory, tgiann-inventory, ESX native, or custom — all supported
Multi-Framework

F5 Shadow Market automatically detects your framework, inventory and target system at startup — no manual configuration needed. Framework detection priority is QBox → QBCore → ESX (qbx_core → qb-core → es_extended). See Framework Compatibility for the full detection logic and how to force a specific adapter.

Database driver auto-detection

The script ships a built-in SQL bridge (server/sql_bridge.lua) that auto-detects and supports oxmysql, mysql-async and ghmattimysql out of the box (checked in that priority order, within a 30 s window). It builds a unified MySQL.* layer, so any of the three works with no code changes.

The manifest declares no hard database dependency, so the resource starts on whichever supported driver is running — just make sure your DB resource starts before f5_shadowmarket (see the server.cfg examples below). oxmysql is the recommended default.

Step by Step​

1. Download​

Purchase F5 Shadow Market from the F5 Studio store. Claim the asset on Cfx.re Keymaster and download the latest version.

2. Folder Structure​

Place the resource in your server's resources directory. The folder must be named f5_shadowmarket:

Folder structure
resources/
[f5]/
f5_shadowmarket/
bridge/
client/
html/
item/
locales/
server/
config.lua
config_webhooks.lua
shared.lua
fxmanifest.lua

3. Server Config​

Add the resource to your server.cfg — make sure it starts after your framework, oxmysql, and (if used) your inventory and target resources:

server.cfg
ensure oxmysql
ensure qb-core
ensure qb-target
ensure qb-inventory
ensure f5_shadowmarket
Start Order

F5 Shadow Market must start after your framework, oxmysql, target system and inventory. Incorrect boot order is the most common installation issue — the bridge runs its framework/inventory detection once at startup, and if those resources aren't up yet the resource goes inert.

4. Database​

No manual SQL import is required. On first start the script auto-creates all required tables, indexes and ENUM values:

TablePurpose
f5_shadowmarket_listingsBuy-now and auction listings
f5_shadowmarket_offersAuction bids
f5_shadowmarket_ordersCompleted sales (escrow + delivery tracking)
f5_shadowmarket_reviewsBuyer ratings of sellers
f5_shadowmarket_identitiesCitizen → anonymous handle mapping
f5_shadowmarket_notificationsIn-app notification inbox
f5_shadowmarket_favoritesBookmarked listings per player
f5_shadowmarket_conversationsBuyer ↔ seller chat threads
f5_shadowmarket_messagesChat messages and bargain offers
f5_shadowmarket_bansMarket access restrictions
f5_shadowmarket_admin_logAdmin action audit trail

This is controlled by F5Cfg.Database.autoCreateTables (default true). When you update the script, new columns, indexes and ENUM values are applied as migrations on startup — no manual SQL needed. See Configuration → Database.

5. Register the Item​

The script ships with one usable item — market_tablet — that opens the market. Open the file matching your framework and follow the inline instructions:

FrameworkFile
QBCoref5_shadowmarket/item/QBCORE.TXT
QBox Coref5_shadowmarket/item/QBXCORE.TXT
ESXf5_shadowmarket/item/ESX.SQL

Then copy the item icon f5_shadowmarket/item/market_tablet.png into your inventory's image folder:

InventoryIcons folder
ox_inventoryox_inventory/web/images/
qb-inventoryqb-inventory/html/images/
qs-inventoryqs-inventory/html/images/
ps-inventoryps-inventory/html/images/
codem-inventorycodem-inventory/html/itemimages/
tgiann-inventoryinventory_images resource (.webp — see note in Items)
ESX native(no icon folder required)

See Items for the full per-framework procedure and copy-paste templates.

6. Configure Locale​

Open config.lua and set your language code:

config.lua
F5Cfg.Locale = 'en'   -- en, pl, de, es, fr, pt, nl, cs, tr, ar, zh, th

The script ships with 12 languages. See Localization.

7. Configure the Payout Currency​

The whole market uses a single money type for balances, spending and payouts. By default that's the bank account:

config.lua
F5Cfg.Money = {
payoutType = 'bank', -- must match one of the ids in F5Cfg.Money.types
-- ...
}

The types table maps each currency id to the native account name per framework (e.g. cash, bank, crypto, black_money). See Framework Compatibility → Money & Currencies.

8. Configure Admin Access​

The /marketadmin panel is gated by an ACE permission or a framework group:

config.lua
F5Cfg.Admin = {
command = 'marketadmin',
acePermission = 'f5market.admin', -- '' disables the ACE path
frameworkGroups = { 'admin', 'god' }, -- {} disables group-based access
-- ...
}

Grant the ACE in your server.cfg if you use the ACE path:

server.cfg
add_ace group.admin f5market.admin allow

See Admin Panel → Access Control.

9. Configure Discord Webhooks (optional)​

Open config_webhooks.lua (a server-only file) and paste a Discord webhook URL into Webhooks.defaultUrl to enable audit logging. See Discord Webhooks.

10. Verify​

Restart your server. With F5Cfg.Debug.enabled = true (and the relevant categories on) the bridge prints what it detected:

[SERVER][IO] [sql_bridge] driver detected: oxmysql
[SERVER][BRIDGE] detected framework=qb inventory=qb

If detection fails you'll instead see (resource goes inert):

[SERVER][ERROR] [ERR]  [BRIDGE] no supported framework detected (esx/qb/qbx) — resource inert
[SERVER][ERROR] [ERR] [BRIDGE] no supported inventory detected for framework esx

In-game, use the market_tablet item (or run /market, depending on your command mode) to open the market, and /marketadmin as an admin to verify the panel opens.

Next Steps​