Framework Setup·

ESX, QBCore and Qbox: Set Up Your Framework and Create Jobs

A practical FiveM starter guide: install your framework, create jobs and grades correctly, understand duty and boss access, and check that everything saves.

A working framework is the foundation of your FiveM server. Before adding garages, tablets or businesses, get character creation, the database and job assignment working. This guide covers a fresh installation and one small example job in ESX Legacy, QBCore or Qbox. Follow the section for your framework; installing all three together is not part of the setup.

Start with a clean installation

Prepare a Cfx.re account, a server registration key, a suitable FXServer artifact and a running MariaDB service. Use the database version supported by your chosen framework; Qbox explicitly requires MariaDB and does not support MySQL or XAMPP. On managed hosting, use the provider's server and txAdmin controls. See the official FiveM server setup guide and Qbox requirements.

  1. Open txAdmin and choose a fresh recipe deployment in a new server data directory.
  2. Select your framework's official recipe: ESX Legacy, QBCore or Qbox.
  3. Enter the server key and correct MariaDB connection details. Use a dedicated database account with access to this server's database.
  4. Run the recipe, review the generated configuration and start the server. Keep the recipe's dependencies and resource order.
  5. Join, create a character, reconnect and confirm that the character still loads before adding other resources.

Recipes download resources and run their installation SQL. Do not import a second full framework schema afterward or deploy a fresh recipe over an existing server. Back up both files and database before later changes. For framework-specific installation steps, follow ESX's installation guide, QBCore's Windows guide or Qbox's installation guide.

Understand what a job actually contains

Every job has an internal key, a display label and numbered grades. We use sky_example, with grades 0 and 1, throughout. Keep that key identical in the framework, job script and any integrations. A label such as “Example Company” is only the name players see.

FrameworkJob definitionsGrade keys in this guide
ESX LegacyMariaDB: jobs and job_gradesSQL values 0, 1
QBCoreqb-core/shared/jobs.luaStrings: ['0'], ['1']
Qboxqbx_core/shared/jobs.luaNumbers: [0], [1]

Registering a job creates its framework identity. Gameplay, garages, storage, boss menus and business accounts need their own compatible resources and configuration. A framework job is not a finished business. The locations above follow the ESX schema, QBCore jobs file and Qbox jobs file.

ESX Legacy: create the job in MariaDB

Open the database configured for this server, not another server's database. First check whether the example key already exists:

Check existing jobs
SELECT name FROM jobs WHERE name = 'sky_example';
SELECT grade FROM job_grades WHERE job_name = 'sky_example';

Only run the following inserts when both checks return no rows. If the job exists, inspect and edit its existing records instead of inserting duplicates.

Create the example job
INSERT INTO jobs (name, label)
VALUES ('sky_example', 'Example Company');

INSERT INTO job_grades
    (job_name, grade, name, label, salary, skin_male, skin_female)
VALUES
    ('sky_example', 0, 'employee', 'Employee', 100, '{}', '{}'),
    ('sky_example', 1, 'boss', 'Manager', 200, '{}', '{}');

job_name links each grade to the job. The grade column is the rank used for assignment; the row's automatic id is not the rank. A job without grades is ignored. Reload the job catalog through the server console:

Server console
refreshjobs

Current ESX Legacy starts oxmysql, then esx_lib, then es_extended; older tutorials may omit esx_lib. Keep the dependencies supplied by your recipe. See the current recipe configuration and job loading implementation.

For an esx_society integration, the internal grade name boss is recognized by its default boss configuration. The visible label “Manager” alone grants nothing. Society registration, accounts and dependency order remain separate setup steps. Follow the society documentation if your job resource uses it.

QBCore: add an entry to the jobs table

Open qb-core/shared/jobs.lua. Insert this inside the existing jobs table, alongside the other job entries and before its closing brace. Keep the existing table declaration and all existing jobs; this is an entry, not a replacement file.

qb-core/shared/jobs.lua
['sky_example'] = {
    label = 'Example Company',
    defaultDuty = false,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'Employee', payment = 100 },
        ['1'] = { name = 'Manager', payment = 200, isboss = true },
    },
},

Keep grade keys as strings, including grade zero. Check commas and braces around neighboring entries, save, then perform a planned full server restart so dependent resources load the same definitions. FiveM's refresh command rescans resources and manifests; it does not reload a running Lua jobs table. Do not create ESX-style jobs SQL rows for QBCore. Its job definitions live in Lua, while character data still uses the database.

isboss marks the manager grade; it does not grant framework-admin command permissions. A compatible management resource must still provide and configure the actual menu and its location.

Qbox: use its own jobs file and numeric grades

Open qbx_core/shared/jobs.lua and insert this inside the table returned by return { ... }, before the final closing brace. Preserve its other entries. Qbox uses numeric grade keys here; do not paste QBCore's string keys unchanged.

qbx_core/shared/jobs.lua
['sky_example'] = {
    label = 'Example Company',
    defaultDuty = false,
    offDutyPay = false,
    grades = {
        [0] = { name = 'Employee', payment = 100 },
        [1] = { name = 'Manager', payment = 200, isboss = true, bankAuth = true },
    },
},

Save and perform a planned full server restart. bankAuth is separate from isboss and is used by compatible banking integrations; neither flag creates an account or menu. Match your setup to the official Qbox job definitions.

Qbox includes multijob support. Its job limit and whether /setjob replaces or adds membership are configurable. Use its supported membership commands when managing several jobs; do not assume an external QBCore multijob resource is compatible. See Qbox commands and multijob configuration.

Assign, test and reconnect

Join with a test character and use an account with the required framework/ACE command permissions. A txAdmin login alone does not establish those permissions. If Qbox has requireOptIn enabled, use /optin before admin commands. Replace 1 below with your connected test character's current server ID; /job reports the job of the player entering it:

In-game chat
/setjob 1 sky_example 0
/job
/setjob 1 sky_example 1
/job

Check that both grades show the expected job and rank. The assignment syntax is documented for ESX, QBCore and Qbox; Qbox's conditional opt-in check is in its command implementation.

For QBCore and Qbox, this example starts off duty and disables off-duty pay. Use your installed job resource's duty action; there is no universal /duty command to assume. Login settings also affect whether saved duty or defaultDuty wins. Then reconnect and verify the saved job, grade and intended duty behavior.

Before opening the job to players, test its permissions with both grades. An employee should not access features reserved for management. Wait for your configured paycheck interval instead of expecting payment immediately after assignment; the example amounts are placeholders for your economy. If a check fails, read the first relevant console error and resolve it before adding another resource.

SymptomFirst check
Job cannot be assignedExact key, existing grade and loaded definitions
Command deniedFramework permissions and ACE configuration
Resource fails after a Lua editFirst console error, commas and braces
Correct job but no menuJob resource, configured location, grade and duty
Wrong paycheckGrade pay, duty rules and payroll/account configuration

Connect your Sky job afterward

Once framework assignment works, follow the Sky installation guide and configure your installed job resource with the same framework key and grades. Use Jobs Base shared features for the relevant shared settings. Only configure an off-duty job pair when your chosen Sky setup uses one, and create both jobs with every required grade.

Last checked: 25 October 2026. Sources above are the official framework documentation, maintained recipes and GitHub implementations. Check your installed version before applying examples from a newer release.