agentsclimarketplace

Roblox luau patterns

Skill TabooHarmony/roblox-brain/skills/roblox-luau-patterns

Use for Luau metatable classes, inheritance, Promises, coroutines, pcall, module structure, services, and Roblox coding patterns.From its SKILL.md

Install
npx -y skills add TabooHarmony/roblox-brain --skill roblox-luau-patterns

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

2.8 KB, 626 tokens by cl100k_base, as published. Nobody here has run it

When to Load

Load for Luau patterns: classes with metatables (constructors, methods, inheritance), async control flow (Promises, coroutines, pcall/xpcall), module structure (service pattern, singletons), Roblox-specific patterns (Instance creation, service access, events, task library). For syntax questions, use roblox-luau-core. For type annotations, use roblox-luau-types.

Hand off when: Pure syntax → roblox-luau-core · Type annotations → roblox-luau-types · Networking/data/security → roblox-networking, roblox-data, roblox-security · Performance → roblox-performance.

Full examples and code samples: references/full.md

Quick Reference

OOP (metatables): Use for multiple instances with shared behavior.

local MyClass = {}
MyClass.__index = MyClass
function MyClass.new(...): MyClass  -- . for constructors
    return setmetatable({...}, MyClass)
end
function MyClass:method()           -- : for methods (implicit self)
end
-- Inheritance: setmetatable(Child, { __index = Parent })

Always set __index. Constructors use ., methods use :.

Module Services: Singleton pattern for managers. Service.init() wires events; clean up in PlayerRemoving.

Instance Creation: Configure ALL properties, set Parent LAST (prevents replication races).

Task Library: Always use task.*. wait()/spawn()/delay() are deprecated.

Error Handling:

local ok, result = pcall(fn, args...)       -- one-shot fallible calls
local ok, result = xpcall(fn, handler)      -- custom error handler + traceback

Wrap ALL DataStore/HTTP calls. Use a Promise library for async chains when the project already has one; otherwise use task and explicit error handling.

Naming: PascalCase (classes/modules/types), camelCase (vars/functions), UPPER_CASE (constants). Prefix _ for private.

Anti-Patterns:

  • wait()/spawn()/delay() → task.*
  • Polling loops → events or Heartbeat
  • String .. in loops → table.concat()
  • Missing pcall on DataStore/HTTP → silent crash
  • Trusting client → validate types, ranges, ownership
  • Parent before config → replication race
  • Props on class table instead of self → shared across instances
  • No connection cleanup → use Trove or manual :Disconnect()

Libraries: Promise · Trove · Signal · Comm · Component · Concur · TypedRemote (Sleitnick) · ProfileStore · t (runtime checks)

Checklist: __index set · ./: correct · pcall on fallible · cleanup · Parent last · no deprecated · clear API · player data cleaned on leave

What ships with it: 1 file

8.1 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.