Getting Started with QB-Core - QBCore Guide for FiveM
Introduction
This tutorial turns Getting Started with QB-Core into a clean, developer-friendly guide for QBCore/FiveM. You will follow a step-by-step flow, copy the relevant code patterns, and learn the “why” behind the setup.
Requirements
- A QBCore-based FiveM server environment
- MySQL/MariaDB access (or a local stack like XAMPP)
- Basic config editing comfort (
server.cfg, resource manifests) - Optional: a code editor with Lua/FiveM helpers (VS Code recommended)
Step-by-Step Guide
Step 1: Prerequisites
In this step, you will apply the prerequisites concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 2: Steps
In this step, you will apply the steps concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 3: Verification
In this step, you will apply the verification concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 4: See also
In this step, you will apply the see also concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Code Example
-- Example: QBCore callback pattern
local QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.CreateCallback('tutorials:getPlayerJob', function(source, cb)
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return cb(nil) end
cb({
job = Player.PlayerData.job.name,
grade = Player.PlayerData.job.grade and Player.PlayerData.job.grade.level or 0,
})
end)Tips & Best Practices
- Keep authority on the server: validate inputs before money/database operations.
- Start with one resource/module at a time, then refactor after you verify it works.
- Use callbacks for request/response flows and events for push/UX updates.
- When you run loops, avoid freezes: always yield with Wait() (client/server) and cache hot values.