roblox-networking · nonlooped — Claude Code skill for Roblox networking
A skill for designing and reviewing Roblox client-server communication. Use it when remote events, network ownership or exploit defenses come up in your codebase.
npx skills add nonlooped/roblox-suite --skill roblox-networking -a claude-codeWhat roblox-networking does
The skill lays out the client-server boundary in Roblox. The server owns game state and simulation; the client renders and simulates for responsiveness. Economy, progression, combat outcomes — anything exploitable must be validated on the server.
It covers RemoteEvent, RemoteFunction, BindableEvent and BindableFunction with rules for when to use each. The core pattern: client sends intent, server decides outcome and replicates the result. There's a dedicated section on network ownership — unanchored parts are simulated by the nearest player unless the server reassigns via BasePart:SetNetworkOwner. Getting this wrong causes rubber-banding or cheats.
Common exploit classes are broken down: speed/fly/noclip, remote spam, free-model backdoors, leaderstats tampering. Defenses include argument validation, server-side cooldowns and server tables as the source of truth. Since CanQuery and collision groups don't stop replication, secret geometry belongs in ServerStorage.
A scripts/RateLimiter.lua ships with the skill: per-player, per-action limiting with minimum intervals, token refill and denial reasons. Three reference files cover exploits, remote patterns and server validation.
What it helps with
- design client-server data flow for a Roblox game
- find where server authority is missing
- stop remote spam and item duplication
- sort out network ownership for vehicles or projectiles
- add per-player action limits
Example prompts for the agent
- Review my remote event code for spam and missing argument validation
- How do I set network ownership for a car to avoid rubber-banding?
- Where should game pass purchase handling go?
How to install roblox-networking
1Skills CLI (Vercel)
npx skills add nonlooped/roblox-suite --skill roblox-networking -a claude-code2Manually: put the files in place
~/.claude/skills/roblox-networking/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/roblox-networking/
1Skills CLI (Vercel)
npx skills add nonlooped/roblox-suite --skill roblox-networking -a codex2Manually: put the files in place
.agents/skills/roblox-networking/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add nonlooped/roblox-suite --skill roblox-networking -a cursor2Manually: put the files in place
.cursor/skills/roblox-networking/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install nonlooped/roblox-suite roblox-networking2Manually: put the files in place
.github/skills/roblox-networking/SKILL.md1Skills CLI (Vercel)
npx skills add nonlooped/roblox-suite --skill roblox-networking -a gemini-cli2Platform CLI
gemini skills install https://github.com/nonlooped/roblox-suite --path roblox-networkingManually: put the files in place
.devin/skills/roblox-networking/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add nonlooped/roblox-suite --skill roblox-networking -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about roblox-networking
How do I install roblox-networking in Claude Code?
Run npx skills add nonlooped/roblox-suite --skill roblox-networking -a claude-code. The skill lands in ~/.claude/skills/roblox-networking/SKILL.md.
What does roblox-networking do?
It helps design and review Roblox client-server communication: choosing between RemoteEvent and RemoteFunction, server-side validation, exploit defenses and network ownership.
Why is RemoteFunction:InvokeClient risky?
The server yields until the client responds, and a hostile or lagging client can leave the call pending forever. The skill advises avoiding server-to-client invocation, or adding a timeout and treating the client as untrusted.
Source text
SKILL.md · MIT
--- name: roblox-networking description: "Design or review Roblox client-server communication. Use for remotes, bindables, replication, network ownership, input validation, rate limiting, and exploit defenses." last_reviewed: 2026-07-16 --- # 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](references/exploits-and-defenses.md): Review movement exploits, remote abuse, asset backdoors, or data exposure. - [remote-and-bindable-patterns.md](references/remote-and-bindable-patterns.md): Choose events versus functions or define communication payloads. - [server-authority-and-validation.md](references/server-authority-and-validation.md): Validate remote arguments, enforce cooldowns, or review client prediction. <!-- catalog:references:end -->
© nonlooped · MIT · nonlooped/roblox-suite
Similar skills
Everything for Game dev and 3D: Unity, Unreal, Godot, Blender →roblox-networking by other authors comes first.