Skip to content

Retro Radial

rs_radial is a complete radial-menu system for FiveM. It combines a polished orbit-style UI, a runtime API for other resources, server-authoritative validation, and per-player customization in one resource.

  • Orbit-style radial with configurable hub size, orbit radius, start angle, and direction.
  • Hold-to-open keybind with toggle and close-on-select options.
  • Multi-page navigation with breadcrumb-style center labels.
  • Center hub doubles as the back button on subpages.
  • Per-item icons in five formats: built-in name, inline SVG file, PNG/WEBP/JPG, CSS class (Font Awesome), external URL.
  • Per-item label, color, tooltip, badge, and disabled-reason hover.
  • Per-item confirmation, input, and select modals.
  • Async items show a spinner until CompleteAsyncAction is called from the server.
  • Smooth open/close/page-switch animations with reduced-motion support.
  • main top-level page with up to 8 default entries (configurable).
  • favorites dynamic, per-player KVP-backed list of starred items.
  • general shared general actions (emotes, carry, clothing entry point).
  • blips dynamic page built from Config.Blips.categories with per-player toggles.
  • vehicle auto-built from Config.Vehicle.controls, shown only when in a vehicle.
  • settings opens the Settings panel.
  • police / mechanic / ems job-gated job action pages.
  • clothing auto-built from Config.Clothing.items.
  • client TriggerEvent(name, args).
  • server TriggerServerEvent(name, args).
  • command ExecuteCommand(str).
  • export exports[resource][event](args).
  • customFunction call a function declared in custom_functions.lua.
  • page navigate to a subpage.
  • back return to previous page.
  • settings open the Settings panel.
  • blipToggle toggle a blip category.
  • info / nuiOnly non-interactive placeholders.
  • Vehicle-specific: seat, door, window, engine, neon, allDoors, allWindows.
  • Job / grade / on-duty gating.
  • Gang / gang grade gating.
  • Cuffed / dead state gating (with allowlist for items usable while dead).
  • visibleIf predicate (named, registered via RegisterPredicate).
  • Inline canSee(ctx) callback.
  • reqItems inventory requirement (ox_inventory / qb-inventory).
  • showOnlyInVehicle / showOnlyOutVehicle flags.
  • predicateDisabledMode choose hide (default) or disabled for predicate failures.
  • Cooldown state (per-item, per-player).
  • Driver-only button surface for door, window, engine, neon, seat-swap actions.
  • Configurable position (drag-to-edit) and 13-color theme palette.
  • Multiplayer-sync of door/window/engine/neon state across all occupants.
  • Driver-lock state preview for passengers (read-only view of who has control).
  • Live preview in the Settings panel pickers update the bar immediately.
  • 12-color Theme Editor with per-color picker, live preview, save / discard / reset.
  • Menu Size slider (configurable min / max / step).
  • Menu Position drag-edit with viewport clamp.
  • Item Order drag-reorder per page.
  • Vehicle Control bar position + color customization.
  • Sound Effects master toggle, volume slider, and per-event mute.
  • Reset Defaults button.
  • Optional Player Card (mugshot + name + server ID).
  • Every toggle can be locked from config.lua.
  • AddMenuItem(pageId, item) add an item from any resource.
  • RemoveMenuItem(pageId, itemId) / UpdateMenuItem(pageId, itemId, patch).
  • AddSubMenu(pageId, def) register a brand-new page.
  • AddMenuItemForPlayer(src, pageId, item) server-side, per-player items.
  • GetMenuItem / IsMenuOpen / GetCurrentPage / CloseMenu / Refresh.
  • RegisterPredicate / UnregisterPredicate (client) and RegisterServerPredicate (server).
  • CompleteAsyncAction(itemId, ok, errorMessage) resolve async items.
  • WatchStateBagKey(key) refresh menu when a state bag value changes.
  • Resource-stop sweep: items registered by a resource are auto-removed when it stops.
  • Config.Security.serverSideValidation = true re-checks job/gang/cuffed/dead/cooldown/visibility on every server-event dispatch.
  • RegisterServerItem(pageId, itemId, config) bind a server-side validator/handler pair.
  • CanPlayerUseMenuItem(src, pageId, itemId) from anywhere.
  • Per-item cooldowns enforced and reported back to the client.
  • Trigger-protection: refuses server events for items that donโ€™t pass server-side checks.
  • Optional webhook with per-event filters (security, item-used, blocked, errors).
  • Throttle and batching to avoid rate limits.
  • Per-page or per-item override of the webhook URL.
  • Opt-in via Config.OxLibBridge.enabled = true.
  • Patches lib.addRadialItem, lib.removeRadialItem, lib.registerRadial, lib.hideRadial, lib.getCurrentRadialId.
  • Forwards into rs_radialโ€™s runtime API.
  • If real ox_lib is installed, only the radial functions are patched.
  • Inline onSelect = function() end callbacks are stored locally and dispatched on click.
  • Icon strings auto-mapped to Font Awesome classes.
  • Config.Debug toggles F8 console logging.
  • Config.Performance controls resmon-sensitive paths (state-bag watchers, refresh cadence).
  • NUI files are cache-busted on every build (?v=N).
  • All html/ files ship with a UTF-8 BOM so CEF cannot mis-detect encoding.
  • Framework auto-detection: QBCore, Qbox / qbx_core, ESX, or standalone.
  • Inventory auto-detection: ox_inventory, qb-inventory, qbx_core, ESX, or custom callback.
  • pma-voice is not required.
  • ox_lib is optional: rs_radial can stand alone, replace ox_libโ€™s radial, or coexist with it.