Commands#
Interface registers its keys as FiveM key bindings, so every player can rebind them in Settings → Key Bindings → FiveM. The names of the editor, reset, report and settings commands — and the default keys of the editor and the chat — are set in /interfaceconfig → Commands and keys; the tables below use the defaults.
Players#
Command | Default key | Description |
|---|---|---|
| F9 | Opens the HUD editor. Absent when the HUD editor is switched off. |
| — | Puts every widget back in its default position. |
| B | Buckles or unbuckles the seatbelt. |
| X | Cancels the running progress bar, if it allows cancelling. |
| L | Cycles the chat: show when active → always visible → hidden. |
| — | Shows or hides the HUD — for screenshots and recordings. |
| — | Roleplay chat. See Usage for who reads each one. |
| — | Private message to one player. |
| — | Sends a report to every admin online. Switch it off if another resource owns |
| — | Redeems a Tebex purchase as a VIP tag. Needs |
Job channel commands | — | Whatever you create in /chatadmin → Job Channels. |
Staff and console#
Command | Where | Description |
|---|---|---|
| In game | Opens the server settings. Needs the |
| In game | Opens the chat admin panel. Framework admins. |
| In game | Admin message, visible to everyone. |
| Game · console | Gives a VIP tag: |
| Game · console | Takes the VIP tag away. |
| Game · console | Re-reads a tag from the database after you edited |
| F8 console | Prints why the minimap frame is shown or hidden right now. |
Debug only#
Registered only while Config.Debug = true in config/config.lua — and then available to everyone, which is why debug should be off on a live server.
Command | Description |
|---|---|
| Wipes your saved HUD; the first-time setup runs again on the next load. |
| A sample notification and a sample progress bar with props. |
| Starts and stops the orbiting camera. |
| Restores the camera and minimap if the editor was left half-open. |
Client Exports#
For drawing notifications and progress bars from your own scripts, hiding the HUD during a cutscene, or starting the Interface from a custom multicharacter.
AddNotify
Shows a notification in the player's chosen style. Every argument after the text is optional.
exports['qs-interface']:AddNotify(text, header, time, icon)
-- Example
exports['qs-interface']:AddNotify('Your car is ready.', 'Garage', 5000, 'fas fa-car')
-- header defaults to 'Notification', time to 5000 ms, icon to 'fas fa-inbox'The icon is any Font Awesome class. From the server, send the same notification with an event:
TriggerClientEvent('interface:notification', source, 'Your car is ready.', 'Garage', 5000, 'fas fa-car')ProgressBar
Runs a progress bar and waits for it. Returns true when it completes and false when it is cancelled or interrupted. progress is the same export under another name. The options follow ox_lib's, so most scripts port over unchanged.
local done = exports['qs-interface']:ProgressBar({
label = 'Repairing',
duration = 5000, -- ms
canCancel = true, -- X cancels it
useWhileDead = false, -- the allow* options default to false:
allowRagdoll = false, -- dying, ragdolling, falling, swimming
allowFalling = false, -- or being cuffed interrupts the bar
allowSwimming = false,
allowCuffed = false,
disable = { move = true, sprint = true, car = true, combat = true, mouse = false },
anim = { dict = 'mini@repair', clip = 'fixing_a_ped', flag = 49 },
-- or: anim = { scenario = 'WORLD_HUMAN_WELDING' },
prop = { -- one prop, or a list of them
model = 'prop_tool_spanner01',
bone = 60309,
pos = vec3(0.0, 0.0, 0.0),
rot = vec3(0.0, 0.0, 0.0),
},
})
if done then
-- finished
endProps are seen by every nearby player. While a bar runs, LocalPlayer.state.invBusy is true, which most inventories respect.
CancelProgress · ProgressActive
exports['qs-interface']:CancelProgress() -- true if a cancellable bar was stopped
exports['qs-interface']:ProgressActive() -- true while a bar is running
-- From anywhere (client or server), the same as pressing X:
TriggerEvent('interface:cancelProgress')ToggleHud
Shows or hides the status HUD, vehicle HUD, info displayer, minimap and compass. Notifications and progress bars keep working.
exports['qs-interface']:ToggleHud(false) -- hide, e.g. for a cutscene
exports['qs-interface']:ToggleHud(true) -- show againInitialize · HasHudConfigured
Initialize starts the Interface — the first-time setup or the HUD. It runs on its own on the framework's player-loaded event and with qs-multicharacter; call it from a multicharacter that spawns the player some other way.
exports['qs-interface']:Initialize()
-- Waits until the Interface knows, then returns true once the player
-- has finished the first-time setup:
local configured = exports['qs-interface']:HasHudConfigured()SetMapBorderVisible
Forces the minimap frame — and the 3D minimap — on or off, for a script that hides or shows the radar itself. nil hands control back.
exports['qs-interface']:SetMapBorderVisible(false)
exports['qs-interface']:SetMapBorderVisible(nil)RefreshMinimap
Applies the player's saved minimap shape again — circle, square or 3D. Interface already does it on its own after the player spawns and after the ESX, QBCore and Qbox player-loaded events; call it when another script has reset or moved the radar, for example after a cutscene, a custom spawn or a teleport.
exports['qs-interface']:RefreshMinimap()The first pass runs right away and two more follow a few seconds later while the HUD settles; a new call replaces one still running. Nothing happens while the player has the HUD editor open.
Client events
Events Interface fires that your scripts can listen to:
AddEventHandler('interface:vehicleEntered', function(vehicle) end)
AddEventHandler('interface:vehicleLeft', function() end)
AddEventHandler('interface:gameScreenReady', function() end) -- HUD on screen
AddEventHandler('seatbelt:client:ToggleSeatbelt', function(on) end)
AddEventHandler('qs-interface:settingsApplied', function() end) -- /interfaceconfig values changed (client and server)Server Exports#
For stores, bots and chat scripts that work alongside Interface.
refreshVip
Re-reads a VIP tag from chat_vip_tags and updates the badge immediately. Call it after your own INSERT, UPDATE or DELETE — tags are otherwise cached for up to an hour. Accepts a server ID or a license: identifier; returns true if an online player was reloaded.
exports['qs-interface']:refreshVip('license:1a2b3c...')
-- or, without depending on the export:
TriggerEvent('qs-interface:chatvip:refresh', 'license:1a2b3c...')getPlayerVipTag · getVipTiers
local tag = exports['qs-interface']:getPlayerVipTag(source)
-- nil, or { id, label, nameColor, tagColor, tagGradient, glowColor, animation }
local tiers = exports['qs-interface']:getVipTiers()
-- the five tiers, in orderisCommandEnabled · getChatAdminSettings
Read what staff set in the chat admin panel.
exports['qs-interface']:isCommandEnabled('ooc') -- me, do, ooc, anon, admin, report, dice, rps, pm
exports['qs-interface']:getChatAdminSettings() -- { commands, badwords, draw3d, jobchannels, categorytabs, ... }checkFloodProtection
Applies the chat's anti-spam rules to your own chat command. Returns false — and tells the player — when the message should be dropped.
RegisterCommand('twt', function(source, args)
if not exports['qs-interface']:checkFloodProtection(source) then return end
-- ...
end)Stress events
Compatible with the events qb-hud uses, so scripts written for it work unchanged. Sent from the client:
TriggerServerEvent('hud:server:GainStress', 5) -- needs stress switched on, skips jobs without stress
TriggerServerEvent('hud:server:RelieveStress', 10) -- always appliesqs-chat#
qs-chat keeps the standard FiveM chat API, so every script that already talks to the default chat works without changes.
-- client or server, the classic events
TriggerClientEvent('chat:addMessage', -1, { args = { 'SYSTEM', 'Restart in 5 minutes' } })
TriggerEvent('chat:addSuggestion', '/mycmd', 'What it does', { { name = 'id', help = 'Player ID' } })
TriggerEvent('chat:removeSuggestion', '/mycmd')
-- server exports
exports['qs-chat']:addMessage(target, message)
exports['qs-chat']:registerMessageHook(function(source, outMessage, hookRef) end)
exports['qs-chat']:registerMode({ name = 'police', displayName = 'Police', color = '#3b82f6', seObject = 'group.police', cb = function() end })A mode registered with registerMode becomes a chat tab for the players allowed its ace (seObject).



