INSTALLATION GUIDE

Installing Dispersia Hub

Quick install — the short version

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

What the hub does for you

No Dispersia script ships a config file. Every option for every script you own is changed here, in game, and applies to the whole server the moment you press Save.

WHO CAN OPEN IT

Anyone with the ACE dispersia.admin — or command, which a stock txAdmin server already gives its admin group. If /dispersia_hub does nothing, add this to server.cfg:

server.cfg
add_ace group.admin dispersia.admin allow

The check runs on the server for every open and every save. A modified client cannot open the menu or write a value.

Config filesDispersia Hub
Change a settingEdit Lua, restartClick, Save
See the result before saving—Live preview
Wrong value types or rangesScript errors at runtimeRejected on save
Who changed what, and when—Change log
Staff list for every scriptOne per scriptOne, shared
Missing dependenciesRead the consoleInstall check per script
New versionsCheck by handUpdate badges
ScriptsEvery installed Dispersia script, with its version, status, install check and live preview. Scripts you do not own yet show as More from Dispersia.
ConfigurationSettings grouped by topic. Changes are staged until you press Save; Discard drops them, Reset to default works per group or per script.
AccessThe staff list shared by every script — framework groups and individual players by license.
LogsEvery change with who made it, plus errors scripts reported this session.
UpdatesInstalled and latest version of the hub and every script.
SupportThe exact versions to paste into a ticket.

When something does not work

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

/dispersia_hub does nothing
Open F8. If it says access denied -- needs ACE "dispersia.admin", your account has neither dispersia.admin nor command. Add add_ace group.admin dispersia.admin allow to server.cfg and make sure you are in that group, for example add_principal identifier.license:xxxx group.admin. Restart the server.
I added a player in Access and they still cannot open the hub
That is expected. The Access tab is the staff list for scripts — STAFF chat, admin tools and the like. Opening the hub itself is gated by ACE only, so a list edited inside the hub can never lock you out of it.
A script I own is not in the list
  • It is not started. Check ensure in server.cfg and the console.
  • It is an older version that still ships a config.lua. Download the current one from Granted Assets.
  • It shows under More from Dispersia — then the hub does not see it running. Start order does not matter; a full restart fixes a half-started state.
“Server rejected the change” after Save
Every value is checked against the script’s own rules — type, range, allowed options, length. If one value in a batch fails, nothing in that batch is written, so a script never runs half-configured. The server console names the exact setting.
“Restart the server now” after saving
A few settings are read only once, when a script starts. They are saved, but take effect after a full server restart — not a resource restart. The hub stops and says so once, so it is not missed.
My settings were reset after updating from 1.2
Saved data moved from dispersia_lib/data/ to dispersia_lib/open/data/. Stop the server, copy your old *.json files into open/data/, start it again.
The server logo does not show
Put myLogo.png into dispersia_lib/open/data/ — it is picked up automatically. Or click the logo badge in the hub and enter a path: a file next to server.cfg, a full path, or @resource/path.
Syntax error / the file looks corrupted
Use WinSCP for FTP uploads. FileZilla can corrupt files in transfer, and a half-written file fails with an 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_lib has to stay exactly that — no version suffix, no copy marker. Also confirm the folder sits inside resources.
Where do I download it?
From the Cfx.re portal: portal.cfx.re/assets/granted-assets. It comes with every Dispersia script, and is free on its own. Sign 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.
Before you open a ticket
Check F8 (client) and the server console — every hub message starts with [dispersia_lib] or [Dispersia Hub]. Send a screenshot of the full line, not a crop, and the versions from the hub’s Support page.

Still stuck?Open a ticket in Discord. Include your framework, the console error, and what you already tried.

OPEN A TICKET

API reference

For server owners there is nothing to call — open the hub and configure. This part is for developers who read settings or framework data from their own code.

THE ONLY THING MOST SERVERS EVER NEED

Open the hub in game. It is also listed in Settings → Key Bindings → FiveM as Open Dispersia Hub, unbound by default.

in game chat or F8
/dispersia_hub
Full reference — exports, events, data files, limits

SETTINGS — SERVER EXPORTS

exports['dispersia_lib']:GetSettings(scriptId) Every effective value for that script — saved where the admin changed it, the default everywhere else.
exports['dispersia_lib']:GetSetting(scriptId, key) One effective value.
exports['dispersia_lib']:IsStaff(src) true if the player is in the hub’s staff list — a framework group or a license from the Access tab — or has the hub ACE.

FRAMEWORK & BRIDGE — BOTH SIDES

exports['dispersia_lib']:GetFramework() 'qbox', 'qbcore', 'esx' or 'none'. QBox wins when both qbx_core and its qb-core compatibility layer are running.
exports['dispersia_lib']:IsFrameworkReady() true once a framework has been detected.
exports['dispersia_lib']:GetFrameworkObject() The framework’s core object, or nil on standalone.
exports['dispersia_lib']:GetPlayerData(src?) Player data from whichever framework runs. src on the server side only.
exports['dispersia_lib']:IsPlayerLoaded(src?) Whether the character is fully loaded.
exports['dispersia_lib']:Notify(src?, message, type?) A notification through the framework’s own system. src on the server side only.

EVENTS — LOCAL

dispersia_lib:server:settingChangedServer. scriptId, key, value — fired after a save, so a script applies the change live.
dispersia_lib:client:settingChangedClient. Same arguments, on every player.
dispersia_lib:server:accessChangedServer. The staff list was saved.
dispersia_lib:scriptRegisteredServer. scriptId — a script registered or re-registered.

DATA — open/data/

settings.jsonSaved values, only those that differ from a default. Ships as {}.
access.jsonThe staff list from the Access tab.
audit.jsonChange history, the newest 300 entries.
seen.jsonWhich admin already saw which NEW badge.
hub.jsonThe server logo path set from the hub.
corrupt fileThe hub starts from defaults for that part, says so in the console, and leaves the file untouched for you to inspect.

COMMANDS & LIMITS

/dispersia_hubOpens the hub. Gated by ACE dispersia.admin or command, re-checked on the server for every request.
Text valuesUp to 4000 characters, or less if the script sets its own limit.
Errors in LogsThe newest 100 from this session.
Cost while closedNothing renders and no timers run. One client thread checks for Esc only while the hub is open.