QBCore Framework Development
Complete guide for developing with QBCore Framework — a comprehensive FiveM roleplay framework providing core functionalities and modules.
When to use
- •Creating or editing QBCore resources/scripts
- •Working with player data (Player object, PlayerData)
- •Implementing jobs, gangs, economy, or inventory systems
- •Using QBCore client/server functions, callbacks, or events
- •Questions about QBCore best practices and optimization
How to use
Read individual rule files for detailed explanations and examples:
- •rules/core-concepts.md — QBCore architecture, PlayerData structure, Player object, framework initialization
- •rules/client-functions.md — Client-side QBCore functions, notifications, player state management
- •rules/server-functions.md — Server-side functions, player retrieval, callbacks, usable items
- •rules/player-methods.md — Player object methods: money, items, jobs, gangs, metadata, accounts
- •rules/jobs-gangs.md — Job system, gang system, payments, duty status
- •rules/inventory-items.md — Inventory management, item handling, usable items
- •rules/events-callbacks.md — QBCore events, server callbacks, client callbacks, event handling
- •rules/best-practices.md — QBCore coding standards, optimization, security, naming conventions
- •rules/reference-links.md — Official QBCore documentation links
Key principles
- •Always check for nil —
if Player then ... endbefore using Player object - •Use QBCore.Functions.GetPlayer — Standard player retrieval:
local Player = QBCore.Functions.GetPlayer(source) - •Wait for player load — Check player loaded state on client before accessing PlayerData
- •Never trust client — Validate all data server-side, secure your events
- •Follow QBCore patterns — Use QBCore functions instead of reinventing (callbacks, notifications, etc.)
- •Optimize loops — Cache player objects, use dynamic Wait times, avoid unnecessary calls
- •Use camelCase — Follow Lua naming:
myVariable, local over global - •Minimal globals — Keep variables local unless they need global scope
- •Use ox_lib for UI — Prefer ox_lib for menus, dialogs, notifications, progress bars