Server-Authoritative Design: FiveM's Most Important Architectural Property
New Origins Studio engineering · published 2026-09-02 · updated 2026-09-02 · 9 min
The short answer
Server-authoritative means the server computes and decides everything that matters — prices, permissions, ownership, outcomes — while the client only ever asks and displays. A client-trusting handler does the opposite: it accepts a value the client sent, like an amount or a role flag, and writes it to state directly. The property is binary at every handler — either the server verified the fact independently, or it took the client's word for it.
What the property actually means
For any given action, a server-authoritative handler doesn't derive its decision from data the client supplied for that decision — it looks up its own truth (config, database, session state) and treats the client's message as a request, not an instruction. The opposite is a client-trusting handler: one that takes a value the client sent and writes it to state as if the client were a reliable source.
This matters more than almost any other property because a client is hardware you don't control, running code the player can modify freely. Anything a client-trusting handler accepts, a modified client can send however the attacker likes.
How to spot a client-trusting handler
The following is a generic, illustrative contrast — not code from any specific product:
- Client-trusting: a net event handler that takes an item id and a price as arguments, then adds the price directly to the player's balance. The bug is the second argument — the price came from the client, and the handler simply wrote it down.
- Server-authoritative: a handler that takes only the item id, looks the price up in server-side config, and adds that looked-up value. The client's number never enters the calculation at all.
- The fifteen-second check: does any variable that reaches a database write, a balance change, or a permission decision trace back to an argument the client passed for that exact purpose? If yes, that's the tell.
Where this shows up beyond money
The same property governs permissions (never trust a client-sent job, role, or admin flag — check the server-side job table or ACL instead), ownership (never trust a client's claim that a vehicle or property is theirs — verify against the stored owner record), and state (never trust a client's claim to be on duty, in range, or in a particular mode without a server-side check). This guide covers the architectural property itself; the four concrete validations every net event needs — source, permission, rate, and argument types — are covered in full in our net-event security guide, which this one defers to rather than repeats.
A review checklist
- Every price, payout, and cost traces to server-side config or a database lookup — never a client-sent argument.
- Every ownership check queries the stored record — never trusts a client's claim about what belongs to them.
- Every permission check reads server-side job, role, or ACL state — never a client-sent flag.
- The client's role in any exchange is ask, wait, and render the server's answer — nothing more.
- Escrow and obfuscation don't substitute for this property — a genuinely authoritative server doesn't need to hide its client code to be safe, because the client was never trusted with anything that mattered in the first place.
Why this is the property, not a property
A performance problem gets worse slowly and predictably as your server grows. A non-authoritative handler gets worse the moment someone notices it, and the damage scales with exactly the things a successful server has more of: players, transactions, and time running. That asymmetry — a category of bug that punishes success — is why this sits ahead of feature count or UI polish in any serious evaluation of a script, and why it's worth checking before anything else you'd normally look at first.
Questions, answered directly
What does "server-authoritative" mean in FiveM?
It means the server computes and verifies anything that matters — prices, permissions, ownership — from its own config, database, or session state, rather than accepting a client-sent value as fact. The client's role is to ask and display, never to decide.
How can I tell if a FiveM script trusts the client?
Trace any variable that reaches a database write, a balance change, or a permission check back to where it came from. If it originated as an argument the client sent for that exact purpose — a price, an amount, a role flag — the handler is trusting the client.
Is a client-sent price the same thing as a security exploit?
It's the mechanism behind most of them. A handler that accepts a client-sent amount and writes it to a balance or database is exploitable by definition — any modified client can send whatever value it likes to that same event.
Does asset escrow make a resource server-authoritative?
No — escrow protects code from being read or copied, but it says nothing about whether the server-side logic actually validates what it receives. A resource can be fully escrowed and still trust the client completely; the two properties are unrelated.
Read next
More from economy & security — Money that survives a crash, events a client can't forge, and the tests that prove both.
FiveM Server Security: Why Every Net Event Must Be Validated
8 minHow FiveM exploits actually work, the four validations every net event needs, and how to audit a script's security before it wipes your economy.
How to Stress-Test a FiveM Economy Script Before Launch
7 minThe race test, the crash test, and the reconciliation habit — a concrete method for proving a FiveM economy script won't dupe or drift, with our published results.
FiveM Banking Script Buyer's Guide (2026)
10 minHow to buy a FiveM banking script: the integrity tests that matter, the audit-ledger question, and real banking prices from our July 2026 survey of 13 stores.


