The Three Windows#
Radial Menu has three interfaces, and it helps to know which is which from the start:
Window | Opened with | What it is for |
|---|---|---|
The wheel |
| The menu itself, for every player. |
Player settings | , or the gear in the centre of the wheel |
Documentation
Use and customise the FiveM radial menu: the wheel and its controls, the default menu, building config/menu.lua, the /radialedit no-code editor, conditions, player themes and clothing toggles.
Radial Menu has three interfaces, and it helps to know which is which from the start:
Window | Opened with | What it is for |
|---|---|---|
The wheel |
| The menu itself, for every player. |
Player settings | , or the gear in the centre of the wheel |
/radialsettingsEach player's own colours, shape, layout, size, position and command shortcuts. |
The editor |
| Admins only: the menu, named actions, the server's look, and what players may change. |
The menu can come from two places:
config/menu.luaor the editor. While the editor's Override active switch is on, its menu replaces the file entirely; switch it off and the file is used again — nothing is lost either way.
Key | Does |
|---|---|
| Opens the wheel. The command closes it again too. Nothing opens over the pause menu. |
Click a section | Opens its buttons in place of the current ones. |
| Back one level. A right-click at the top level closes the wheel. |
Back · Home | Under the centre: one level up, or straight to the top. |
| Closes the wheel. The keys are |
Gear | Closes the wheel and opens the player's settings. |
Hovering a button shows its full name in the centre. The inner ring holds Config.InnerRingMaxItems buttons (six by default) and the outer ring two more. Anything past that folds into a More items button at the end, which opens the rest — a long section never runs out of room. The stack layout shows the same menu as a grid of tiles, with Back, Home, the gear and ✕ above it.
Most buttons close the wheel first and then run, so whatever they open gets the mouse. Buttons set to keep the wheel open run with it still on screen — the door, window and clothing toggles work this way, so a player can press several in a row.
config/menu.lua ships a full menu built around Quasar resources and common commands. Each section only shows to the players it concerns:
Section | Shows when | Holds |
|---|---|---|
Character | Always | Reload and save skin, switch character, clear stuck props, jobs, SIM cards, and the Clothing section. |
Customization | Always | Configure the HUD. |
Apartments | Inside a | Decorate, set the apartment's points. |
Garages |
| Create car, boat and plane garages, delete a garage ( |
Clothing shops · Labs · Housing |
| Create or delete clothing shops, create a drug lab, open the housing creator. |
Laboratory | Inside a | Lab menu, decoration. |
Mechanic |
| Repair, impound and clean vehicles, the mechanic menu. |
Motorhome | In or near a | Decorate, set points, camp, give keys. |
Casino |
| The casino menu. |
Admin | The player's | Admin menu, crafting, shop, hospital and mechanic creators, repair, impound, clean, change clothes. |
Vehicle | In a vehicle, or facing one | Doors, Windows, Seats, Engine, Flip — see below. |
Races | Always | Racing menu, nitro, drift. |
Ambulance |
| The ambulance menu. |
Every label is translated from locales/<lang>.json, so the default menu speaks your server's language. The commands and events behind the buttons belong to other resources: keep the sections for the scripts you run and delete the rest.
It works on the vehicle the player sits in, or the one straight in front of them, up to six metres away. Each button shows only when that vehicle actually has it — no rear doors on a coupé, no windows on a bike:
Button | Does |
|---|---|
Doors | Driver, passenger, rear left, rear right, hood and trunk, each opened or shut. Toggle all shuts them when half or more are open, and opens them otherwise. |
Windows | The four windows rolled down or up, with the same Toggle all. |
Seats | Moves the player into a free seat, from inside the vehicle and below 100 km/h. |
Engine | Turns the engine on or off. Driver's seat only. |
Flip | Puts an overturned vehicle back on its wheels, from inside it. |
All of these are client events any button can trigger — door by door, extras included. Commands and Exports lists them.
The menu is a tree with two kinds of node. A category is a section: it opens a submenu and holds items. An item is a button that runs an action. Categories can hold categories, as deep as you like.
{
label = 'Garage',
icon = 'Warehouse', -- any icon from lucide.dev/icons
type = 'category',
id = 'garage', -- optional: lets other resources attach to it
items = {
{
label = 'Open garage',
icon = 'Car',
type = 'item',
action = function()
ExecuteCommand('garage') -- a command
-- TriggerEvent('my:event') -- or a client event
-- TriggerServerEvent('my:ev') -- or a server event
end,
},
},
},Field | On | What it does |
|---|---|---|
| Both | The text under the button. |
| Both | A Lucide icon name such as |
| Both |
|
| Category | Optional. The name other resources use to put their own sections inside this one. |
| Category | Its children. A category whose children are all hidden is hidden too. |
| Item | The function run on click. An error inside it is shown to the player as a notification instead of breaking the menu. |
| Item |
|
| Both | Only for these jobs, from this grade up. |
| Both | Only for this gang, from this grade up. |
| Both | A function that returns |
job = 'police' -- one job
jobGrade = 2 -- ...at grade 2 or higher
job = { 'police', 'ambulance' } -- any of these jobs
job = { police = { grade = 1 }, ambulance = { grade = 3 } } -- a minimum grade per job
gang = 'ballas' -- one gang
gangGrade = 1 -- ...at grade 1 or higherGrades are minimums. A node with both a job and a gang needs both. The wheel rebuilds itself when a player's job or gang changes, so a promotion shows the next time they open it — even while it is open. On a server without a framework there are no jobs or gangs, so restricted nodes stay hidden.
{
label = 'Lockpick',
icon = 'KeyRound',
type = 'item',
canInteract = function()
return not IsPedInAnyVehicle(PlayerPedId(), false)
and RadialBridge.HasItem('lockpick')
end,
action = function()
TriggerEvent('lockpick:client:use')
end,
},canInteract runs every time the wheel opens, for every node that has one. Keep it cheap: no database calls, no long loops. Use job and gang for anything they can express, and ask RadialBridge rather than the framework, so the menu works on any of them — Integrations lists what it answers.
label = t('garages', 'Garages'), -- locales/<lang>.json → "menu": { "garages": ... }, or the fallbackt() reads the key from the menu block of the active language and shows the fallback when it is missing. If your server runs a single language, plain strings work just as well. Restart the resource after editing the file.
/radialedit builds the same tree without touching Lua. It has four tabs, and Save stores the tab you are on in the database and sends it to every player at once — no restart, no reconnect.
Tab | What you do there |
|---|---|
Menu | The tree: add categories and items, reorder, duplicate and delete them, and edit each one's label, icon, ID, action, conditions and restrictions. |
Actions | Named events you define once and then pick from a dropdown on any button. |
Appearance | The server's look, with a live preview — what every player starts from. |
Permissions | What players are allowed to change for themselves. |
Start with Import from menu.lua: it loads config/menu.lua into the tree, so you edit the menu you already have instead of starting from nothing. Labels, icons, IDs, jobs and gangs come across, and so do buttons whose action is a single ExecuteCommand, TriggerEvent or TriggerServerEvent line. A button whose action does more than that is flagged with a warning and needs an action chosen by hand.
Override active decides whether the tree is used. Off, the tree is only stored and players keep the menu from config/menu.lua. On, it replaces the file for everyone.
Select a node in the tree to edit it on the right:
Field | What it does |
|---|---|
Label · Icon | The text and the icon. The icon picker searches the full Lucide set of about 1,700 icons. |
ID | Unique across the tree — Save refuses duplicates and names them. Other resources attach their sections to a category by this ID. |
Action | Items only. Registered action picks one from the library, Custom event takes an event type and name, No action leaves the button inert. Close the radial after running is the |
Conditions | Tick any number from the library. Every ticked condition must pass for the node to show; none ticked means always. |
Restrictions | Job — one name, or several separated by commas for any of them — with a minimum job grade, and a gang with a minimum gang grade. |
A custom event, a registered action and an export item all use the same four types:
Type | Runs |
|---|---|
| A client event on the player's game. |
| A server event, sent by that player. |
| A command, as if the player typed it. Write it without the slash; arguments are fine — |
| A QBCore server command, through |
An action is a name for an event: an ID, a label, a type and the event or command. Add as many as you need and save — they join the Registered action dropdown and reach every player's game at once. IDs must be unique; Save names the row that is not.
Appearance holds the same controls as the player's own settings, described below; what you save here is the look every player starts from. Permissions decides which parts of it players may change:
Switch | Covers |
|---|---|
Allow players to change colors and shapes | Colours, shape, layout and the opening animation. |
Allow players to reposition radial | Size and position on screen. |
Allow players to add custom items | The Custom Items tab of the player's settings. |
A locked group is enforced, not just hidden: whatever a player saved before, the wheel uses the server's values for it. Appearance and Permissions are saved together, from either tab.
The editor's dropdowns are filled from a library that ships with these actions:
ID | Does |
|---|---|
| Closes the wheel. |
| Opens ox_inventory or qb-inventory. |
| Toggles qb-phone. |
| Runs |
|
|
And 36 conditions:
Group | Conditions |
|---|---|
Player | On foot, aiming a weapon, shooting, ragdolling, climbing, swimming, falling, jumping, going prone, running, sprinting, stealth mode, weapon drawn, in water, fully submerged, dead or downed, handcuffed. |
Vehicle | In any vehicle, is the driver, is a passenger, engine running, is a car, motorcycle, boat, plane, helicopter or bicycle. |
World | Clear weather, raining, snowing, daytime (6:00–20:59), night (21:00–5:59). |
Job | On duty; law enforcement ( |
custom/registry.lua adds a set of examples you can keep, change or delete: heal to full, repair the current vehicle and toggle the seatbelt as actions; police chief, police or sheriff, $500 in cash, carrying a lockpick or a radio, holding the keys to the current car, and near the Mission Row station as conditions. Library entries never appear in the wheel by themselves — they do nothing until an admin attaches them to a button. Writing your own is covered in Integrations.
/radialsettings — or the gear in the centre of the wheel — opens each player's own panel, with a live preview on the left and two tabs:
Tab | What it holds |
|---|---|
Appearance | Theme presets; background and border gradients — linear or radial, any angle, any number of colour stops; border on or off; glow, icon and text colours; button and background opacity; drop shadow with colour, offset and blur; the eight shapes — hexagon, circle, squircle, square, octagon, chamfer, pentagon, diamond; radial or stack layout; the opening animation; menu size from 25% to 200%; and position, from nine presets or dragged anywhere on screen. |
Custom Items | The player's own shortcuts: a label, an icon and a command. They appear at the end of the top level of the wheel and run the command as if it were typed. |
Save Settings keeps the choices on the player's PC. Reset to Defaults restores the original look and keeps the shortcuts. The theme buttons are Config.ColorPresets in config/main.lua — nine ship, and you add your own by copying a block.
A player's look applies only where Permissions allow it. Locked parts are greyed out in their panel with a notice, and the wheel shows the server's values for them.
Until an admin saves Appearance in the editor, the wheel uses Config.Shape, Config.LayoutMode and Config.CarouselAnimation with the shipped colours.
Once saved, the editor's Appearance is the server's look for everyone, and it reaches players who are online at once.
On top of that, each player's own settings, for whatever Permissions leave open.
Character → Clothing toggles eleven slots: hat, glasses, mask, ears, watch, bracelet, shirt, pants, shoes, neck and vest. The first press takes the piece off with a short animation; the second puts back exactly what was there — the same model and the same texture. Stopping or restarting the resource puts everything back on.
Set Config.Clothing.Emotes = false to change clothes instantly, without the animation. The slots, the animations and what "off" means for the male and female freemode models are in custom/clothing.lua.