Convert FiveM scripts between QBCore, ESX and Qbox
Moving to another framework does not mean rewriting every resource by hand. Attach a resource written for QBCore, ESX or Qbox, choose the target, and get the same script on the new framework's API.
What the converter does
The converter lives in ScriptForge's Convert mode. Attach the resource as a .zip — or paste a single file — pick the framework it is written for and the one you want, and see the price before you start. A single file and a whole resource are priced differently, but a whole resource is one charge however many files it has.
A whole resource is converted in one pass, so the files stay consistent with each other: event names still match between client and server, fxmanifest.lua dependencies and imports switch to the new framework, every config key another file reads is still defined, and money and item calls change the same way in every file.
A port, not a rewrite
The goal is the same script on another framework, not a new one. Every conversion is given the same rules. They are instructions to the model, not a promise, so compare the result with your original:
- It is told to keep every check the source makes — job, grade, on-duty, money and items, distance, cooldowns, input validation — and to add no new gameplay restriction.
- Notifications go to the same players with the same text, and keep their type (QBCore primary = ESX info = Qbox inform).
- An on-duty check is never dropped: QBCore's job.onduty becomes job.onDuty ~= false on ESX.
- The resource's own event names stay as they are; only framework events change, such as QBCore:Client:OnPlayerLoaded to esx:playerLoaded.
- SQL files pass through unchanged. Job grade definitions switch between string keys (QBCore), number keys (Qbox) and ESX's job_grades table.
Your files stay yours
A zip is unpacked in your browser and only the source files are sent for conversion. Images, sounds and fonts never leave your computer; when the manifest lists them, the README names them under "Files From Your Original Resource" so you copy them into the converted folder. The converted code then goes through the same automatic checks as a new build — Lua 5.4 compile, FiveM security rules, manifest and NUI wiring — with one correction pass when something fails, and a conversion that does not come out complete is not charged.
Example: what changes in a purchase handler
A Convert-mode request: attach the zip, pick From ESX and To QBCore, and add a note if you like:
“My server uses ox_target too, keep the counter on it.”
Part of a resource you might convert — the start of an ESX purchase handler that ScriptForge wrote:
ESX.RegisterServerCallback('coffee_counter:buy', function(source, cb)
local src = source
local xPlayer = ESX.GetPlayerFromId(src)
if not xPlayer then return cb({ ok = false, code = 'failed' }) end
-- … cooldown lines skipped …
if not nearCounter(src) then code = 'too_far'; break end
local price = Config.Price
local cash = xPlayer.getMoney()
if cash < price then code = 'not_enough_cash'; break end
if not xPlayer.canCarryItem(Config.Item, 1) then code = 'cannot_carry'; break end
-- … the rest of the purchase skipped …On QBCore and Qbox the handler keeps its distance check, its cooldown and its order of checks; the framework calls change. The table below lists the equivalents conversions use, checked against each framework's source.
The same operation in each framework
| Operation | QBCore | ESX | Qbox |
|---|---|---|---|
| Framework object | exports['qb-core']:GetCoreObject() | exports['es_extended']:getSharedObject() | none — exports.qbx_core |
| Player on the server | QBCore.Functions.GetPlayer(src) | ESX.GetPlayerFromId(src) | exports.qbx_core:GetPlayer(src) |
| Cash account | 'cash' | 'money' | 'cash' |
| Take cash | Player.Functions.RemoveMoney('cash', n) | xPlayer.removeAccountMoney('money', n) | exports.qbx_core:RemoveMoney(src, 'cash', n) |
| Give an item | exports['qb-inventory']:AddItem(src, item, n) | xPlayer.addInventoryItem(item, n) | exports.ox_inventory:AddItem(src, item, n) |
| Server callback | QBCore.Functions.CreateCallback | ESX.RegisterServerCallback | lib.callback.register |
| On duty | job.onduty | job.onDuty ~= false | job.onduty |
| Grade keys in job definitions | strings ('0') | job_grades table | numbers (0) |
Frequently asked questions
Which conversions are supported?
Any direction between QBCore, ESX and Qbox: QBCore to ESX, ESX to Qbox, Qbox to QBCore and so on.
Do I have to convert the whole resource?
No. You can paste one file, which is the cheaper option, or attach the whole resource as a zip. A whole resource keeps its files consistent with each other, so it is the better choice when several files call the framework.
Will my database tables be converted?
.sql files are passed through unchanged. If the Lua queries the framework's own tables — ESX's users table or QBCore's players table, for example — read those queries in the result before you run it.
Can I tell the converter about my server?
Yes. Add a note with the conversion — the inventory or target resource you use, a resource name to keep — and it is passed along with the code.
What if the conversion fails?
Then it costs nothing. The price is shown before you convert, and credits are only kept for a complete, delivered conversion.
Start with one file, free
Verify your email for 1 free credit and convert a single file with it; a whole resource is one charge, however many files it has. Open ScriptForge in Convert mode, attach your resource and pick the target framework.
Convert a scriptNot ready to start yet?
Leave your email. We only send updates if you tick the box below.