Opening The Scoreboard#
Press the key set in Config.ScoreBoardKey (Z by default), registered through ox_lib so players can rebind it from FiveM's own key settings.
Option | Default | What it does |
|---|---|---|
|
| Key that opens the scoreboard |

Documentation
Opening The ScoreboardPress the key set in Config.ScoreBoardKey (Z by default), registered through ox_lib so players can rebind it from FiveM's own key settings
Press the key set in Config.ScoreBoardKey (Z by default), registered through ox_lib so players can rebind it from FiveM's own key settings.
Option | Default | What it does |
|---|---|---|
|
| Key that opens the scoreboard |
Config.CooldownTime
|
Anti-spam cooldown in seconds between openings |
|
|
|
|
| Native FiveM control when |
Closing: press Escape or the configured close key. The search field is exempt — typing "z" inside it will not close the window.
Two modes: compact (default) and expanded (Open Full Screen button).
┌───────────────┬──────────────────────────────────┬───────────────┐
│ HeistsPanel │ Header (logo · online · buttons)│ StatsPanel │
│ ProgressPanel │ PlayerPanel (search + table) │ JobsPanel │
│ [expanded] │ [always visible] │ [expanded] │
└───────────────┴──────────────────────────────────┴───────────────┘Panel | What it shows |
|---|---|
PlayerPanel | Search by name and sorting by ID, name, job, duty and ping |
StatsPanel | Online, capacity % and peak, with a count-up animation |
JobsPanel | Active jobs, with a bar proportional to the busiest one |
HeistsPanel | Heist cards with image, lock and required police |
ProgressPanel | Level, XP and tier per job |
Ping colors: under 60 green · under 120 yellow · under 200 orange · 200+ red.
Option | Default | What it does |
|---|---|---|
|
| Hides every player's name |
|
| Text shown when names are hidden |
|
|
|
| list | Jobs visible in the list — everything else falls back |
|
| Job shown when it isn't in that list |
|
| Duty status when no export determines it |
Config.PlayerJobs sets the label, the icon and an optional gradeExport (text appended after the label) for each job.
Option | Default | What it does |
|---|---|---|
|
| Jobs counted as police |
|
| If set, overrides the automatic count |
Each entry of Config.IllegalActions becomes a card in the left panel:
storerobbery = {
order = 1, -- position in the list
minimumPolice = 1, -- police needed to unlock it
label = "STORE ROBBERY", -- title in the UI
image = "store.png", -- file in web/dist/images/
description = "..." -- card text
},A heist appears unlocked when current police ≥ minimumPolice. Otherwise it renders with a lock and the notice POLICE OFFICERS REQUIRED: n.
The scoreboard only displays this — it does not enforce anything. Your heist scripts still need their own police checks.
Config.DisplayedJobs controls the on-duty count per profession:
truck_driver = {
order = 8,
label = "Truck Drivers",
onDutyExport = { resource = "qs-truckjob", fn = "getOnDutyCount" },
playerDutyExport = { resource = "qs-truckjob", fn = "isPlayerOnDuty" },
icon = "fa-solid fa-truck"
},Field | Value | Behaviour |
|---|---|---|
|
| Calls the export and uses its number as the count |
| Counts every online player with that job | |
|
| Calls the export per player → On/Off Duty badge |
| The player is always shown as Off Duty | |
| Uses |
Both calls are wrapped in pcall, so a missing export never breaks the scoreboard — it simply returns 0 / "off".
With Config.ShowJobLevels = true, the Job Progress panel shows the player's level and XP in the Quasar job resources.
Only resources that are actually started are queried, and the data is cached in memory — the callback returns only the stats of the player opening the scoreboard, never the whole server.
Config.UpdateJobExperienceTime (5 minutes) sets how often the cache reloads.
Job | Resource |
|---|---|
MINER |
|
GARBAGE COLLECTOR |
|
DOG WALKER |
|
NEWSPAPER DELIVERY |
|
TAXI DRIVER |
|
BUS DRIVER |
|
TRUCK DRIVER |
|
HUNTER |
|
TREASURE HUNTER |
|
FISHER |
|
LUMBERJACK |
|
LIFEGUARD |
|
The list is sorted by level descending, then alphabetically.
baseExperience and growthFactor come from Config.JobsProgress and must match the Config.LevelExperience of each job script — otherwise the bar will show incorrect percentages.
Level | Tier |
|---|---|
1–2 | RECRUIT |
3–4 | OFFICER |
5–7 | SERGEANT |
8–12 | CAPTAIN |
13+ | ELITE |
Config.Translations holds every text in the UI — interface labels (title, search, exit, dutyOn, dutyOff, peakPlayers) and the job names used by the progress panel.
Job names are matched through Config.JobKeyMap, which maps the internal uppercase key to its translation key:
Config.JobKeyMap = {
["MINER"] = "miner",
["GARBAGE COLLECTOR"] = "garbageCollector",
}To translate a job, edit its value in Config.Translations — for example miner = "Minero".
Config.DefaultConfigs is applied as CSS variables:
Key | What it changes |
|---|---|
| Main accent color |
| Titles and subtitles |
| Icon backgrounds |
| Header logo |
The background keys (background1, background2, bodyBackground) are sent but ignored by the current UI — backgrounds are handled in the panel stylesheets instead.
To change the logo, replace web/public/images/quasar_logo.png (and web/dist/images/ if you are not rebuilding).