Before You Begin#
Before installing Interface, make sure your server meets the minimum requirements. Three things are mandatory — the database driver, ox_lib and a framework; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
| Required | Server settings, chat admin settings, VIP tags and (on ESX) stress live in your database. |
| Required | Callbacks, caching and module loading. |
| Required | ESX or QBCore. Qbox works through its |
| Included | Ships in the same download. It replaces the default FiveM |
| ESX only | Feeds hunger and thirst on ESX. QBCore reads them from player metadata. |
| Optional | Voice indicator and voice range on the HUD. |
| Optional | Fuel gauge on the vehicle HUD. Without one, the game's own fuel level is read. |
| Optional | Attaches a screenshot to Discord logs, together with a Fivemanage token. |
Each third-party layer is detected when the resource starts, by looking for a started resource with a known name:
Layer | Looks for | Fallback |
|---|---|---|
Framework | es_extended · qb-core | None — the resource stops with an error. |
Voice | pma-voice · saltychat |
|
Fuel | qs-fuelstations · lc_fuel |
|
Multicharacter | qs-multicharacter | The HUD starts on your framework's player-loaded event. |
Every optional integration degrades silently. If a resource is missing, that part falls back to the game's own data — it never stops the HUD from loading.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Interface#
After purchasing Interface, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Interface.
After extracting the download, you should have the following folders:
[interface]/
├── qs-chat/ -- the chat engine (replaces the default 'chat')
└── qs-interface/
├── config/config.lua -- debug and resource detection, read before start
├── server/webhooks.lua -- Discord log channels
├── custom/esx|qb/ -- framework bridges (open source)
├── client/custom/ -- fuel and voice bridges (open source)
├── database/ -- the SQL to import
├── locales/ -- 41 languages
├── stream/ -- minimap textures
└── web/ -- the interface itself, ready to runThe folders must be named
qs-interfaceandqs-chat. The chat talks to the Interface through those names, and a renamedqs-interfacedeliberately freezes the server console with a warning. Theweb/folder ships ready to run — leave it as it is.
Installing the Resource#
Move both folders into your server's resources directory. They can live anywhere inside it — a category folder in brackets is the usual choice:
resources/
└── [qs]/
└── [interface]/
├── qs-chat/
└── qs-interface/Then retire the default chat, which ships with the server artifacts:
Delete the default chat resource
Open your server artifacts folder, go to
citizen/system_resourcesand remove thechatfolder. Do it again whenever you update the artifacts — they bring it back.Replace it in server.cfg
Find
ensure chatand delete it.qs-chattakes its place in the start order below.
Now make sure every dependency — and everything Interface should detect — starts before it, and give staff access to the settings panel:
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended # or: ensure qb-core
# Optional, detected when present
ensure pma-voice # or saltychat
ensure lc_fuel # or qs-fuelstations
ensure qs-multicharacter
# Interface
ensure qs-interface
ensure qs-chat
# Who may open /interfaceconfig
add_ace group.admin command.interfaceconfig allowThe loading order matters. Detection only sees resources that are already started, so a voice or fuel script that starts after Interface is not found and that part runs standalone. qs-chat goes last: it reads its settings from the Interface.
The Database#
Import the SQL in qs-interface/database/ with HeidiSQL or any MariaDB/MySQL client before the first start. Every framework needs database.sql; ESX also needs esx.sql, which adds the stress column to users.
-- esx.sql
ALTER TABLE `users`
ADD IF NOT EXISTS `stress` INT(11) NOT NULL DEFAULT '0';
-- database.sql
CREATE TABLE IF NOT EXISTS `chat_admin_settings` (
`key` VARCHAR(50) NOT NULL,
`value` LONGTEXT NOT NULL,
PRIMARY KEY (`key`)
);
CREATE TABLE IF NOT EXISTS `chat_vip_tags` (
`license` VARCHAR(100) NOT NULL,
`tag_id` VARCHAR(50) NOT NULL,
`expires_at` DATETIME DEFAULT NULL,
`transaction_id` VARCHAR(100) DEFAULT NULL,
`granted_by` VARCHAR(100) DEFAULT NULL,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`license`)
);
CREATE TABLE IF NOT EXISTS `qs_interface_settings` (
`skey` VARCHAR(64) NOT NULL,
`value` LONGTEXT DEFAULT NULL,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`skey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;Stress is kept in the player's metadata, so only database.sql is needed.
-- database.sql
CREATE TABLE IF NOT EXISTS `chat_admin_settings` (
`key` VARCHAR(50) NOT NULL,
`value` LONGTEXT NOT NULL,
PRIMARY KEY (`key`)
);
CREATE TABLE IF NOT EXISTS `chat_vip_tags` (
`license` VARCHAR(100) NOT NULL,
`tag_id` VARCHAR(50) NOT NULL,
`expires_at` DATETIME DEFAULT NULL,
`transaction_id` VARCHAR(100) DEFAULT NULL,
`granted_by` VARCHAR(100) DEFAULT NULL,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`license`)
);
CREATE TABLE IF NOT EXISTS `qs_interface_settings` (
`skey` VARCHAR(64) NOT NULL,
`value` LONGTEXT DEFAULT NULL,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`skey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;Table | Holds |
|---|---|
| One row per setting changed in |
| Everything changed in |
| One VIP chat tag per Rockstar license, with its expiry, who granted it and the Tebex transaction that paid for it. |
| ESX only — each character's stress, saved every 15 seconds while it changes and on logout. |
Admin Access#
Two different rules decide who is staff, because the two panels do different jobs:
What | Who gets in |
|---|---|
| Players allowed the ace |
| Your framework's admins — see the tabs below. |
# server.cfg — the settings panel
add_principal identifier.license:xxxxxxxx group.admin
add_ace group.admin command.interfaceconfig allowChat staff are players in the admin or superadmin group.
# in the server console
setgroup <id> adminChat staff are players with the god or admin permission, or allowed the command ace.
add_ace group.admin command allowThe chat rule lives in playerIsAdmin inside custom/esx/server.lua or custom/qb/server.lua — change it there if your staff are identified another way. When someone without the ace tries /interfaceconfig, the server console prints the exact line to add.
Configuring the Resource#
Almost nothing is configured in files. Language, money format, HUD options, the 3D minimap, chat rules, anti-spam, stress, colours, music, command names and keys are all edited in game with /interfaceconfig, saved to the database and applied to every player at once — updating the resource never wipes them. Chat filters, 3D bubbles and job channels live in /chatadmin. Both panels are covered in Usage.
File | Contents |
|---|---|
| Only what must be known before the server starts: debug output, and the names of your framework, voice, fuel and multicharacter resources. |
| A Discord webhook per chat channel, admin actions and VIP actions, plus the Fivemanage token for screenshots. |
| Framework bridges: money, job, status, stress, names and the chat admin check. |
| Fuel and voice bridges, one small file each. |
| Every text the players read. |
-- config/config.lua
Config.Debug = true -- extra console output; set to false on a live server
local frameworks = {
['es_extended'] = 'esx',
['qb-core'] = 'qb',
}
-- voiceChats, fuels and multicharacters follow the same pattern
Config.Debugships on. Besides printing to the console, it registers test commands every player can run (/notify,/progresstest,/cinematic…). Turn it off before opening the server.
The language can also be set for every Quasar resource at once in server.cfg — it is the default until someone picks another one in /interfaceconfig:
setr qs:locale "es"Verifying the Installation#
After completing the installation, restart your server and look for this line in the console — it names the framework that was detected:
[INFO] Successfully loaded the framework. esxesx or qb is correct. An error mentioning custom.standalone means no framework was running when Interface started — check the start order.
Then join your server and work through the first loop:
Finish the first-time setup
After choosing a character, a welcome screen with music opens and walks you through your HUD, one choice per screen. Finish it and the HUD appears.
Get in a car
The minimap and the vehicle HUD appear. Press
Bto buckle the seatbelt andF9to open the HUD editor — under Car Hud → Minimap Shape, try 3D.Open the settings panel
/interfaceconfigopens the server settings — pick your language and money format first. From there, Usage covers every part of the HUD and the chat.
Nothing needs a file edit from here on. Server settings live in the database; each player's HUD layout is saved on their own PC. Both survive updates of the resource.



