Var FiveM
ScriptsBundlesSubscriptionsDocs
VAR
Var FiveM
ScriptsBundlesSubscriptionsDocs
Theme CustomizerAboutContact
Shop Now
GUIDE

~/guides/esx-vs-qbcore

ESX vs QBCore: Which FiveM Framework Should You Choose

-- frameworks · updated august 2026 · var fivem team
-- esx 1.14.0 · qb-core 1.3.0 · qbx_core 1.23.0

ESX and QBCore are the two frameworks almost every FiveM roleplay server is built on, they share an ancestor, and the comparison is usually argued with opinions instead of code. This guide reads the actual repositories, manifests and configs of es_extended, qb-core and qbx_core, then lays out what genuinely differs: architecture, player and money APIs, inventory, ecosystem size, learning curve, and what a migration really costs.

-- index

  1. 01Same ancestor, two paths
  2. 02Side by side
  3. 03Players, money and jobs
  4. 04Inventory and items
  5. 05Ecosystem and learning curve
  6. 06The Qbox case
  7. 07Migrating between them
  8. 08How to actually choose
  9. 09FAQ

Same ancestor, two different paths

These are not two independent projects. QBCore is licensed GPL-3.0 with a copyright line naming ESX (Jérémie N'gadi) alongside Joshua Eger, and the LICENSE file shipped in Qbox's qbx_core still opens with the words es_extended, ESX framework for FiveM. Every mainstream FiveM roleplay framework in 2026 traces back to the same GPL codebase. What separated them is structure, not origin.

ESX Legacy is distributed as a bundle. The esx_core repository ships a [core] folder containing 17 separate resources: es_extended itself plus esx_identity, esx_multicharacter, esx_skin, esx_menu_default, esx_menu_list, esx_menu_dialog, esx_context, esx_notify, esx_textui, esx_progressbar, esx_inventory, esx_lib, esx_loadingscreen, esx_chat_theme, skinchanger and cron. Each one is a swappable unit, which is why so many servers run half stock ESX and half community replacements.

QBCore takes the opposite position. qb-core is one resource, version 1.3.0, holding client, server, shared, an html folder and qbcore.sql. Jobs, gangs, vehicles, weapons, items and locations are all shared files inside that resource, and the surrounding qb-inventory, qb-clothing, qb-target family lives in sibling repositories under the same organisation. One core to read, one config.lua to learn, and a tighter coupling when you want to replace a piece.

Side by side

Every value below was read from the repositories and manifests in August 2026, not from forum folklore. Star counts are a weak proxy for adoption and are included only to show relative project scale on GitHub.

ESX LegacyQBCoreQbox
core resourcees_extended (in a [core] bundle)qb-core (single resource)qbx_core
version read1.14.01.3.01.23.0
first commit erarepo created May 2021repo created April 2021project started Sept 2022
licenseGPL-3.0 lineage, no LICENSE file in repoGPL-3.0GPL-3.0 (es_extended copyright header)
declared depsoxmysqloxmysqloxmysql, ox_lib, OneSync, server build 10731
money modelaccounts: money, bank, black_moneymoney types: cash, bank, crypto (extendable)QBCore model via bridge
get a playerESX.GetPlayerFromId(src)QBCore.Functions.GetPlayer(src)exports.qbx_core
add moneyxPlayer.addMoney(amount)Player.Functions.AddMoney(type, amount, reason)same as QBCore via bridge
server callbackESX.RegisterServerCallbackQBCore.Functions.CreateCallbackox_lib callbacks
job gradesjob_grades SQL table, grade intstring keys in shared/jobs.luanumbers, not strings
player keyusers.identifier (license)players.citizenidplayers.citizenid
inventory bridgeox_inventory (only bridge in core)qb-inventoryox_inventory required
github stars450735139

Players, money and jobs

This is where the two frameworks stop being interchangeable. On ESX you fetch a player with ESX.GetPlayerFromId(source) and you get an xPlayer object whose methods are lowercase camelCase: addMoney, removeMoney, getAccount, addAccountMoney, setJob, getJob, addInventoryItem, canCarryItem, setMeta and getMeta. Money is modelled as named accounts, and es_extended ships three by default in its shared config: money, bank and black_money, with new characters starting on a 50000 bank balance.

On QBCore you call QBCore.Functions.GetPlayer(source) and the methods are PascalCase under a Functions table: AddMoney, RemoveMoney, SetJob, SetGang, SetMetaData, HasItem. Money types are config-driven rather than fixed, declared as { cash = 500, bank = 5000, crypto = 0 } with a documented note that you can add your own, for example blackmoney, but never remove one once it exists in the database. AddMoney also takes a third argument, a reason string, and fires an economy log plus a QBCore:Server:OnMoneyChange event, which makes money auditing a first-class citizen rather than something you bolt on.

The database tells the same story. ESX keys its users table on the license identifier and spreads identity across real columns: firstname, lastname, dateofbirth, sex, height, plus job and job_grade, with grades defined in a separate job_grades table carrying a salary per grade. QBCore keys its players table on a citizenid and stores charinfo, job, gang, money and metadata as JSON blobs, with job grades declared in Lua under string keys such as ['0']. Neither schema is portable to the other, which is the real reason a framework switch is expensive.

CriterionESX LegacyQBCore
Player objectxPlayer, camelCase methods (addMoney, setJob)Player.Functions, PascalCase methods (AddMoney, SetJob)
Money modelFixed accounts: money, bank, black_moneyConfig-driven types: cash, bank, crypto, extendable
New character starts on50000 bankcash 500, bank 5000, crypto 0
Core logs every money changenoyes
Identity in the databaseReal columns: firstname, lastname, dateofbirth, sex, heightcharinfo stored as a JSON blob
Job gradesjob_grades table, grade int, salary per gradeString keys in shared/jobs.lua
Hunger, thirst and reputation held in the corenoyes
Server callbacksESX.RegisterServerCallbackQBCore.Functions.CreateCallback
The same eight decisions, answered differently. Nothing in the left column converts to the right one, which is why a framework switch is a rewrite and not a migration script.

QBCore keeps more character state inside the core than ESX does. Hunger and thirst decay rates, blood types and a reputation system living in player metadata are all in qb-core config and player code, while ESX leaves that to addon resources. Callbacks differ too: ESX exposes RegisterServerCallback, TriggerServerCallback and an await variant, QBCore exposes QBCore.Functions.CreateCallback and TriggerCallback. None of this is better or worse, but it does mean a script written against one core touches nothing the other core understands. If character identity is a big part of your server, Var-MultiChar is an example of a resource built to sit on either one, with the same slot logic wired to esx_skin, qb-clothing, fivem-appearance or illenium-appearance.

Var-Bank FiveM scriptVar-BankBanking with personal IBAN accounts, transfers, beneficiaries, 7-day analytics and society accounts through esx_addonaccount or qb-management, with the framework detected at startup.View the script

Inventory and items

Item definitions live in different places, and that single detail explains a lot of porting pain. QBCore declares its item list in a shared file inside the core resource, shared/items.lua, so items ship with the framework and are edited in Lua. ESX exposes ESX.GetItems and ESX.RefreshItems and keeps its catalog in the database, with the repo shipping a dedicated [SQL] folder. Adding an item is a Lua edit on one and a database row on the other.

On the inventory itself, ESX 1.14.0 now ships an esx_inventory resource inside [core], and es_extended has exactly one bridge in its server code: bridge/inventory/oxinventory.lua. In other words, ox_inventory is the only third-party inventory the ESX core integrates with natively, everything else runs through Config.CustomInventory and community glue. QBCore pairs with qb-inventory by default, while Qbox does not treat ox_inventory as optional at all and lists it as a required dependency in its README.

Ecosystem and learning curve

Ecosystem is the argument most people actually mean when they argue about frameworks. ESX is older in practice and its README points readers at a dedicated Cfx.re releases tag, claiming the framework is trusted by over 12,000 communities, a figure that is self-reported by the ESX project and worth treating as marketing rather than a census. The ESX documentation site makes similar claims about 10,000+ active servers. On GitHub the picture is more modest and closer between the two: 450 stars and 797 forks on esx_core against 735 stars and 981 forks on qb-core. Both catalogs are enormous, and neither one is a reason on its own to pick a side.

Learning curve favours QBCore for a first-time server owner, mostly because there is less to read. One core resource, one config.lua covering money, hunger, thirst and permissions, and shared files you can open in a text editor to see every job and item. ESX asks you to understand that the framework is a set of resources and that its data lives partly in SQL. Both install through txAdmin recipes in a few minutes, which is covered in how to make a FiveM server. For the resource layer on top, the shopping lists differ enough to be worth separate reads: best ESX scripts and best QBCore scripts go category by category on each side.

CriterionESX LegacyQBCore
GitHub stars450735
GitHub forks797981
Self-reported reach12,000+ communities, 10,000+ active serversNo comparable public figure
What you read to learn it17 resources in [core], plus the SQL folderOne resource, one config.lua, shared files
Where the item list livesDatabase, read through ESX.GetItemsshared/items.lua inside the core
Replacing a core pieceEach resource is a swappable unitTighter coupling inside one resource
Installs from a txAdmin recipeyesyes
Star and fork counts are a weak proxy for adoption, listed only to show relative project scale on GitHub. The rows underneath them are what you live with daily.

Maintenance activity is one signal you can check yourself instead of taking anyone's word for it. In August 2026, esx_core had been pushed to within the last day, qbx_core within the last three weeks, and the last commit on qb-core main was 17 June 2026. Open an issues tab and a commit history before you commit a year of development to a codebase.

The Qbox case

Qbox is the reason the ESX vs QBCore question is no longer a two-way choice. Started on 27 September 2022 as a QBCore fork, qbx_core is now at version 1.23.0 and its own documentation describes the project as refactored to improve code quality, enhance security, lower performance overhead and integrate with Overextended resources. Its manifest declares oxmysql, ox_lib, OneSync and FiveM server build 10731, and critically it ends with provide 'qb-core', so resources that ask the server for qb-core still resolve. A bridge/qb folder with client, server and shared layers does the translation.

The architectural break is that the global core object is gone. Qbox's conversion guide states plainly that the core object no longer exists and that data is reached through export functions and imported modules instead, with QBCore.Shared lookups replaced by exports.qbx_core equivalents. Job and gang grades become numbers rather than strings. Qbox claims 99 percent compatibility with existing QB scripts, and a December 2024 reply on the Cfx.re framework thread put the practical figure at around 95 percent of QBCore resources working through the bridge. The honest counterweight, from the same thread, is that Qbox has fewer ready-made resources than QBCore, and its GitHub footprint (139 stars) reflects a much smaller project.

Migrating between them

There are two very different migrations hiding behind the same word. QBCore to Qbox is supported and incremental: the bridge keeps old resources running while you replace calls one at a time, and the Qbox docs explicitly say both APIs can be used simultaneously so conversion can happen partially or over time. The documented failure cases are resources that read database tables directly, reach into qb-core files never meant to be used externally, or call core functions in invalid ways. Those break, and they break loudly.

QBCore to Qbox, the one supported path

  1. 01Install qbx_coreIts manifest declares oxmysql, ox_lib, OneSync and FiveM server build 10731, and the README also lists ox_inventory.
  2. 02Leave the qb bridge onThe manifest ends with provide 'qb-core' and a bridge/qb folder translates client, server and shared calls, so existing resources still resolve.
  3. 03Convert one resource at a timeBoth APIs work simultaneously, so QBCore.Shared lookups become exports.qbx_core when you reach them, not on migration day.
  4. 04Fix the documented breakersResources reading database tables directly, reaching into qb-core internals, or calling core functions invalidly. Job and gang grades also turn from strings into numbers.
Qbox claims 99 percent compatibility through the bridge, and a December 2024 reply on the Cfx.re thread put the practical figure near 95 percent.

ESX to QBCore, or the reverse, is not a bridge job. The player object, the money model, the job schema and the database layout all differ, so there is no shim that makes an xPlayer answer to Player.Functions.AddMoney. In practice a framework switch means rebuilding your resource layer and writing a data migration for characters, balances, vehicles and inventories. That cost is exactly why buying scripts that already speak both dialects is worth more than it looks on the day of purchase.

How to actually choose

Pick ESX if your developers already read ESX Lua, if you want a core made of parts you can replace individually, or if the specific community resources you have shortlisted are ESX first. Pick QBCore if you want the smallest core to learn, character state like hunger, thirst and reputation handled in the framework rather than in addons, and a first-party resource family under one organisation. Pick Qbox if you are starting fresh in 2026, you are already committed to the ox stack, and you would rather inherit a cleaner codebase than the largest catalog.

The short version

All three are defensible in 2026, so the framework is rarely the expensive part of the decision. What makes it expensive is a resource layer that hardcodes one of them, because that layer is what you rebuild the day you switch.

Whichever way you go, the framework is a decision you make once and pay for repeatedly. The way to keep that bill low is to avoid resources that hardcode a framework. Var scripts detect ESX, QBCore or standalone at startup and route money, jobs and inventory calls through the detected core, so the same purchase survives a migration. Var-Bank detects the society resource too, esx_addonaccount or qb-management, with no custom table to create, and Var-MultiChar works across four different skin managers for the same reason. Buy for the framework you run today, keep the option on the one you might run next year.

Frequently asked questions

Is ESX or QBCore better for a new FiveM server?

Neither is objectively better, they solve the same problem with different structures. ESX Legacy ships its core as a bundle of small resources you can swap individually, while QBCore ships one core resource with its state and item list inside it. Pick ESX if your team already reads Lua from the ESX ecosystem and you want the largest back catalog of community resources, pick QBCore if you want a smaller surface to learn and the qb-* resource family maintained under one org. The decision that actually matters is which one your developers can maintain a year from now.

Can I run ESX and QBCore on the same server?

No, not as a supported setup. Both frameworks define their own player object, their own money model and their own database schema, and both expect to be the single authority on who a player is. Loading es_extended and qb-core together means two sources of truth for balances and jobs, which desynchronises the moment a script writes to one and reads from the other. One framework per server is the only sane configuration.

What is Qbox and is it better than QBCore?

Qbox is a fork of QBCore started on 27 September 2022 that rebuilt the core around the Overextended stack. Its qbx_core manifest declares oxmysql, ox_lib, OneSync and FiveM server build 10731 as dependencies, and the README also lists ox_inventory. It is more modern and it removes the global core object in favour of exports, but it is a smaller project than QBCore on GitHub (139 stars against 735 at the time of writing) and community threads on the Cfx.re forum note it has fewer ready-made resources. Better depends on whether you value the newer codebase more than the larger catalog.

Do ESX scripts work on a QBCore server?

Not by default. An ESX script calls ESX.GetPlayerFromId and xPlayer methods like addMoney or setJob, a QBCore script calls QBCore.Functions.GetPlayer and Player.Functions.AddMoney, and the two APIs do not overlap. A script only runs on both if the developer wrote support for both, usually by detecting the framework at startup and routing through an adapter layer. Var scripts do exactly that, which is why the same purchase covers a later framework switch.

How hard is it to migrate from QBCore to Qbox?

Qbox is the one migration path in this comparison that is officially supported. qbx_core ships a bridge folder for qb resources and its manifest declares provide 'qb-core', so resources that ask for qb-core still resolve. The Qbox documentation claims 99 percent compatibility with existing QB scripts, and its FAQ lists the exceptions: resources that read database tables directly, that reach into qb-core files not meant to be used externally, or that call existing functions in invalid ways. Job and gang grades also change from strings to numbers.

Which framework performs better, ESX or QBCore?

There is no credible public benchmark comparing the two cores under identical load, so treat any exact millisecond claim you read as marketing. In practice the core resource is rarely what costs you frames: the resource layer on top of it is. Measure your own server with resmon, look at what idles above roughly 0.10 ms while nothing is happening, and fix that before blaming the framework.

-- var-fivem.com

Scripts that run on both

Every Var script detects ESX, QBCore or standalone at startup, so a framework switch does not cost you your library. Escrow, Partially Open and Open Source tiers, lifetime updates on all three.

Browse the shopTry it live

Related: Best ESX scripts · Best QBCore scripts

Keep reading

  • esxBest ESX Scripts for Your FiveM ServerA curated tour of ESX-compatible scripts by category: economy, jobs, crime, appearance and minigames, with what to look for in each.read
  • qbcoreBest QBCore Scripts for Your FiveM ServerQBCore and Qbox compatible scripts by category, how QBCore compatibility works, and what separates premium resources from free ones.read
  • setupHow to Make a FiveM Server in 2026From zero to first spawn in about 20 minutes: the free license key, txAdmin setup with the official screenshots, ESX vs QBCore recipes, server.cfg explained line by line, real hosting costs and the launch checklist.read
VAR
Var FiveM

Premium FiveM scripts. Low resmon, high quality. Built for ESX, QBCore & Standalone.

28scripts
1,500+sales

Scripts

  • Marketplace
  • Bundles
  • Subscriptions
  • Theme Customizer

Most Popular

  • Supermarket Simulator
  • FiveM Casino Script
  • FiveM Coin Shop
  • FiveM Emote Menu
  • FiveM Paintball Script
  • FiveM Clothing Shop Script
  • FiveM Interaction Script
  • FiveM Character Creator

Resources

  • Free Scripts
  • Guides
  • Documentation
  • Support

Company

  • About
  • Contact
  • Discord

Legal

  • Terms
  • Privacy
  • Refunds

© 2026 Var FiveM. All sales final.

Payments byTebex