fivem-dev

SKILL.md

FiveM Development

Dynamic documentation orchestrator for FiveM resource development. Supports QBox, QBCore, ESX frameworks with Lua and NUI (JS/TS).

Philosophy

  1. Fetch, don't memorize - Always get latest from authoritative sources
  2. Framework-agnostic thinking - Understand patterns, adapt to framework
  3. Performance-first - FiveM has strict tick budgets
  4. Security-aware - Server-side validation is non-negotiable

CRITICAL: No Hallucination Policy

NEVER invent or guess native functions, framework APIs, or parameters.

Rules:

  1. If unsure about a native → MUST fetch from https://docs.fivem.net/natives/
  2. If unsure about framework API → MUST fetch from official docs
  3. If function doesn't exist → Tell user honestly, suggest alternatives
  4. If parameters unknown → Fetch documentation, don't guess

Before writing any native or API call:

  • Is this a real FiveM native? → Verify at docs.fivem.net/natives
  • Is this the correct function name? → Check exact spelling
  • Are these the correct parameters? → Verify parameter order and types
  • Does this work on client/server/both? → Check availability

When you don't know:

"I'm not 100% certain about this native/API. Let me fetch the documentation..."
[Use WebFetch to get accurate info]

Verification Sources:

Type Source Action
Native functions https://docs.fivem.net/natives/ WebFetch or tell user to check
QBox API https://docs.qbox.re/ WebFetch
QBCore API https://docs.qbcore.org/ WebFetch
ESX API https://docs.esx-framework.org/ WebFetch
ox_lib https://overextended.dev/ox_lib WebFetch
Props/Vehicles https://forge.plebmasters.de/ Guide user to search

Example - WRONG:

-- DON'T: Inventing a native that might not exist
SetPlayerInvincible(playerId, true)  -- Is this real? What are the params?

Example - RIGHT:

-- DO: Use verified native with correct params
SetEntityInvincible(PlayerPedId(), true)  -- Verified at docs.fivem.net

Content Map

Read ONLY relevant files based on the request:

File Description When to Read
frameworks/framework-detection.md Detect active framework Starting new task
frameworks/qbox.md QBox exports, patterns QBox project
frameworks/qbcore.md QBCore events, exports QBCore project
frameworks/esx.md ESX xPlayer, events ESX project
scripting/lua-patterns.md Lua idioms for FiveM Writing Lua
scripting/nui-guide.md NUI HTML/CSS/JS patterns Building UI
scripting/client-server.md Architecture patterns New resource
scripting/thread-management.md Performance patterns Optimization
resources/manifest.md fxmanifest.lua reference Resource setup
resources/ox-lib-guide.md ox_lib utilities Using ox_lib
assets/asset-discovery.md Finding GTA V assets Props, vehicles, peds

Dynamic Fetching - Decision Tree

Step 1: Classify the Request

If user asks about... Action
Native function (GetPlayerPed, CreateVehicle, etc.) FETCH from natives
Framework API (QBCore.Functions, ESX.GetPlayerData) FETCH from framework docs
ox_lib feature (lib.callback, lib.notify) FETCH from ox_lib docs
GTA V asset (prop, vehicle, ped model) GUIDE to PlebMasters
Resource structure, manifest READ local files
Best practices, patterns READ local files

Step 2: WebFetch URLs

Native Functions

Base URL: https://docs.fivem.net/natives/

WebFetch(
  url: "https://docs.fivem.net/natives/",
  prompt: "Find documentation for the native function '{FUNCTION_NAME}'.
           Include: parameters, return values, usage examples,
           client/server availability."
)

Native Categories:

Category Contains
PLAYER GetPlayerPed, GetPlayerServerId, PlayerId
VEHICLE CreateVehicle, SetVehicleMod, GetVehicleClass
PED CreatePed, SetPedComponentVariation, IsPedInVehicle
ENTITY GetEntityCoords, SetEntityHeading, DeleteEntity
GRAPHICS DrawRect, DrawText3D, DrawMarker
UI SetTextEntry, BeginTextCommandDisplayText
CAM CreateCam, SetCamActive, RenderScriptCams
AUDIO PlaySoundFrontend, PlayAmbientSpeech1
WEAPON GiveWeaponToPed, GetSelectedPedWeapon
CFX Statebags, server-specific natives

Framework Documentation

QBox:

WebFetch(
  url: "https://docs.qbox.re/",
  prompt: "Find documentation for QBox '{FEATURE}'.
           Include exports, events, and usage examples."
)

QBCore:

