Configuration

jj-radial has no config file. Everything is a per-character setting the player controls in-game through /radialsettings, stored as JSON in MySQL. Server-side customisation is done by editing the two open functions.lua files or the NUI itself.

Player settings

All six settings are per character, saved the moment they change, and restored on login.

SettingDefaultWhat it does
Accent Color#13eabaDrives the whole menu's accent, glow and highlight colours. Eight presets plus a free colour picker.
Show LabelstrueShows or hides the text label under each icon.
Hold to Opentruetrue = hold the key, releasing closes the menu. false = press to toggle open, press again to close.
Hidden items[]Entries filtered out of the root ring. They stay registered with ox_lib — they're just not drawn.
Item order[]Explicit display order for the root ring. Anything not in the list sorts to the end.
Custom items[]Player-created shortcuts that run a chat command.
💡

Revert To Default in the settings panel clears hidden items, ordering and custom shortcuts in one go, and puts the accent back to teal.

Accent colours

Eight presets ship: Teal #13eaba, Purple #a855f7, Blue #3b82f6, Red #ef4444, Pink #ec4899, Orange #f97316, Gold #eab308, Green #22c55e.

The colour picker accepts any 6-digit hex. Values that don't match #RRGGBB are ignored.

Custom command shortcuts

Players can add their own radial entries from the Customize tab. Each needs three things:

FieldExampleNotes
LabelWalletShown under the icon
IconwalletA Font Awesome name. Bare names get fas automatically; fab fa-discord style strings also work.
Command/walletRun as if the player typed it

Shortcuts are registered through lib.addRadialItem on every login, so they survive restarts.

⚠️

Shortcuts execute client-side commands only, so a player can't reach anything they couldn't already type into chat. But any client command your resources register is one click away — if you ship client-side debug or dev commands on a live server, they become trivially accessible.

Theming beyond the accent

html/index.html is unencrypted and contains all the CSS. The base palette is at the top:

:root {
    --accent: #13eaba;
    --bg-dark: #101113;
    --bg-mid: #1a1b1e;
    --bg-light: #2a2a2e;
    --text: #e0e0e8;
}

Useful layout numbers in the same file: the ring container is 520×520, each icon wrapper 54×54, the centre button 52×52, and labels are 9px uppercase. The ring radius is computed as 120 + max(0, count - 8) × 6 pixels, so it grows automatically past eight entries.

⚠️

If you change the default accent, change it in all of: the :root block, the JS defaults, the Revert-To-Default literal, and the active preset swatch. Missing one leaves new players on teal until they touch the picker.

Icons and fonts

Font Awesome 6.7.2 and the Inter font are bundled with the resource — nothing is fetched from the internet, so icons render identically for every player regardless of their connection. Icons resolve from a bare name (star), a full class string (fab fa-discord), or an image URL beginning http, data: or nui://.

Fonts live in html/webfonts/ and the stylesheet in html/vendor/. The full free Font Awesome set is included (solid, regular and brands), so any free icon name works out of the box. Pro-only icons still render blank.

Framework layer

client/functions.lua and server/functions.lua are unencrypted. Between them they do only four things: get the player, get their identifier, check whether they're logged in, and fire a callback on login. Detection order is qbx_coreqb-corees_extended.

To support a framework that isn't one of those three, edit those two files — nothing else in the resource touches your framework.

Database

One table, created automatically on first boot:

jj_radial_settings
  citizenid  VARCHAR(50)  PRIMARY KEY
  settings   LONGTEXT

One row per character, holding the settings JSON. On ESX the citizenid column holds the ESX identifier. To reset a player, delete their row — they'll get defaults on next login.

Localisation

Every string in the settings panel is localised. Seven languages ship out of the box: en, es, fr, de, pt-br, pl, it.

ox_lib picks the right file from your convar_locale setting. To add another, copy locales/en.json to your language code and translate the values under ui — nothing else needs changing.

💡

Radial entry labels come from whichever resource registered them, not from jj-radial — translating those is done in the owning resource.

Commands

CommandAccessWhat it does
/radialsettingsEveryoneOpens the settings panel

Next: Troubleshooting.