Skip to Content
Independent QBCore community documentation

Build Amazing 🚔 Roleplay Servers 🎮 with QBCore

Practical, source-linked guides for installing, understanding, and extending the open-source QBCore framework for FiveM.

Terminal
$git clone https://github.com/qbcore-framework/qb-core.git
Player Management
Modular Design
Source-Linked Updates
Source
GitHub repositories
Docs
Community explanations
Guides
Tested workflows

See QBCore in Action

Watch how easy it is to create powerful roleplay features with QBCore's intuitive API and modular architecture.

qb-example/server/main.lua
1
-- Initialize QBCore Framework
2
local QBCore = exports["qb-core"]:GetCoreObject({ "Functions" })
4
-- Treat client events as untrusted requests
5
RegisterNetEvent("qb-example:server:requestStatus", function()
6
local src = source
7
local Player = QBCore.Functions.GetPlayer(src)
8
if not Player then return end
10
TriggerClientEvent("QBCore:Notify", src,
11
"Server request accepted", "success")
12
end)

Simple Event System

Network events cross a trust boundary. Validate the current player and every action input on the server.

Player Management

Read current player state through the framework, then revalidate it before applying a sensitive change.

Modular Architecture

Use explicit exports between resources and verify their signatures at the commit your server deploys.

Real-time Notifications

Send presentation-only notifications after the server has accepted or rejected a request.

Everything You Need to Build Epic Servers 🎯

Explore framework surfaces with examples that call out source, trust boundaries, and verification work.

Player Management

Read current player state and revalidate it before server-side changes

local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
local job = Player.PlayerData.job

Database Integration

Review schema and queries at the same commit before applying database changes

local result = MySQL.scalar.await(
    'SELECT 1'
)

Event System

Network events cross a trust boundary and require server-side validation

RegisterNetEvent('example:server:status', function()
    local src = source
    if not QBCore.Functions.GetPlayer(src) then return end
end)

Server Authority

Validate identity, permission, state, proximity, and values on the server

if type(amount) ~= 'number' then return end
if amount < 1 or amount > Config.MaxAmount then return end
if not hasPermission(src) then return end

Measured Performance

Use resmon and the profiler on a reproducible staging workload

-- Record the workload and baseline first
-- Change one variable, then measure again

Highly Configurable

Inspect each resource manifest and config at the deployed commit

-- Record the deployed commit
-- Review config and local diffs
-- Test changes on staging

Multi-Language Support

QBCore resources load locale definitions declared in their manifests

shared_scripts {
    '@qb-core/shared/locale.lua',
    'locales/en.lua',
    'locales/*.lua'
}

Manifest Dependencies

Declare and start dependencies before the resources that consume them

dependency 'oxmysql'

server_script '@oxmysql/lib/MySQL.lua'
Ready to get started?View Documentation

Simple Yet PowerfulCode Examples

Start from a maintained deployment recipe, verify APIs at a pinned commit, and keep sensitive decisions on the server.

Recipe Deployment

Deploy a test profile from the maintained txAdmin recipe

# Open txAdmin Recipe Deployer in a new test profile
https://github.com/qbcore-framework/txAdminRecipe

# Use an empty development database
# Keep the complete deployment log
# Run the first-boot smoke test before customization
text

Read Shared Data

Read one job from the current shared definitions

local policeJob = exports['qb-core']:GetShared('Jobs', 'police')

if not policeJob then
    print('The police job is not defined at this commit')
    return
end

print(policeJob.label)
lua

Validate a Server Request

Treat every client event as an untrusted request

RegisterNetEvent('example:server:requestStatus', function()
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end

    TriggerClientEvent('QBCore:Notify', src,
        'Server request accepted', 'success')
end)
lua

Ready to Start Coding?

Follow source-linked references and compare volatile APIs with the deployed upstream commit before copying an example.

Community guidance built on verifiable evidence

qbcore.net does not publish anonymous success stories as proof. Use these practices to evaluate every guide, including ours.

Trace technical claims

Follow upstream links and confirm volatile functions, events, and configuration against the current repository.

Compare before updating

Record your current commit, review upstream diffs, and test customized resources on staging before production.

Report reproducible evidence

Include logs, resource versions, reproduction steps, and rollback results when sharing a fix with the community.