Installation
gta6_notify draws card-style notifications: a round icon disc, a dark body with a coloured accent bar that drains as the timer runs out, a small uppercase title and a bold message. It has no framework dependency. Other resources call it through an export or an event, and one line in your framework routes all standard notifications to it.
Requirements
| Requirement | Details |
|---|---|
| Framework | None. Optional one-line patches for QBCore and ESX are described below |
| FiveM Server | Any recent build. Lua 5.4 |
| Client build | The layering feature uses the SetNuiZindex native (FiveM clients from December 2024). Older clients skip it |
| Database | None |
Step by Step
1. Folder structure
resources/
[gta6]/
gta6_notify/
html/
icons/ (11 PNG icons, one per type)
sounds/ (3 OGG files)
index.html
app.js
style.css
client.lua
config.lua
server.lua
fxmanifest.lua
README.md
Keep the folder name gta6_notify. The export other scripts use (exports.gta6_notify) and the checks in the framework patches depend on it.
2. Server config
ensure gta6_notify
The resource has no dependencies, so it can start before or after your framework.
3. Test
In-game, run:
/gta6notify success
/gta6notify warning top-right
The first argument is a type, the second an optional position. A card with a Polish test message ("Test powiadomienia typu …") should appear.
4. Route framework notifications (optional but recommended)
The resource only covers every script on the server if the framework's own notify function ends up here. Each framework has one place to patch, and in each case the matching Config.Hook… switch must stay false so the same notification is not shown twice.
- QBCore
- ESX
- QBox
qb-core draws its notifications from QBCore.Functions.Notify in qb-core/client/functions.lua, and its QBCore:Notify event calls the same function. Add one line at the top of that function:
function QBCore.Functions.Notify(text, texttype, length, icon)
if GetResourceState('gta6_notify') == 'started' then return exports.gta6_notify:Notify(text, texttype, length) end
local message = {
-- ... rest of the original function
Leave Config.HookQBCore = false (the default). With the hook on, the QBCore:Notify event would be handled by both qb-core and this resource, and every server-sent notification would show as ×2. When gta6_notify is stopped, qb-core falls back to its own cards.
The table form QBCore.Functions.Notify({ text = '...', caption = '...' }, type) is accepted: text becomes the message and caption the title. Because a table as first argument is passed straight through, the separate type argument is ignored in that form; put type = 'success' inside the table if you need a colour other than info.
es_extended routes ESX.ShowNotification to exports['esx_notify']:Notify, and its esx:showNotification event calls the same function. Add one line at the top of the function in es_extended/client/functions.lua:
function ESX.ShowNotification(message, notifyType, length, title, position)
if GetResourceState('gta6_notify') == 'started' then return exports.gta6_notify:Notify({ message = message, type = notifyType, duration = length, title = title }) end
return IsResourceFound('esx_notify') and exports['esx_notify']:Notify(notifyType or "info", length or 5000, message, title, position)
end
Keep the original esx_notify in [core]: es_extended requires it at start and uses it as the fallback when gta6_notify is not running. Leave Config.HookESX = false (the default), because es_extended already turns the event into the function call and a second handler would duplicate every card.
ESX.ShowAdvancedNotification, ESX.ShowHelpNotification and ESX.ShowFloatingHelpNotification are drawn by the game's scaleforms and are not affected.
No patch ships for QBox. exports.qbx_core:Notify keeps drawing the qbx_core notifications. If you want them here, add the same guard as in the QBCore patch at the top of the Notify function in qbx_core/client/functions.lua:
if GetResourceState('gta6_notify') == 'started' then return exports.gta6_notify:Notify(text, notifyType, duration) end
Adapt the argument names to the function signature in your qbx_core version.
Config.DedupeWindow (150 ms) drops an identical message, type and title arriving twice within the window. If a misconfiguration sends the same notification down two paths, you get one card instead of ×2.
Next steps
- Configuration
- API — exports, event and command
- Features — types, positions, queue, merging, sound, layering
- Assets & Credits
- Troubleshooting