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_coreqb-corees_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