FiveM basics
Resource structure, fxmanifest, client/server split, events, exports and debugging for FiveM Lua.
Activation Contract
Load this skill when the user creates or edits any FiveM resource, fxmanifest.lua, client*.lua or server*.lua, asks how client/server, events or exports work, or reports a bug that needs server vs F8 logs.
Hard Rules
- Manifest:
fx_version 'cerulean'andgame 'gta5'(or'rdr3'/'common'); every client-served file goes infiles. - Register networked events with
RegisterNetEvent; local-only events useAddEventHandleralone, neverRegisterNetEvent. - Server handlers read the sender from
source; broadcast withTriggerClientEvent(event, -1, ...). GetInvokingResource()is nil for every net event that crosses the network; it is not an authentication check. Validate types, ranges and server-owned state instead.- Never handle money or item transactions on the client; validate and apply on the server.
- No game natives in
shared_scriptsunless guarded by environment. - Use
PlayerPedId()notGetPlayerPed(-1); use#(a - b)notGetDistanceBetweenCoords. - Prefer
local; prefer variableWait()over fixedWait(0). - Resource names use underscores, no spaces or special characters.
Decision Gates
| Need | Use |
|---|---|
| Client to server | TriggerServerEvent(event, ...) |
| Server to one / all clients | TriggerClientEvent(event, playerId | -1, ...) |
| Same side only | TriggerEvent + AddEventHandler |
| Data back across the network | a callback (ox_lib / framework), not paired events |
| Single-resource, non-networked call | a plain function, not an event |
| Cross-resource function | exports / server_export in manifest, exports.res:fn() |
| Bug with clean server console | ask for F8 client logs |
Execution Steps
- Lay out
client/,server/,shared/and the manifest; read rules/structure.md and rules/fxmanifest.md. - Decide the side for each piece of logic (natives on client, data and validation on server).
- Wire communication from Decision Gates; name events
resource:side:action. - Validate every server handler argument; add distance and state checks.
- Point to https://docs.fivem.net/natives/ for native lookups.
Output Contract
Return the manifest plus runnable Lua split by side, with event names, validation and source handling explicit.
References
- rules/structure.md — scope, client/server separation, naming.
- rules/fxmanifest.md — manifest entries, globbing, minimal example.
- rules/client-server.md — what runs where and how sides communicate.
- rules/events.md — register, trigger, naming, events vs functions, security.
- rules/exports.md — defining and consuming exports.
- rules/debugging.md — server console vs F8 logs.
- rules/optimization.md — locals, tables, natives, loops, security.
- rules/reference-links.md — official docs and natives reference.
Upstream docs: https://docs.fivem.net/docs/