QBCore Shop

QBCore Backend Update — Performance & Stability

· QBCore Team · 2 min read

QBCore Backend Update

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:OnPlayerUpdated
  • QBCore: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!

ShareXRedditFacebook

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 →

More from the blog