Data-Driven Config and Hot-Reload
Load game data from Lua files and reload scripts at runtime.
Data-Driven Config and Hot-Reload is a free Lua Academy lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Lua Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What Is Data-Driven Design?
Data-driven design separates what (data: stats, levels, layouts) from how (code: game logic). Data changes do not require recompilation.
Loading Config from a Lua File
A config file is a Lua script that returns a table. Load it with dofile or loadfile + pcall.
-- config.lua
return {
playerSpeed = 200,
gravity = 980,
maxEnemies = 10,
}Reading the Config
In the host script, load and use the config table.
local config = dofile("config.lua")
print(config.playerSpeed) -- 200Sandboxed Config Loading
For security, load config in a restricted environment so malicious code cannot call os.execute or other dangerous functions.
local function loadConfig(filename)
local chunk, err = loadfile(filename)
if not chunk then error(err) end
local env = {math = math, table = table}
setfenv and setfenv(chunk, env) or _ENV -- 5.1 vs 5.2+
return chunk()
endHot-Reload Overview
Hot-reload allows changing data (or code) while the game is running. This dramatically speeds up iteration: tweak a value, see the result immediately without restarting.
Detecting File Changes
Use os.difftime(os.time(), lastModified) or poll a file's modification time with a C extension or I/O trick to detect when a config file has changed.
Reloading the Config
On change, reload the file and update the live config table in-place so all references to the table see the new values.
local function hotReload(config, filename)
local ok, newCfg = pcall(dofile, filename)
if ok and type(newCfg) == "table" then
for k, v in pairs(newCfg) do config[k] = v end
print("Config reloaded")
else
print("Reload error:", newCfg)
end
endReloading Lua Modules
Remove a module from package.loaded before calling require again to force a fresh load.
package.loaded["mymodule"] = nil
local mymodule = require("mymodule")Level Data from Lua
Define levels as Lua tables: room layouts, enemy placements, trigger zones. Load at runtime with dofile for fast iteration.
-- level1.lua
return {
name = "Forest",
enemies = {
{type="goblin", x=100, y=200},
{type="troll", x=300, y=150},
},
music = "forest_theme.ogg",
}Validation
After loading config, validate required fields and types. Provide clear error messages for missing or malformed data.
Version Tags
Include a version field in config files. Reject files with incompatible versions to prevent silent errors from stale data.
Hot-Reload Question
How do you force Lua to reload a cached module?
Recap: Data-Driven Config and Hot-Reload
Load game data from Lua files with dofile/loadfile. Use sandboxed environments for untrusted configs. Implement hot-reload by polling file modification times and clearing package.loaded for module reloads.
Frequently asked questions
Is the “Data-Driven Config and Hot-Reload” lesson free?
Yes — the full text of “Data-Driven Config and Hot-Reload” is free to read here on the web, and the Lua Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Lua Academy course, upgrade to CoddyKit PRO.
What will I learn in “Data-Driven Config and Hot-Reload”?
Load game data from Lua files and reload scripts at runtime. You practise Lua Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Lua Academy?
No prior experience is required. Lua Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Data-Driven Config and Hot-Reload” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Lua Academy lesson?
Yes. Every Lua Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Event Systems in Lua
- Component-Based Scripting
- AI Behavior with State Machines
- Data-Driven Config and Hot-Reload