QBCore Backend Update — Performance & Stability
· QBCore Team · 2 min read

QBcore just pushed a major under-the-hood update to the core. No flashy new mechanics this time — this one is focused on memory usage, network traffic, and long-term stability so the city runs smoother for everyone.
Here’s what changed:
- Lower Memory Footprint: The player system has been rebuilt to share method tables across players instead of duplicating them per-instance. Less memory used per connected player means more headroom during peak hours.
- Faster Player Lookups: Added a citizen ID index so lookups are now instant instead of scanning through every connected player. Background systems like billing, jobs, and database checks benefit directly.
- Lighter Network Traffic: Survival stats (hunger, thirst, etc.) are now bundled more efficiently and protected with server-side cooldowns. Fewer wasted packets, and a harder target for abuse.
- Lighter Client Performance: The notification system has been rewritten to be much more lightweight on your PC.
- Stability Fixes: Patched several memory leaks and an infinite loop that could trigger during vehicle spawning.
- Unified Developer Events: Scattered update events have been consolidated into two clean ones:
QBCore:Client:OnPlayerUpdatedQBCore:Server:OnPlayerUpdated
Code Examples
-- Getting a player
local Player = exports['qb-core']:GetPlayer(source) -- Online, by server ID
local Player = exports['qb-core']:GetPlayerByCitizenId(cid) -- Online, by citizen ID
-- Calling functions
Player.AddMoney('cash', 500, 'reason')
Player.RemoveMoney('bank', 200, 'reason')
Player.SetJob('police', 2)
Player.SetMetaData('hunger', 100)
Player.Save()
-- Old style still works:
Player.Functions.AddMoney('cash', 500, 'reason')
-- Listening for changes server-side
AddEventHandler('QBCore:Server:OnPlayerUpdated', function(source, key, value)
if key == 'job' then ... end -- Full job table
if key == 'gang' then ... end -- Full gang table
if key == 'money' then ... end -- Full money table
if key == 'metadata' then ... end -- Full metadata table
if key == 'all' then ... end -- Full PlayerData, fires on spawn
end)
-- Listening for changes client-side
AddEventHandler('QBCore:Client:OnPlayerUpdated', function(key, value)
if key == 'job' then ... end
if key == 'gang' then ... end
if key == 'money' then ... end
if key == 'metadata' then ... end
if key == 'all' then ... end -- Full PlayerData on spawn
end)
This is groundwork — the kind of update you notice by not noticing hitches and rubber-banding. Get out there and enjoy the smoother city!
Written by
QBCore Team
The QBCore Team builds, tests and supports every script we sell at QBCore Shop. Our guides come straight from running and troubleshooting real FiveM roleplay servers on QBCore, ESX and Qbox — so the steps are the ones we actually use.
More about us →
