Everything below, without the walkthrough. Scroll past it if this is your first time.
Paste your core file below. The patched version comes back with the interception line already in the right place, correctly indented, ready to save over the original.
The five things that actually go wrong, and what each one means.
then return end part, so the
original renderer keeps running after us. Copy the line again from the block above — it must
end in then return end, on the same line.
ensure dispersia_notify
below ensure qb-core / es_extended / qbx_core.dispersia_lib is installed, check the
four toggles in its settings panel./notify_test in game — it fires one notification through every framework
it detected, which tells you immediately whether the resource itself is alive.
dispersia_notify has to stay exactly that — no version suffix, no copy marker.
Also confirm the folder sits directly inside resources (nesting inside another
resource folder does not work).
Config.Debug = true in config/main.lua and the script prints every
interception decision it makes, which usually identifies the problem in one message.
Still stuck?Open a ticket in Discord. Include your framework, the console error, and what you already tried.
OPEN A TICKETAlmost nobody needs this page. If you patched your core, every notification on your server already goes through Notify — there is nothing to call.
Sending a notification from your own script:
exports['dispersia_notify']:Send('Title', 'Message', 'success', 4000)
Types: info · success · warning · error · police · gang. Duration in milliseconds. Everything below is for the rare case where that is not enough.
| exports['dispersia_notify']:Notify(payload) | Full control. Takes the payload table described below. Returns true once handled. |
| exports['dispersia_notify']:Send(title, message, type, duration) | Shorthand for the common case. Any argument may be nil. |
| exports['dispersia_notify']:Intercept(kind, ...) | The integration surface. kind is 'qbcore', 'esx', 'esxnotify' or 'ox'. Returns true when it handled the message, false when that interception is off — so the caller knows whether to continue. |
| exports['dispersia_notify']:Notify(src, payload) | Send to one player by server id. |
| exports['dispersia_notify']:Send(src, title, message, type, duration) | Shorthand form of the same. |
| exports['dispersia_notify']:NotifyAll(payload) | Broadcast to everyone online. |
| exports['dispersia_notify']:SendAll(title, message, type, duration) | Broadcast, shorthand form. |
| 'dispersia_notify:notify' 'dispersia_notify:client:notify' |
Client events. Both take a payload table. Useful when you cannot call an export. |
| 'dispersia_notify:server:notify' (target, payload) | Server-to-server only. target is a server id or 'all'. Calls from a client are ignored — the handler checks that source == 0, so players cannot spoof notifications. |
| title | Optional heading. Also accepted as caption or header. If you pass only a title, it becomes the message. |
| message | The body. Also accepted as description, text or msg. |
| type | 'info' 'success' 'warning' 'error' 'police' 'gang'. Also accepted as notifyType, status or preset. An unknown value falls back to info instead of failing. |
| duration | Milliseconds. Also accepted as length, time or timeout. Clamped to 500–30000, default 4000. |
| provider | Label used for rate limiting, so one misbehaving resource cannot starve the others. Defaults to 'custom'. |
| id · priority · color | Passed through to the UI untouched. |
| primary · inform · information | → info |
| ok | → success |
| danger · fail · failed | → error |
| warn | → warning |
| cop · law · pd | → police |
| criminal · crew | → gang |
| Config.Debug | Prints every dispatch and interception decision to the client console. Leave false on a live server. |
| Config.SettingsCommand | Chat command that opens the player settings panel. Default 'notify' — change it if another resource already registers it. |
| Config.Accent | Accent colour of the UI. Default '#8a43fb'. |
| Config.Colors | Per-type colours: info, success, warning, error, police, gang. |
| Config.CustomClientEvents | Catalogue of third-party events to intercept. Each entry takes event, provider and a mode: 'payload', 'qb', 'esx' or 'ox'. |
| /notify | Player settings: scale, position, sound, manual dismiss. Saved per player and survives reconnects. |
| /notify_test | Fires one notification through every framework the script detected. |
| Duplicate window | 750 ms. An identical notification inside that window is dropped. |
| Rate limit | 12 per 2 seconds, per provider, then slow mode. A runaway loop in someone else's resource cannot flood the screen. |
| On screen at once | 5. Anything beyond that queues. |