Skip to content

Theming & settings ​

Brand colour ​

One brand colour themes every np_menu surface. The web derives the tile ramp, accents and tinted glass from it, the same way np_hud does. Semantic colours (green confirm, red danger, …) never change.

lua
Config.Theme = {
  brand = '#3d74ff',        -- nil = the neutral Nimbus grey
  strength = 'tiles',       -- 'accent' | 'tiles' | 'glass'
  allowPlayerBrand = false, -- true: players can pick their own brand colour in the settings menu
}
StrengthWhat gets the brand colour
accentSelection and accents only
tiles+ the neutral tiles (and tint = 'brand' tiles)
glass+ a hue in the glass surfaces

Use tint = 'brand' on a row or header to follow the server colour.

Blue brand, tiles strength, Liquid Glass

Materials ​

MaterialLook
frosted (default)Dark frosted grey glass lit from above, the Nimbus UI default
liquidLiquid Glass: the iOS 26-style clear material from the Nimbus design system

The server default is Config.Defaults.material. Players pick their own in the settings menu.

Staff skin ​

skin = 'staff' on a menu uses the red-edged danger glass, so staff see at a glance that they're in an admin tool. The built-in dev menu uses it.

Player settings ​

/menusettings (or the Settings tile in the quick menu) opens the settings menu. Choices are stored per player in client KVP, on top of Config.Defaults.

SettingValuesDefault
Positionright, left, centreConfig.Defaults.position
Densitycomfortable, compactConfig.Defaults.density
Materialfrosted, liquidConfig.Defaults.material
Scale75 – 150 %Config.Defaults.scale
Brand colourcolour picker. Only with Config.Theme.allowPlayerBrand = true, otherwise shown as lockedConfig.Theme.brand
Soundson / offConfig.Defaults.sounds
Focus modewalk, NUIConfig.FocusMode
LanguageEnglish, DeutschConfig.Locale

The menu also lists the current key bindings (read-only, they're changed in the FiveM key binding settings) and a Reset action that clears the player's overrides, so they follow the server defaults again.

A menu's own position wins over the player setting. Scaling follows the np_hud rule: the UI is designed for 1080p and zoomed by max(0.75, height / 1080) × scale.

From code ​

lua
local s = exports.np_menu:getSettings()
-- { position, density, material, scale, sounds, locale, focusMode, brand, strength }

exports.np_menu:setSetting('position', 'left')   -- -> true, or false + 'invalid' / 'unknown_setting'
exports.np_menu:setSetting('position', nil)      -- back to the default

Valid keys: position, density, material, scale, sounds, locale, focusMode, and brand (only with allowPlayerBrand). Every change fires the local event np_menu:settingChanged (key, value).

Languages ​

English and German ship in shared/locales/. L(key, ...) falls back to English, then to the key. To add a language, add a file to shared/locales/ that calls NpMenu.addLocale('fr', { ... }) with the same keys as en.lua and the menus_*.lua files. The UI strings of the web (key hints, search, dialogs) are sent from Lua too.

Design system ​

The visuals are Nimbus UI (np_menu/design/, the same tokens and components as np_hud and np_phone), imported unchanged by the web. Menu-specific CSS lives in web/src/styles/menu.css.

The original concept mockups live in the np_menu repo under docs/mockups/renders/.

np_* FiveM resources