The client is hostile
Anything running on a player's machine can be read, patched or replayed back at you. AXIOM never trusts a client-reported result. It recomputes the ones that matter and ignores the rest.
Platform Security for Roblox experiences
A server-side protection layer for Roblox. AXIOM assumes the client is lying, recalculates the state that carries value, and scores whatever's left against how your players normally behave. It runs on our own titles, which is where every version gets broken in first.
Design principles
AXIOM exists because our own games needed it, so every decision in it comes from something that actually went wrong on a live server rather than from a threat model drawn on a whiteboard.
Anything running on a player's machine can be read, patched or replayed back at you. AXIOM never trusts a client-reported result. It recomputes the ones that matter and ignores the rest.
A list of known exploits is always a list of yesterday's exploits. Baselines catch the shape of cheating even when the specific tool shipped this morning, which is why the two approaches are worth running together.
Ban someone who did nothing and you've lost them, plus everyone they tell. Responses are graduated, and every action stores the evidence behind it so an appeal can be answered with facts instead of a shrug.
How it works
Four stages, all of them inside the frame the server was going to spend anyway. Nothing commits until the last one has an answer.
Guarded remotes and state transitions are wrapped. Nothing reaches game logic unchecked.
Hard rules first: physics bounds, rate limits, ownership, payload shape and signing.
What passes is compared to the player's own baseline and the server population's.
Clear, warn, throttle, rollback, isolate or ban, chosen per detection class, with the evidence attached.
-- ServerScriptService/AxiomBootstrap.server.luau
local Axiom = require(ServerStorage.Axiom)
Axiom:Init({
mode = "enforce", -- observe | enforce
telemetry = true,
appeals = true,
})
-- physics
Axiom:Watch("Movement", {
maxStudsPerSecond = 42,
maxVerticalDelta = 18,
toleranceFrames = 3,
onViolation = Axiom.Action.Rollback,
})
-- economy
Axiom:Watch("Economy", {
validate = function(player, delta)
return delta <= Ledger:Earned(player)
end,
-- contain first, confirm, then ban
onViolation = Axiom.Action.Isolate,
onConfirmed = Axiom.Action.Ban,
})
-- remotes
Axiom:Guard(ReplicatedStorage.Remotes, {
rateLimit = { calls = 12, perSeconds = 1 },
schema = true,
})
AXIOM ships as a server module. Run it in observe mode for a fortnight and it touches nobody: it just builds baselines and writes down what it would have done. Read that, argue with it, adjust the thresholds, and switch to enforce when the list of would-be actions stops containing names you recognise.
Containment
A ban is a loud, permanent answer to a question you might still be getting wrong. When AXIOM flags suspicious activity, the player is quietly moved into an isolated instance instead of a public server, and everything they do there stops at the door.
Nothing. The isolated instance looks and plays like a normal server, so there's no obvious moment that tips them off and no reason to switch tactics or start a new account.
Bans are still used, for confirmed and serious violations. Containment is the safer first step that earns us the confidence to take one.
A cleared player loses nothing, because nothing they did in isolation was ever going to count.
Coverage
Detection classes are modular. Enable what your title needs and leave the rest dormant.
Speed, flight, noclip, teleport and gravity manipulation, checked against the server's own simulation bounds.
Currency and item grants reconciled against a server-side ledger. Duplication and injection fail closed.
Reach, fire rate, line of sight and damage magnitude re-derived on the server before a hit lands.
Rate limiting, schema validation and argument signing on every guarded RemoteEvent and RemoteFunction.
Per-player baselines across session length, input cadence and progression rate. Outliers surface for review.
Repeat-offender correlation and ban-evasion signals, weighted so shared households aren't punished.
Live enforcement log
RequestRewardBlockedPurchaseItemBlockedIllustrative sample. Live dashboards are available to licensed studios.
Limits
Every anticheat page on the internet lists what the product catches. Here's the other half, because finding this out three weeks into an integration is worse than reading it now.
If your server takes the client's word for damage, currency or position, AXIOM has nothing to compare against. The honest first step for some titles isn't buying an anticheat, it's moving those decisions server-side. We'll say so if that's you.
Visual cheats that only read data your server already replicated, wall hacks and similar, leave no trace on the wire. The fix is replicating less, not detecting more. We'll help you work out what to stop sending.
AXIOM watches game state. Harassment, scams and inappropriate content are a different problem with different tooling, and Roblox's own systems handle a large part of it. We don't pretend to cover it.
Nobody can. New tools appear, and something will get through eventually. What AXIOM gives you is a shorter window, contained damage while you work, and enough evidence to understand what happened afterwards.
Getting started
The module itself drops in within a day. The rest of the time goes on baselines and arguing about thresholds, which is the part that decides whether the thing is useful or just noisy.
There's no price list, and that isn't a sales tactic. A tycoon with two hundred concurrent players and a competitive shooter with twenty thousand are different amounts of work for us, so we scope each one.
What we ask for up front:
We turn down more enquiries than we accept, usually because we can't support the title properly at the time. A no arrives quickly and with a reason.
FAQ
Tell us about your experience and what you're seeing. We'll come back with a straight answer.