A lightweight, customizable FiveM HUD built with React + Vite on the NUI side and modular Lua on the client. It replaces the default radar/health layout with a modern, reason-based visibility system, a custom square minimap, vehicle gauges, aircraft instruments, seatbelt/harness/cruise logic, engine stalling, and runtime VOIP/fuel integrations.
- Custom square/round minimap — texture replacement via
stream/squaremap.ytd, layout/clip/mask tuning, big-map recovery, and external map resource detection. - Player status cluster — health, armor, hunger, thirst, stress, oxygen with configurable icon shapes (bar, hexagon, circle, square) and color themes.
- VOIP indicator — auto-detects
pma-voice,saltychat,mumble-voip,tokovoip_script, andzerio-radio; shows talking state, proximity range, and radio channel/talk. - Vehicle HUD — speedometer (mph/kph), gear, RPM, fuel, engine health, lights; supports disabling the speedometer entirely.
- Fuel integration — auto-detects
ox_fuel,ps-fuel,cdn-fuel,LegacyFuel,qb-fuel,esx_fuel, and many others; falls back to native fuel with low-fuel alerts. - Seatbelt & harness — seatbelt (
B) with ejection protection, harness (H) with timed apply/remove and progress UI. - Cruise control — toggle with
Y(configurable), supports both speed-cap and auto-throttle modes. - Engine stall / breakdown — impact-based stalling with power reduction, smoke damage, and breakdown after too many stalls.
- Aircraft HUD — altitude, airspeed (knots), heading, engine/rotor health, hydraulics proxy, landing gear, and searchlight.
- Location strip — street name, zone, heading compass, and optional
nearest-postalpostal code/distance. - Dynamic weather strip — integrates
Dynamic_weather/dynamic_weatherfor current/next weather and ETA, plus flash-flood/hurricane warnings. - Polcam integration — hides the HUD when polcam is active and optionally forces the aircraft HUD overlay for the pilot.
- Cinematic mode — hides the HUD and radar for clean screenshots/recordings.
- Settings UI — open with
/hudsettings(I) to switch layout/color presets, shape styles, blur/opacity, and move speedometer/ammo via drag. - Visibility reason system — multiple independent reasons (
user,external,polcam,cinematic,framework,qbxCharacter,qbxSpawn) all must be true for the HUD to show, making it easy for external scripts to hide/show the HUD safely.
| Resource | Required | Notes |
|---|---|---|
| es_lib | Yes | Must start before es_hud; provides settings, notifications, and progress bars. |
| nearest-postal | Optional | Enables postal code/distance in the location strip. |
| polcam | Optional | Auto-detected; hides HUD when active. |
| Dynamic_weather / dynamic_weather | Optional | Enables the weather forecast strip and warnings. |
| ox_fuel / ps-fuel / cdn-fuel / LegacyFuel / qb-fuel / esx_fuel / etc. | Optional | Provides accurate fuel values; falls back to native fuel. |
| pma-voice / saltychat / mumble-voip / tokovoip_script / zerio-radio | Optional | Enables VOIP/radio status. |
-
Make sure
es_libis installed and starts beforees_hud. -
Build the NUI:
cd web npm install npm run buildIf you use Bun, you can run
bun install && bun run buildinstead. -
Copy the
es_hudfolder into your FiveMresourcesdirectory. -
Add to
server.cfg:ensure es_lib ensure es_hud
-
Edit
config/shared.luato match your server framework and preferences.
The fxmanifest.lua expects a built NUI at web/dist/:
cd web
npm install
npm run buildweb/dist and web/node_modules are intentionally ignored by .gitignore. Do not commit generated build output.
| Command / Key | Description |
|---|---|
/togglehud |
Toggle the entire HUD on/off (user visibility reason). |
/hudsettings (I) |
Open the HUD settings menu. |
/cinematicmode (F7 by default) |
Toggle cinematic mode (hides HUD + radar). |
/es_hud_cruise (Y by default) |
Toggle cruise control while driving. |
B |
Toggle seatbelt (when enabled in config). |
H |
Toggle racing harness (when enabled in config). |
Keys can be changed in
config/shared.luaor via FiveM key mapping settings.
These exports can be called from other client scripts:
| Export | Parameters | Returns | Description |
|---|---|---|---|
toggleHud(state) |
boolean? |
— | Toggle or set the external visibility reason. |
isHudVisible() |
— | boolean |
Whether the HUD is currently visible. |
hideHud(reason?) |
string? |
— | Hide the HUD for a custom reason. |
showHud(reason?) |
string? |
— | Show the HUD for a custom reason. |
setHudVisible(visible) |
boolean |
— | Set the external visibility reason directly. |
setHudVisibleReason(reason, visible) |
string, boolean |
— | Set a named visibility reason. |
setCharacterSelectionActive(active) |
boolean |
— | Hides HUD during QBX character selection. |
setSpawnSelectorActive(active) |
boolean |
— | Hides HUD during QBX spawn selection. |
toggleMap(state?) |
boolean? |
— | Toggle or set minimap visibility. |
refreshMinimap(reason?) |
string? |
— | Request a minimap refresh/re-layout. |
isSeatbeltOn() |
— | boolean |
Whether the seatbelt is fastened. |
toggleSeatbelt(state?) |
boolean? |
— | Toggle or set seatbelt state. |
isHarnessOn() |
— | boolean |
Whether the harness is fastened. |
toggleHarness(state?) |
boolean? |
— | Apply/remove the harness. |
isEngineStalled() |
— | boolean |
Whether the current vehicle engine is stalled. |
isEngineBroken() |
— | boolean |
Whether the engine has broken down. |
getStallCount() |
— | number |
Number of stalls for the current vehicle. |
getEnginePower() |
— | number |
Current engine power multiplier (1.0 = full). |
repairEngine(vehicle?) |
entity? |
— | Repair engine and reset stall state. |
setForceAircraftHud(forced) |
boolean |
— | Force the aircraft HUD overlay on/off. |
isAircraftHudForced() |
— | boolean |
Whether the aircraft HUD is being forced. |
isCruiseControlActive() |
— | boolean |
Whether cruise control is active. |
getSettingsDefinition() |
— | table |
Returns the settings schema used by the settings UI. |
All tuning is in config/shared.lua.
| Option | Default | Description |
|---|---|---|
Config.framework |
'standalone' |
'standalone' or 'qbx' for QBX/QBCore player-loaded hooks. |
Config.speedUnit |
'mph' |
Speed display unit: 'mph' or 'kph'. |
Config.disableSpeedometer |
false |
Disable the vehicle speedometer entirely. |
Config.disableWantedLevel |
true |
Continuously clear the native wanted level. |
Config.cinematicKey |
'F7' |
Default key for cinematic mode. |
Config.cruiseControl.enabled |
true |
Enable cruise control. |
Config.useBuiltInSeatbeltLogic |
false |
Enable the built-in seatbelt system. |
Config.useHarnessSystem |
false |
Enable the racing harness system. |
Config.useStallSystem |
false |
Enable impact-based engine stalling. |
Config.EnablePostal |
false |
Show postal codes in the location strip. |
Config.voipResource |
'auto' |
VOIP resource to use, or 'auto' for detection. |
Config.showDynamicWeather |
false |
Show the Dynamic_weather forecast strip. |
Config.defaultHudPreset |
'classic' |
Default layout preset. |
Config.HudPresets ships with four presets:
classic— top-center indicator, bottom-left status, bottom-right speedometer.street— top-left indicator, bottom-center speedometer, neon accent theme.dispatch— utility-heavy, amber accents, right-side speedometer.ghost— minimal top-center readouts, soft monochrome, compact right-side driving HUD.
Config.Minimap controls clip type, size, mask, blur, and texture replacement targets. Set textureReplacement.enabled = false if you use a minimap pack that does not provide the squaremap textures.
es_hud/
├── fxmanifest.lua # Resource manifest (cerulean, lua54, fxv2_oal, strict NUI callbacks)
├── init.lua # Client entry point; loads config, settings, HUD threads
├── server.lua # Restarts the `maps` resource on server start
├── config/shared.lua # All user-facing configuration
├── modules/
│ ├── bridge/client.lua # Framework hooks (standalone / QBX)
│ ├── cruise/client.lua # Cruise control logic
│ ├── fuel/client.lua # Fuel provider detection and alerts
│ ├── harness/client.lua # Racing harness apply/remove
│ ├── integrations/client/dynamic_weather.lua # Weather resource integration
│ ├── seatbelt/client.lua # Seatbelt logic
│ ├── settings/client.lua # Settings UI, persistence, presets
│ ├── stall/client.lua # Engine stall/breakdown logic
│ ├── status/client.lua # Player status and VOIP state gathering
│ ├── threads/client/hud.lua # Main HUD loop, visibility, exports
│ ├── threads/client/vehicle_status.lua # Vehicle/aircraft data loop
│ └── utility/shared/ # Minimap helpers and vehicle math
└── web/
├── vite.config.js
├── package.json
└── src/
├── App.jsx / main.jsx
├── components/ # HUD, AircraftHUD, Indicator, StatusOxygenHex, SettingsModal, etc.
├── hooks/ # Motion/animation hooks
└── hudPresets.js # Default layout/theme presets
The client Lua threads read game state, then push updates to the React UI through SendNUIMessage. Settings changes are persisted through es_lib and applied back to both the UI and native game state (minimap clip, radar, colors, etc.).
- Requires
es_lib— this resource will not start without it. - Build step required —
web/distis ignored and must be generated withnpm run buildbefore use. - Server-side behavior —
server.luaautomatically restarts themapsresource whenes_hudstarts; ensure that is compatible with your server setup. - Minimap texture replacement relies on
stream/squaremap.ytd; disable it in config if you use a different minimap texture pack. - Aircraft hydraulics is a proxy computed from body health and wing/control-panel damage because GTA V does not expose a dedicated elevator/hydraulics scalar.
- Framework support currently covers
standaloneandqbx; other frameworks may require bridge additions. - Experimental features —
fxmanifest.luaenableslua54,use_experimental_fxv2_oal, and strict NUI callbacks. Test on your target server build.
MIT © 2026 Ever3st
es_hud is an independent FiveM community resource. It is not affiliated with, endorsed by, or sponsored by Cfx.re, Rockstar Games, Take-Two Interactive, QBCore, QBX, or any other third-party project mentioned in the documentation. All product names, trademarks, and registered trademarks are the property of their respective owners.