
Create Your First QBCore Job (2026)
This walkthrough builds a simple courier job: players clock on, get paid per delivery, and only on-duty couriers can start runs. It shows the pattern you will reuse for every job.
Step 1: Define the job
Add it to your shared jobs definition (qb-core/shared/jobs.lua or your override):
['courier'] = {
label = 'Courier',
defaultDuty = false,
grades = {
['0'] = { name = 'Trainee', payment = 25 },
['1'] = { name = 'Driver', payment = 50 },
['2'] = { name = 'Lead', payment = 90, isboss = true },
},
},Step 2: Create the resource
Make resources/[local]/courierjob with an fxmanifest.lua, a client.lua and a server.lua. Ensure it in your cfg.
Step 3: Toggle duty (client)
local QBCore = exports['qb-core']:GetCoreObject()
RegisterNetEvent('courier:toggleDuty', function()
TriggerServerEvent('QBCore:ToggleDuty')
end)Step 4: Pay on delivery (server) — validate everything
Never trust the client with money. Verify job, grade and duty on the server:
local QBCore = exports['qb-core']:GetCoreObject()
RegisterNetEvent('courier:completeDelivery', function()
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
if Player.PlayerData.job.name ~= 'courier' then return end
if not Player.PlayerData.job.onduty then return end
local pay = Player.PlayerData.job.grade.level >= 2 and 90 or 50
Player.Functions.AddMoney('bank', pay, 'courier-delivery')
end)Step 5: Gate boss actions by grade
Use isboss grades for management menus (hiring, firing, grades). Check grade.isboss on the server before allowing them.
Best practices
- All payments and state changes are decided server-side.
- Keep client code to UI, blips and prompts.
- Reuse
QBCore:ToggleDutyinstead of tracking duty yourself.
What You Will Learn
This Development tutorial focuses on practical outcomes for FiveM scripting and QB Core development. By following the steps in Create Your First QBCore Job (2026), you will understand how the topic fits into a real server workflow and how to apply it safely.
You will learn the reasoning behind the implementation choices (especially for intermediate topics), so you can make the same decisions again for future resources. The goal is to reduce trial-and-error, improve consistency across updates, and help your team ship changes without breaking gameplay.
- Identify the correct use case for this approach in a QB Core or FiveM environment
- Implement the key concepts with an install-ready workflow
- Validate compatibility and avoid common setup conflicts
- Apply best practices to keep your server stable over time
Why This Matters
When scripts, configs, and documentation are aligned with your server architecture, you reduce maintenance overhead. That means fewer upgrade surprises, faster onboarding for new admins, and a more reliable experience for your players.
FAQ
Do I need advanced knowledge? This tutorial is matched to a Intermediate difficulty level, and the steps are designed to build confidence without assuming everything is already known.
Will this work on my QB Core server? The tutorial emphasizes compatibility and integration checks so you can confirm requirements before installing.
How do I apply this to my next update? Use the same workflow and validation approach described here, then adapt the final details to your server’s setup.