ScriptsAboutBlogToolsKnowledge BaseReviewsFAQBasketDocsSupport
Tutorials

How to Add a New Job to QBCore (Step-by-Step)

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 isboss flag 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

  1. Open qb-core/shared/jobs.lua.
  2. Add your job entry following the structure above, choosing a unique job name.
  3. Define grades โ€” at minimum a grade 0. Add more ranks as needed, and mark the top grade isboss = true if it should manage the job.
  4. Set payment values per grade (this is the on-duty paycheck amount).
  5. Save the file.
  6. 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 0

This 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.lua need 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.

See the Viper FiveM multijob script โ†’

Premium FiveM scripts for QBCore & ESX

Viper Development builds escrow-protected, dual-framework scripts that install clean and run without dragging your server down.

Keep reading

Related guides