INSTALLATION GUIDE

Installing Notify

Quick install — the short version

Everything below, without the walkthrough. Scroll past it if this is your first time.

Or let the page write the line for you

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.

NOTHING LEAVES YOUR BROWSER — CHECK THE NETWORK TAB
RECOGNISED FILES qb-core / client / functions.lua es_extended / client / functions.lua ox_lib / resource / interface / client / notify.lua esx_notify / Notify.lua
Waiting for a file.

When something does not work

The five things that actually go wrong, and what each one means.

Notifications appear twice — mine and the original
The interception line is there, but without the 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.
Nothing appears at all
Three causes, in the order worth checking:
  • The line is in the wrong file. It has to go in the file that defines the function, not one that calls it.
  • Notify starts before your framework. Move ensure dispersia_notify below ensure qb-core / es_extended / qbx_core.
  • Interception is switched off. If dispersia_lib is installed, check the four toggles in its settings panel.
Run /notify_test in game — it fires one notification through every framework it detected, which tells you immediately whether the resource itself is alive.
Syntax error / the file looks corrupted
Use WinSCP for FTP uploads. FileZilla can corrupt files in transfer, and a half-written Lua file fails with a syntax error that looks like a bug in the script. Re-upload with WinSCP before reporting anything.
The resource will not start
Almost always a renamed folder. The resource name is baked into the escrow build, so 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).
How do I download what I bought?
From the Cfx.re portal: portal.cfx.re/assets/granted-assets. Make sure you are signed in with the same Cfx.re account you used at checkout — assets are granted to that account, not to your email.
The asset is missing from my Keymaster
Contact Tebex directly — we have no control over asset grants, and Tebex can resend it to your portal: tebex.io/support-customer. The same address handles payment, invoice and refund questions.
Before you open a ticket
Restart the resource in game and check F8 (client) and the server console. If there is an error, send a screenshot of it — the full line, not a crop. Set 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 TICKET

API reference

Everything the script exposes. Nothing here requires the interception line — these work whether or not you patched your core.

CLIENT EXPORTS

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.

SERVER EXPORTS

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.

EVENTS

'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.

PAYLOAD

titleOptional heading. Also accepted as caption or header. If you pass only a title, it becomes the message.
messageThe 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.
durationMilliseconds. Also accepted as length, time or timeout. Clamped to 500–30000, default 4000.
providerLabel used for rate limiting, so one misbehaving resource cannot starve the others. Defaults to 'custom'.
id · priority · colorPassed through to the UI untouched.

TYPE ALIASES — ACCEPTED AND NORMALISED

primary · inform · informationinfo
oksuccess
danger · fail · failederror
warnwarning
cop · law · pdpolice
criminal · crewgang

CONFIG — config/main.lua

Config.DebugPrints every dispatch and interception decision to the client console. Leave false on a live server.
Config.SettingsCommandChat command that opens the player settings panel. Default 'notify' — change it if another resource already registers it.
Config.AccentAccent colour of the UI. Default '#8a43fb'.
Config.ColorsPer-type colours: info, success, warning, error, police, gang.
Config.CustomClientEventsCatalogue of third-party events to intercept. Each entry takes event, provider and a mode: 'payload', 'qb', 'esx' or 'ox'.

COMMANDS & LIMITS

/notifyPlayer settings: scale, position, sound, manual dismiss. Saved per player and survives reconnects.
/notify_testFires one notification through every framework the script detected.
Duplicate window750 ms. An identical notification inside that window is dropped.
Rate limit12 per 2 seconds, per provider, then slow mode. A runaway loop in someone else's resource cannot flood the screen.
On screen at once5. Anything beyond that queues.