Installation Guide
This guide will walk you through installing Beyond HUD on your FiveM server. Beyond HUD requires Beyond Lib as a dependency.
Prerequisites
- FiveM Server: Latest recommended version
- Database: MySQL/MariaDB with oxmysql
- Framework: ESX or QB-Core
- Admin Access: Server file system access
Step 1: Install Beyond Lib
Beyond HUD requires Beyond Lib as a dependency. Install it first:
Step 2: Download Beyond HUD
- Download Beyond HUD from your purchase location
- Extract the files to get the
beyond_hudfolder
Step 3: Install Files
-
Copy the
beyond_hudfolder to your server’s resources directory:Server Directory
resources/ ├── beyond_lib/ # Must be installed first ├── beyond_hud/ # Your new HUD resource └── ... other resources -
Add to server.cfg (must be after beyond_lib):
server.cfg
ensure oxmysql ensure es_extended # OR qb-core ensure beyond_lib # Should already be installed ensure beyond_hud
Step 4: Configure Modules
Beyond HUD automatically loads the core modules for Player, Chat and Vehicles, but you can disable them if you do not want to use them in the config. The same goes for the Notifications, Progress Bar and Chat modules. While these optional modules are not required to use Beyond HUD, they are enabled by default and require minor setup to use.
Below are setup guides for the framework scripts, for guides on how to set up optional modules for partner resources, check out the Compatibility Guide.
Notifications
QB-Core
In your server, head to the qb-core resource folder and open the functions.lua file in the client folder.
On line 155, there is a function called QBCore.Functions.Notify that is used to display notifications, let’s implement Beyond’s Notification event here with a fallback to the framework.
qb-core/client/functions.lua
function QBCore.Functions.Notify(text, texttype, length, icon) if GetResourceState('beyond_hud') == 'started' then --[[ The notifications can be disabled in the HUD config. This enabled local variable allows us to disable it without needing to change this code later. Allowing this function to fallback to the default notification where necessary. --]] local enabled = exports['beyond_hud']:HUD().notify({ title = '', text = text, type = texttype, duration = length, icon = icon }) if enabled then return end end local message = { action = 'notify', type = texttype or 'primary', length = length or 5000, } if type(text) == 'table' then message.text = text.text or 'Placeholder' message.caption = text.caption or 'Placeholder' else message.text = text end if icon then message.icon = icon end SendNUIMessage(message) end
ESX
In your server, head to the esx_notify resource folder in the [core] directory and open the Notify.lua file.
On line 6, there is a function called Notify that is used to display notifications, let’s implement Beyond’s Notification event here with a fallback to the framework.
esx_notify/Notify.lua
---@param notificatonType string the notification type ---@param length number the length of the notification ---@param message any the message :D local function Notify(notificatonType, length, message) if GetResourceState('beyond_hud') == 'started' then local enabled = exports.beyond_hud:HUD().notify({ title = '', text = message, type = notificatonType, duration = length, }) if enabled then return end end if Debug then print(("1 %s"):format(tostring(notificatonType))) print(("2 %s"):format(tostring(length))) print(("3 %s"):format(message)) end if type(notificatonType) ~= "string" then notificatonType = "info" end if type(length) ~= "number" then length = 3000 end if Debug then print(("4 %s"):format(tostring(notificatonType))) print(("5 %s"):format(tostring(length))) print(("6 %s"):format(message)) end SendNuiMessage(json.encode({ type = notificatonType, length = length, message = message or "ESX-Notify", })) end
Progress Bar
QB-Core
In your server, head to the qb-core resource folder and open the functions.lua file in the client folder.
On line 182, there is a function called QBCore.Functions.Progressbar that is used to display progress bars, let’s implement Beyond’s Progress Bar event here with a fallback to the framework.
qb-core/client/functions.lua
function QBCore.Functions.Progressbar(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel) if GetResourceState('beyond_hud') == 'started' then --[[ The progress bar can be disabled in the HUD config. This enabled local variable allows us to disable it without needing to change this code later. Allowing this function to fallback to the default progressbar where necessary. --]] local enabled = exports['beyond_hud']:HUD().progressBar({ label = label, duration = duration, type = 'radial', -- 'bar' | 'radial' -- cancellable = canCancel, disabled = disableControls, animate = { dict = animation.animDict, anim = animation.task or animation.anim, flags = animation.flags, props = { prop, propTwo }, useTask = animation.task ~= nil, }, onComplete = function() if onFinish then onFinish() end end, onCancel = function() if onCancel then onCancel() end end }) if enabled then return end end if GetResourceState('progressbar') ~= 'started' then error( 'progressbar needs to be started in order for QBCore.Functions.Progressbar to work') end exports['progressbar']:Progress({ name = name:lower(), duration = duration, label = label, useWhileDead = useWhileDead, canCancel = canCancel, controlDisables = disableControls, animation = animation, prop = prop, propTwo = propTwo, }, function(cancelled) if not cancelled then if onFinish then onFinish() end else if onCancel then onCancel() end end end) end
ESX
In your server, head to the esx_progressbar resource folder in the [core] directory and open the Progress.lua file.
On line 35, there is a function called Progressbar that is used to display progress bars, let’s implement Beyond’s Progress Bar export here with a fallback to the framework.
esx_progressbar/Progress.lua
---@param message string ---@param length? number Timeout in milliseconds ---@param Options? ProgressBarOptions ---@return boolean Success local function Progressbar(message, length, Options) if GetResourceState('beyond_hud') == 'started' then local animation = Options and Options.animation or nil local onFinish = Options and Options.onFinish or nil local data = { label = message, duration = length, type = 'bar', } if animation then if animation.dict then data.animate.dict = animation.dict end if animation.lib then data.animate.anim = animation.lib end end if onFinish then data.onComplete = function() if onFinish then onFinish() end end end local enabled = exports['beyond_hud']:HUD().progressBar(data) if enabled then return true end end if CurrentProgress then return false end CurrentProgress = Options or {} if CurrentProgress.animation then if CurrentProgress.animation.type == "anim" then ESX.Streaming.RequestAnimDict(CurrentProgress.animation.dict, function() TaskPlayAnim(ESX.PlayerData.ped, CurrentProgress.animation.dict, CurrentProgress.animation.lib, 1.0, 1.0, length, 1, 1.0, false, false, false) RemoveAnimDict(CurrentProgress.animation.dict) end) elseif CurrentProgress.animation.type == "Scenario" then TaskStartScenarioInPlace(ESX.PlayerData.ped, CurrentProgress.animation.Scenario, 0, true) end end if CurrentProgress.FreezePlayer then FreezeEntityPosition(ESX.PlayerData.ped, CurrentProgress.FreezePlayer) end SendNUIMessage({ type = "Progressbar", length = length or 3000, message = message or "ESX-Framework", }) CurrentProgress.length = length or 3000 CreateThread(startProcessing); return true; end
Below the function above, on line 99, there is a function called CancelProgressbar that is used to cancel the progress bar, let’s implement Beyond’s Cancel Progress Bar export here with a fallback to the framework.
esx_progressbar/Progress.lua
local function CancelProgressbar() if GetResourceState('beyond_hud') == 'started' then exports['beyond_hud']:HUD().cancelProgressBar() return end if not CurrentProgress then return end SendNUIMessage({ type = "Close", }) ClearPedTasks(ESX.PlayerData.ped) if CurrentProgress.FreezePlayer then FreezeEntityPosition(ESX.PlayerData.ped, false) end if CurrentProgress.onCancel then CurrentProgress.onCancel() end CurrentProgress.canceled = true CurrentProgress.length = 0 CurrentProgress = nil end
Step 5: Verify Installation
- Start your FiveM server
- Check console for startup messages
Check Console
Look for these success messages:
FiveM Console
[beyond_lib] Successfully initialized for [ESX/QB-Core] [beyond_hud] HUD system initialized successfully [beyond_hud] Chat system loaded
-
Join your server to test:
- Health and other information such as hunger, thirst, and such should appear when neccessary.
- Chat should work with Beyond HUD’s theming and chat system.
- Press
Oto open settings menu. - Top Right corner of the screen should show the city ID and current server logo or Beyond Logo if you have not changed it yet.
Beyond HUD is now installed and ready to use, it’s core modules for player, chat and vehicles are ready to use.
Common Issues
Here are some common issues that you may encounter when installing Beyond HUD if you missed a step or tried insstalling on your own.
Resource Won’t Start
Problem: beyond_hud fails to start
Solutions:
- Ensure
beyond_libis installed and started first - Check
oxmysqlis running - Verify file permissions are correct
Database Errors
Problem: Database connection errors
Solutions:
- Verify
oxmysqlis configured correctly - Check database credentials in your framework
- Ensure MySQL/MariaDB is running
- Ensure
beyond_libis installed and started first
Framework Not Detected
Problem: Framework not recognized
Solutions:
- Ensure your framework (ESX/QB-Core/Qbox) is properly installed and supported
- Check Beyond Lib installation
- Verify framework resource names in server.cfg
Next Steps
Installation complete! Now that we know the HUD is working, let’s configure Beyond HUD for your server:
Need help with a specific feature? Check the Features Guide