roblox-luau-core ยท diff
git:20261015.28be409 to git:20261015.be33683
6 added, 7 removed. Audit A to A.
---
name: roblox-luau-core
- description: "Use for Luau language semantics, tables, control flow, string patterns, scope, closures, and cross-language translation errors."
- last_reviewed: 2026-10-04
+ description: "Use when writing, editing, or debugging any Luau: tables, control flow, string patterns, scope, closures, and errors ported from JS/Python."
+ when_to_use: "Also for Luau syntax errors, nil indexing, wrong loop or table behavior, string formatting, and reviewing Luau code for correctness."
+ last_reviewed: 2026-10-02
sources:
- https://luau.org/syntax
- - https://create.roblox.com/docs/luau/control-structures
- https://luau.org/library
- - https://raw.githubusercontent.com/Kampfkarren/kampfkarren-luau-guidelines/main/README.md
- https://raw.githubusercontent.com/Roblox/creator-docs/main/content/en-us/reference/engine/libraries/vector.yaml
---
# Luau Core Language
## When to Load
- Load for Luau semantics and JS/Python translation. Types: `roblox-luau-types`; lifecycle: `roblox-luau-patterns`; engine APIs: domain skills.
+ Load for pure Luau syntax and semantics: truthiness, tables, iteration, functions, scope, operators, string patterns, and JS/Python ports. Routing: types โ `roblox-luau-types`; ownership/lifecycle โ `roblox-luau-patterns`; Roblox APIs โ domain skills.
## Quick Reference
- Only `false` and `nil` are falsy. `0`, `""`, and `{}` are truthy.
- Equality does not coerce types. `0 == "0"` is false. Inequality is `~=`.
- Array conventions are 1-based. `#array` is meaningful only for a sequence without nil gaps.
- Assigning `nil` removes a table key; assigning a table copies the reference; `table.clone` is shallow.
- Dictionary iteration order is unspecified. Do not make behavior depend on it.
- Dynamic keys require brackets: `record[field]`. Dot syntax uses a literal identifier.
- Missing arguments become `nil`; extra results and arguments can be discarded.
- Prefer an `if` expression over `condition and a or b` when `a` may be falsy.
- - Locals start at their declaration; `repeat` locals reach `until`. Forward-declare mutual recursion.
+ - Local names are scoped from their declaration onward. Forward-declare mutually recursive functions.
- Luau string patterns are not regular expressions. Their syntax and capabilities differ.
- - Backtick interpolation and `..` are valid. Join many fragments once in hot loops.
+ - Backtick interpolation and `..` concatenation are both valid. Choose the clearer form; join many fragments once in a hot loop.
- NaN does not equal itself and defeats `<`/`>`; test with `x ~= x`.
- Binary data uses the `buffer` library: fixed size, 0-based offsets, explicit-width reads/writes. Avoid `buffer.readinteger`/`writeinteger` (stubs, not released runtime).
- For Base64, hashing, or compression use `EncodingService` (buffers, not strings; JSON via `HttpService`). Details: see full reference.
```luau
local label = if enabled then "On" else "Off"
local message = `{name}: {score}`
local byId: {[number]: string} = {}
byId[userId] = name
for index, value in values do
print(index, value)
end
```
### Translation traps
- JavaScript `===`, `!==`, `null`, optional chaining, spread, arrow functions, and array methods are not Luau syntax.
- Python `None`, zero-based list assumptions, list comprehensions, exceptions, and implicit tuple behavior do not translate directly.
- `x or fallback` tests truthiness, not only absence. It replaces a valid `false` value.
- `typeof(value)` recognizes Roblox datatypes; `type(value)` reports the underlying Luau type category.
### Review
Valid Luau, no nil gaps, no assumed dictionary order, no accidental aliases, no cross-language syntax, no fallbacks hiding `false` or `nil`.
> Detailed language traps and translation examples: [references/full.md](references/full.md)