← Back to skills
extension
Category: Development & EngineeringAPI key requirement unconfirmed

fivem-basics

FiveM resource structure, fxmanifest, client/server scripting, events. Use when creating or editing FiveM resources or Lua scripts, or when the user asks how FiveM works.

personAuthor: jakexiaohubgithub

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' and game 'gta5' (or 'rdr3' / 'common'); every client-served file goes in files.
  • Register networked events with RegisterNetEvent; local-only events use AddEventHandler alone, never RegisterNetEvent.
  • Server handlers read the sender from source; broadcast with TriggerClientEvent(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_scripts unless guarded by environment.
  • Use PlayerPedId() not GetPlayerPed(-1); use #(a - b) not GetDistanceBetweenCoords.
  • Prefer local; prefer variable Wait() over fixed Wait(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

  1. Lay out client/, server/, shared/ and the manifest; read rules/structure.md and rules/fxmanifest.md.
  2. Decide the side for each piece of logic (natives on client, data and validation on server).
  3. Wire communication from Decision Gates; name events resource:side:action.
  4. Validate every server handler argument; add distance and state checks.
  5. 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/