Configuration
All of DarkMarket's configuration lives in shared/config.lua. This file stays editable even on escrow-protected builds (it is listed in escrow_ignore, along with locales/*.json).
Main options
| Option | Default | Description |
|---|---|---|
Config.AppIdentifier | 'darkmarket' | Internal identifier in lb-phone. Do not change after deployment. |
Config.Locale | 'en' | Active UI language. Must match a file in locales/. |
Config.AppIcon | 'nui://lo_darkmarket/assets/darkmarket.jpg' | App icon. Leave '' to use lb-phone's default icon. |
Config.AppImages | {} | Screenshots shown on the App Store page. |
Config.DevMode | false | Loads localhost:3000 instead of ui/dist (development). |
Config.DevURL | 'http://localhost:3000' | Vite server URL in dev mode. |
Config.Storage | 'oxmysql' | Persistence mode: 'oxmysql' or 'memory'. |
Channels (private chats)
Config.Groups block — settings for the encrypted channels.
| Option | Default | Description |
|---|---|---|
nameMin / nameMax | 2 / 32 | Channel name length. |
aliasMin / aliasMax | 2 / 24 | Per-member alias length. |
codeLength | 8 | Access code length. |
maxPerPlayer | 15 | Max simultaneous channels per player. |
historyLimit | 100 | Messages loaded when opening a channel. |
msgMaxLength | 1000 | Maximum message length. |
codeAlphabet | 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789' | Characters used to generate codes. |
NOTE
The default alphabet deliberately excludes I, O, 0 and 1 to avoid visual confusion when reading or typing an access code.
Black market
Config.Market block — listing settings.
| Option | Default | Description |
|---|---|---|
titleMin / titleMax | 3 / 80 | Title length. |
descMin / descMax | 5 / 500 | Description length. |
priceMin / priceMax | 1 / 9999999 | Allowed price bounds. |
listingsLimit | 100 | Number of listings loaded. |
maxImages | 5 | Max photos per listing. |
expireAfterDays | 0 | Auto-delete after X days (0 = never). |
Categories
Config.Categories defines the market categories. The id is stored in the database and must not change; the displayed label is translated in the language files (keys cat_<id>), the label in the config being only a fallback. Keep all first.
Config.Categories = {
{ id = 'all', label = 'All', icon = 'grid' },
{ id = 'weapons', label = 'Weapons', icon = 'gun' },
{ id = 'drugs', label = 'Substances', icon = 'pill' },
{ id = 'electronics', label = 'Electronics', icon = 'chip' },
{ id = 'vehicles', label = 'Vehicles', icon = 'car' },
{ id = 'services', label = 'Services', icon = 'wrench' },
{ id = 'misc', label = 'Misc', icon = 'box' },
}Storage
Config.Storage = 'oxmysql' -- 'oxmysql' (recommended) or 'memory' (RAM, lost on restart)WARNING
'memory' mode keeps no data after a resource restart. Reserve it for testing; use 'oxmysql' in production.
Notifications
Config.Notifications block.
| Option | Default | Description |
|---|---|---|
onNewMessage | true | Phone notification on each new message. |
broadcastNewListings | true | Push to all online players when a listing is published. |
Languages
The active language is set by Config.Locale (available values: en, fr, es, de, it, pt). Translations live in locales/*.json and are bundled into the UI.
To tweak the interface wording, edit the matching file in ui/src/locales/ then run npm run build. The root locales/ files are listed in escrow_ignore, so they stay editable on escrow-protected builds.
Tips
TIP
- Never change
Config.AppIdentifieror the categoryids after deployment: they are stored in the database. - For a fork, change
Config.AppIdentifierbefore going to production. - A custom icon goes in
assets/(seeassets/README.md) or via a hosted URL. - Adjust
maxPerPlayerandpriceMaxto match your desired RP balance.