What goes wrong most often, what it actually means, and what to do about it. Almost all of these are configuration, not faults — usually one list or one value in config/config.lua.
Installation and Opening#
The console repeats "You have renamed the script!" and the server hangs
The folder is not named qs-scoreboard. The script checks its own name on start and stops the server on purpose. Stop the server, rename the folder back to qs-scoreboard, fix the ensure line in server.cfg, and start again.
Nothing happens when I press Z
Work down the list:
ox_libmust start before Scoreboard — the key is registered through it.The player may have rebound it under Settings → Key Bindings → FiveM.
Another script — often an old scoreboard — may use the same key.
With
Config.ModifyKey = truethe key mapping is ignored and onlyConfig.NewKeyNumberopens it.Presses within
Config.CooldownTimeof the last one are ignored.
If none of these apply, open the F8 console and the server console — the next two entries cover the errors you may find there.
It never opens and the server console shows a nil value error
No framework was detected, so there is no bridge to read players from. es_extended, qb-core or qbx_core must start before Scoreboard. A core under another name must be added to the detection list — see Integrations.
It never opens and F8 shows an error from the scoreboard
A config entry is malformed. Every entry of Config.IllegalActions and Config.DisplayedJobs needs a numeric order, and minimumPolice must be a number, not text in quotes. Leave Config.CurrentPoliceExport as nil or a plain number.
I changed Config.ScoreBoardKey and players still use the old key
Correct behaviour of FiveM key mappings: the default only applies to players who have never had the binding. Everyone who joined before keeps their key, and can change it under Settings → Key Bindings → FiveM. For a key nobody can change, use Config.ModifyKey — see Keybinds and Exports.
It will not close with the key
While the search box has the focus, no key closes the window — click outside it, or press the ESC button. With Config.ModifyKey = true, Config.NewKey must match the key exactly as the interface sees it: "e", not "E" or 38. Escape always works.
Icons are missing or show as squares
The icon sets and fonts are loaded from public CDNs when the window opens; a firewall or filter on the player's connection that blocks them leaves blank icons. If only one icon is missing, check that its class exists in Font Awesome 6 Free.
A red box says "qs-scoreboard UI crashed"
The interface hit an error and shows it rather than a blank screen. One known cause is a Quasar job table where the player's experience is empty (NULL) — give that row a number. Otherwise, screenshot the whole box and include it in a ticket.
The Player List#
Everyone's job shows "Unknown"
Their job is not in Config.DisplayablePlayerJobs. Add the job's name exactly as the framework stores it — police, not Police. Anything not listed shows Config.DefaultJobName.
A job shows with a question-mark icon
The job is displayed but has no entry in Config.PlayerJobs. Add one with a label and an icon.
Every officer shows "Off"
The shipped config sets playerDutyExport = false for police and taxi, which always means Off. Set it to nil to use Config.DefaultDuty, or point it at your duty export.
Everyone with a job has the same rank text
gradeExport in Config.PlayerJobs is plain text appended to the label, not a lookup of each player's grade. Set it to nil to show the label alone.
Players see FiveM names instead of character names
Config.DisplayFivemName = true is the shipped default. Set it to false. If every name reads Config.HiddenName, Config.HideNames is on.
Capacity shows 1000
sv_maxclients is not set in server.cfg, so Config.MaxPlayers is used. Set either one to your real slot count.
Active Jobs and Heists#
A job always shows 0
Without an export, the count only sees jobs in Config.DisplayablePlayerJobs — and taxi, electrician, fisher and firefighter are not on that list in the shipped config. Add them, or give the job an onDutyExport. With an export, 0 means the call failed: check that the resource is started and that resource and fn are spelled exactly.
Heists never unlock
The police count is online players whose job is in both Config.PoliceJobNames and Config.DisplayablePlayerJobs — check both. Pacific needs 10 by default. And keep Config.CurrentPoliceExport at nil: a number there replaces the count.
The police count includes officers who are off shift
Correct behaviour. Officers are counted while they are online with a police job; the count does not ask whether they are on shift.
The heist description does not appear
The cards show the name, the status and the officer count. description is kept in the config for reference only.
Job Progress#
The Job Progress panel does not appear
It shows only in full screen, only with Config.ShowJobLevels = true, and only when the player has a row in at least one started Quasar job. A player who joined after the last refresh appears on the next one.
A level I just gained does not show
Levels are re-read every Config.UpdateJobExperienceTime minutes (5). Lower it for faster updates — but every refresh queries each started job for every online player, so on a busy server keep it at a few minutes.
The bar or the percentage is wrong
The job's baseExperience and growthFactor in Config.JobsProgress do not match Config.LevelExperience in that job's own config. Copy the two numbers across.
A Quasar job I run is missing
Only the twelve supported resources are read, and only under their original folder names — qs-fishingjob, not qs-fishing. The full list is in Installation.
Still stuck? Open a ticket and include a screenshot of the F8 console taken with the scoreboard open, the server console from the moment
qs-scoreboardstarts, and your framework and its version.



