What Coding Language Does Roblox Studio Use?
Roblox Studio uses Luau — Roblox's own gradually-typed dialect of Lua. If you've heard of Lua, you mostly already know Luau. The key differences: Luau adds an optional type system, performance improvements, and several Roblox-specific extensions.
Every script you write in Roblox is Luau. This guide takes you from "I have never coded before" to "I can read and write real Roblox Luau" — with the patterns you'll actually use in real games.
Why Luau Instead of Plain Lua?
Roblox built Luau on top of Lua 5.1 for three reasons:
- Type safety: Catch bugs at edit time instead of runtime
- Performance: Luau's VM is significantly faster than vanilla Lua
- Sandboxing: Luau is hardened against malicious code in a multi-user environment
You can write completely untyped Luau and it will run — it's a superset of Lua syntax. Types are opt-in.
Luau Syntax: The Basics in 5 Minutes
Variables
local playerName = "Alex"
local score = 100
local isWinner = true
local items = {"Sword", "Shield", "Potion"}
Use local almost always. Globals (without local) are a frequent source of bugs in Roblox.
Functions
local function addCoins(player, amount)
player.leaderstats.Coins.Value += amount
end
addCoins(somePlayer, 50)
Conditionals
if score >= 100 then
print("You win!")
elseif score >= 50 then
print("Good try")
else
print("Keep playing")
end
Loops
-- for loop with numbers
for i = 1, 10 do
print(i)
end
-- for loop over an array
for index, item in ipairs(items) do
print(index, item)
end
-- for loop over a dictionary
for key, value in pairs(config) do
print(key, value)
end
-- while loop
while task.wait(1) do
print("Tick")
end
Tables (Arrays and Dictionaries)
-- Array
local inventory = {"Sword", "Shield", "Potion"}
inventory[1] -- "Sword"
table.insert(inventory, "Bow")
-- Dictionary
local stats = {
health = 100,
mana = 50,
level = 7,
}
stats.health -- 100
The Roblox Side: Services and the Game Tree
What makes Luau coding in Roblox different from writing Lua anywhere else is the game tree — the hierarchy of every object in your game — and Roblox's services.
Always Use game:GetService()
Never access services with shortcuts like game.Players. Use game:GetService("Players") — it's more reliable and doesn't break if the service hasn't loaded yet.
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local DataStoreService = game:GetService("DataStoreService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local MarketplaceService = game:GetService("MarketplaceService")
These are the seven services you'll use in 90% of Roblox scripts.
Events and Signals
Roblox is event-driven. Most of your code reacts to things happening:
Players.PlayerAdded:Connect(function(player)
-- runs when a player joins
end)
part.Touched:Connect(function(hit)
-- runs when something touches the part
end)
RunService.Heartbeat:Connect(function(deltaTime)
-- runs every server frame
end)
Luau Types: The Feature That Makes Luau Better Than Lua
Add type annotations to catch bugs before runtime:
local function damage(target: Humanoid, amount: number)
target.Health -= amount
end
type PlayerData = {
coins: number,
level: number,
inventory: {string},
}
local function savePlayer(data: PlayerData)
-- ...
end
The Roblox Studio editor uses these annotations for autocomplete and warns you if you call the function with wrong types. This is the single biggest win moving from plain Lua to Luau.
The Five Patterns You'll Use Constantly
1. Setting Up Leaderstats
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
end)
2. Touched Detection
local part = script.Parent
part.Touched:Connect(function(hit)
local humanoid = hit.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- player has touched the part
end
end)
3. DataStore Save/Load with pcall
local DataStoreService = game:GetService("DataStoreService")
local store = DataStoreService:GetDataStore("PlayerData")
local function loadData(player)
local ok, data = pcall(function()
return store:GetAsync(player.UserId)
end)
if ok then return data end
return nil
end
4. RemoteEvent Communication
-- Server script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = Instance.new("RemoteEvent")
event.Name = "OpenShop"
event.Parent = ReplicatedStorage
event.OnServerEvent:Connect(function(player, itemId)
-- validate and process purchase
end)
-- LocalScript
local event = ReplicatedStorage:WaitForChild("OpenShop")
event:FireServer("Sword")
5. Smooth Animation with TweenService
local TweenService = game:GetService("TweenService")
local part = workspace.MyPart
local info = TweenInfo.new(2, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut)
local tween = TweenService:Create(part, info, { Position = Vector3.new(0, 50, 0) })
tween:Play()
Best Lua AI and Code Generators for Roblox
Even if you know Luau well, AI accelerates development dramatically. The best Lua AI tools for Roblox in 2026:
- Obby — full-game generation including all Luau, designed for Roblox specifically. Try Obby →
- Roblox Studio Assistant — free, in-Studio, great for script-by-script work
- Claude / ChatGPT — strong general Luau output when you give them Roblox context
- GitHub Copilot — inline completions in VS Code with Rojo
The Roblox Luau Resources Worth Bookmarking
- Roblox Creator Hub Docs:
create.roblox.com/docs— the authoritative API reference - Luau official site:
luau.org— the language specification and type system docs - Roblox DevForum:
devforum.roblox.com— community help and best practices
You Don't Have to Master Luau to Ship a Game
Learning Luau is rewarding but takes months to get fluent. If your goal is to ship a real, playable Roblox game today, AI Roblox builders like Obby generate production-grade Luau for you. Use the AI output as your scaffolding, learn from reading it, and write the parts you care about by hand.


