agentleFS
nonloopednonlooped/roblox-suite/roblox-networking/SKILL.md

roblox-networking

Skill25 starsChanged 56 days agoMITView on GitHub

Design or review Roblox client-server communication. Use for remotes, bindables, replication, network ownership, input validation, rate limiting, and exploit defenses.

6 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use roblox-studio-mcp, roblox-tooling and 7 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • szlaySkill

    roblox-studio-mcp

    Use when working with Roblox Studio through built-in MCP for scripts, scenes, generated assets, input, or playtesting.

    Also in 4 projects that use this

  • szlaySkill

    roblox-tooling

    Use when configuring Roblox tooling such as Rojo, Wally, Selene, StyLua, Lune, Aftman, luau-lsp, or CI/CD.

    Also in 4 projects that use this

  • sentinelcoreSkill

    roblox-monetization

    Use when developing Roblox games or experiences and need to earn Robux through Game Passes, Developer Products, UGC avatar items, or Premium Payouts — covers both Studio scripting and Creator Hub dashboard setup.

    Also in 4 projects that use this

  • sentinelcoreSkill

    roblox-security

    Use when writing Roblox game scripts that handle player actions, currencies, stats, damage, or any RemoteEvent/RemoteFunction communication. Use when reviewing code for exploitable patterns, implementing anti-cheat logic, validating client requests on the server, or setting up rate limiting.

    Also in 4 projects that use this

  • +4 more from szlay
  • +1 more from sentinelcore

The file

We split this skill into the rules it gives an agent

3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use server tables or Attributes as source of truth, not leaderstats or client-visible values.

    line 35
  2. Distinctive:

    Keep a table of last action times per player per action type.

    line 56
  3. Very specific:

    Use RunService context checks everywhere you are unsure.

    line 80

“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

roblox-networking

Core sources: https://create.roblox.com/docs/projects/client-server , https://create.roblox.com/docs/scripting/security/security-tactics (server-authority techniques), the entire scripting/security/ section (security-tactics, defensive-design, client-server-boundary, network-ownership, access-control, etc.), events/remote and bindable, plus the relevant Engine classes (RemoteEvent, RemoteFunction, Bindable*, RunService, etc.).

Authority boundary

The server is authoritative for game state and simulation. The client simulates for responsiveness and renders what the server tells it. Anything that can be abused (economy, progression, combat outcomes, movement in competitive play) must be validated or simulated on the server.

Communication tools

RemoteEvent. Fire-and-forget across the boundary.

  • Client → Server: RemoteEvent:FireServer(...) → server handler receives (player, ...)
  • Server → Client: FireClient(player, ...) or FireAllClients(...)

RemoteFunction. Request/response (yields).

  • Client: InvokeServer(...) → server OnServerInvoke(player, ...)
  • Server can InvokeClient (less common, has caveats).

Critical warning: RemoteFunction:InvokeClient yields the server until the targeted client returns a value. A hostile or lagging client can leave the invocation pending and hang the server indefinitely. Avoid server→client invocation; if you must use it, enforce a timeout and treat the client as untrusted.

BindableEvent / BindableFunction. Same-side only (server modules talking to each other, or client modules). They stay on one side of the network boundary.

General rule: Client sends intent. Server decides outcome and replicates the result (or lets normal Instance replication handle it).

Server authority techniques

  • Validate every client action (distance, rate, prerequisites, stamina, line-of-sight, etc.).
  • Simulate critical systems on the server (or at least re-execute the important parts).
  • Use server tables or Attributes as source of truth, not leaderstats or client-visible values.
  • For movement/physics in competitive games: rely on Roblox physics + network ownership + server validation/correction.
  • Replicate only what each client needs (don't broadcast entire inventories every frame).

See the official server-authority techniques page for movement validation, physics, etc.

Network ownership

Unanchored parts and assemblies have a network owner (usually the nearest player or the server, based on proximity and client capacity). The owner simulates the physics locally for low latency. Server can call BasePart:SetNetworkOwner(player or nil) to set ownership for the entire connected assembly. Anchored parts are always owned by the server and cannot be manually reassigned.

Critical for vehicles, projectiles, pushable objects, etc. Misuse leads to rubber-banding for other players or easy exploitation.

Common exploit classes and defenses

  • Speed/fly/noclip: server movement validation or physics ownership + correction.
  • Remote spam / duplication: per-player rate limiting + server-side cooldowns + argument validation.
  • LocalScript injection / free-model backdoors: audit assets, use capabilities, server validation.
  • Tampering with leaderstats or client-visible values: treat them as pure display; authoritative state lives in server tables or DataStores.
  • Information disclosure: don't parent secret models in replicated locations; use streaming, server-only storage (ServerStorage/ServerScriptService), and avoid putting sensitive geometry/triggers where clients can see them. CanQuery and collision groups are not confidentiality controls; they only affect spatial queries and physics collisions, not replication or rendering.

Rate limiting pattern (simple but effective): Keep a table of last action times per player per action type. On Remote, check delta. Warn or kick on abuse.

Capabilities (experimental security layer): Script capabilities let you restrict what scripts are allowed to do at a granular level. They are currently experimental. To use them, set Workspace.SandboxedInstanceMode = Enum.SandboxedInstanceMode.Experimental, then set Sandboxed = true and assign a SecurityCapabilities value on the script or a parent container (Model/Folder). This restricts the script to only the abilities in its capabilities set.

Access control and confidentiality

  • What the client can see: control with Instance streaming, don't parent sensitive geometry in Workspace if clients shouldn't know the exact layout, use server-only containers where possible.
  • Confidential data (exact economy formulas, drop rates, anti-cheat parameters) should stay on the server.

Secure monetization and data flows (tie-in to other skills)

  • Prompt purchase on client.
  • For game passes: only grant benefits inside PromptGamePassPurchaseFinished when wasPurchased == true, and re-verify ownership with UserOwnsGamePassAsync on PlayerAdded.
  • For developer products and subscriptions: validate and grant benefits only inside the server-side ProcessReceipt callback.
  • DataStore writes only from server Scripts.
  • Any client Remote that says "I bought X, give me the item" must be ignored or treated as a hint and re-validated on the server.

Practical placement rules

  • Authoritative logic, economy, progression, combat resolution, datastore access → ServerScriptService or server-only modules.
  • UI, input handling, cosmetic prediction, local VFX → client (LocalScripts or client modules under PlayerGui or required from ReplicatedStorage with IsClient branches).
  • Shared pure functions / constants / Remote definitions → ReplicatedStorage modules (loaded on both sides but executed in context).

Use RunService context checks everywhere you are unsure.

Scripts

  • scripts/RateLimiter.lua: a reviewed per-player/per-action limiter with a hard minimum interval, token capacity/refill, bounded action-key allocation, and denial reasons. Call destroy() on dedicated instances to disconnect cleanup; RateLimiter.default is the shared singleton.
<!-- catalog:references:start -->

Reference index

  • exploits-and-defenses.md: Review movement exploits, remote abuse, asset backdoors, or data exposure.
  • remote-and-bindable-patterns.md: Choose events versus functions or define communication payloads.
  • server-authority-and-validation.md: Validate remote arguments, enforce cooldowns, or review client prediction.
<!-- catalog:references:end -->

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.