Adding a custom job is one of the most common things you'll do on a QBCore server โ whether it's a new business, a faction, or a roleplay role. This guide walks through the core process. Details vary by QBCore version, so always cross-check your version's structure.
Where jobs are defined
In QBCore, jobs are defined in a shared file โ traditionally qb-core/shared/jobs.lua. This file lists every job on your server, each with its grades, labels, and pay. Adding a job means adding an entry here (and, depending on your setup, making sure related scripts know about it).
Anatomy of a job
A job entry defines:
- A job name (the internal key, lowercase, no spaces โ e.g.
mechanic) - A label (the display name โ e.g. "Mechanic")
- Grades โ the ranks within the job, each with a name, payment, and sometimes an
isbossflag for management
Here's the shape of a typical job definition:
['mechanic'] = {
label = 'Mechanic',
defaultDuty = true,
grades = {
['0'] = { name = 'Trainee', payment = 50 },
['1'] = { name = 'Mechanic', payment = 75 },
['2'] = { name = 'Senior', payment = 100 },
['3'] = { name = 'Boss', payment = 150, isboss = true },
},
},Step-by-step
- Open
qb-core/shared/jobs.lua. - Add your job entry following the structure above, choosing a unique job name.
- Define grades โ at minimum a grade 0. Add more ranks as needed, and mark the top grade
isboss = trueif it should manage the job. - Set payment values per grade (this is the on-duty paycheck amount).
- Save the file.
- Restart
qb-core(and your server, to be safe) so the change loads.
Giving a player the job
Once the job exists, assign it to a player. As an admin, you can typically use a command like:
/setjob [player id] mechanic 0This sets the player to the mechanic job at grade 0. (Command availability depends on your admin setup.) Players can also be given jobs through job-center scripts, boss menus, or a multijob system.
Making the job do something
Defining the job is step one โ now it needs purpose. Depending on your goal you might add:
- A job menu / boss menu for management and hiring
- Job-specific scripts (a mechanic job pairs with a vehicle repair/tuning script, for example)
- Duty points, uniforms, vehicles, and locations
- A multijob system so players can hold this alongside other jobs and switch cleanly
That last one matters a lot for player flexibility. A multijob system lets players actually use the jobs you create without being locked to one.
Common mistakes
- Duplicate or mistyped job names โ the internal name must be unique and match everywhere you reference it.
- Forgetting to restart โ changes to
jobs.luaneed a restart to take effect. - Grade mismatches โ if another script expects grade names/numbers that don't match your definition, it'll misbehave.
- Editing the wrong file for your QBCore version โ structures shift between versions.
Next steps
Once you're comfortable adding jobs, the natural next step is letting players manage multiple jobs smoothly. Our Viper Multi-Job script for QBCore and ESX does exactly that โ one-click switching, grade and salary display, duty toggling, and server-side validation so players only access jobs they own.