WebFetch(
  url: "https://docs.qbcore.org/qbcore-documentation/",
  prompt: "Find documentation for QBCore '{FEATURE}'.
           Include: function signature, parameters, examples."
)

ESX Legacy:

WebFetch(
  url: "https://docs.esx-framework.org/",
  prompt: "Find documentation for ESX '{FEATURE}'.
           Include: xPlayer methods, events, server/client functions."
)

ox_lib:

WebFetch(
  url: "https://overextended.dev/ox_lib",
  prompt: "Find documentation for ox_lib '{MODULE}'.
           Include: function signatures, options, examples."
)

Asset Discovery

PlebMasters Forge:

WebFetch(
  url: "https://forge.plebmasters.de/",
  prompt: "Search for GTA V {ASSET_TYPE} matching '{SEARCH_TERM}'.
           Return model names/hashes that can be used in FiveM."
)

Asset Types: objects, vehicles, peds, weapons, clothes, animations


Request Router - Pattern Matching

RULE 1: Native Detection

Triggers when:

  • Specific native name (PascalCase like GetPlayerPed, CreateVehicle)
  • "native function", "GTA native", "FiveM native"
  • Hash reference (0x...)

Action: Fetch from https://docs.fivem.net/natives/

RULE 2: Framework API Detection

Triggers when:

  • QBCore.Functions.*, QBCore.Player.*
  • exports.qbx_core:*, exports['qb-core']:*
  • ESX.Get*, xPlayer:*, ESX.RegisterServerCallback
  • exports.es_extended:*

Action: Detect framework → Fetch from appropriate docs

RULE 3: ox_lib Detection

Triggers when:

  • lib.* functions
  • exports.ox_lib:*
  • Modules: callback, notify, menu, context, progress, zones, target

Action: Fetch from https://overextended.dev/ox_lib

RULE 4: Asset Discovery

Triggers when:

  • "What's the model for...", "prop name for...", "vehicle spawn name"
  • Object placement, ped models, weapon models

Action: Guide to PlebMasters Forge + provide usage example

RULE 5: Local Knowledge

Triggers when:

  • fxmanifest.lua structure
  • Client/server patterns
  • Thread management
  • Project structure

Action: Read relevant local markdown file


Framework Auto-Detection

When starting a task, detect the active framework from project files:

Check fxmanifest.lua

-- QBox indicators
dependency 'qbx_core'
dependency 'ox_lib'

-- QBCore indicators
dependency 'qb-core'

-- ESX indicators
dependency 'es_extended'
dependency 'esx_core'

Check code imports

-- QBox
local QBX = exports.qbx_core:GetCoreObject()

-- QBCore
local QBCore = exports['qb-core']:GetCoreObject()

-- ESX
local ESX = exports.es_extended:getSharedObject()

Best Practices (Quick Reference)

Performance Rules

Rule Why
Avoid Wait(0) in loops Burns CPU, causes lag
Cache player ped local ped = cache.ped or PlayerPedId()
Use ox_lib target Better than distance checks
Statebags over events More efficient state sync

Security Rules

Rule Reason
Server-side validation Client can be tampered
Sanitize player input Prevent injection
Use callbacks Prevent event exploitation
Rate limit operations Prevent spam/abuse

Resource Structure

resource_name/
├── fxmanifest.lua
├── config.lua
├── client/
│   └── main.lua
├── server/
│   └── main.lua
├── shared/
│   └── config.lua
└── html/              # NUI
    ├── index.html
    ├── style.css
    └── script.js

Framework-Agnostic Pattern

local Framework = {}

if GetResourceState('qbx_core') ~= 'missing' then
    Framework.Core = exports.qbx_core:GetCoreObject()
    Framework.Type = 'qbox'
elseif GetResourceState('qb-core') ~= 'missing' then
    Framework.Core = exports['qb-core']:GetCoreObject()
    Framework.Type = 'qbcore'
elseif GetResourceState('es_extended') ~= 'missing' then
    Framework.Core = exports.es_extended:getSharedObject()
    Framework.Type = 'esx'
end

return Framework

Anti-Patterns

Don't Do
while true do Wait(0) Use appropriate wait or events
Trust client data Always validate on server
Hardcode framework Detect dynamically
Fetch data every frame Cache with refresh interval
Global variables Use local, encapsulate

Related Skills

Need Skill
NUI design frontend-design
Database design database-design
Security audit vulnerability-scanner
Performance performance-profiling
Weekly Installs
44
GitHub Stars
2
First Seen
Jan 26, 2026
Installed on
codex43
opencode42
gemini-cli42
github-copilot41
amp41
kimi-cli41