SlateLua is a lightweight set of pluggable Lua modules for Love2D game development. It is intentionally small: each addon can be required independently, and the top-level slatelua module only wires the pieces together for convenience.
slatelua.data.loader: text, JSON, CSV, and Lua table loading.slatelua.assets.cache: lazy asset cache with aliases and custom loaders.slatelua.graphics.ninepatch: LibGDX-style nine-patch image drawing.slatelua.graphics.animation: frame animations and named animation states.slatelua.ui: widgets, panels, buttons, labels, grids, lists, and drag/drop.slatelua.core.world: compact entity-component-system loop.slatelua.core.timer: timers and tweens.slatelua.mechanics.input: action bindings and axes.slatelua.mechanics.state: state machine for screens, AI, or actors.slatelua.mechanics.camera: simple camera transforms.slatelua.mechanics.collision: AABB collision helpers and ECS system.slatelua.fx.particles: tiny particle emitters.slatelua.fx.sfx: grouped sound playback helper.slatelua.fx.vfx: shake, flashes, and floating text.
The package has no external runtime dependency beyond Lua and Love2D for graphics, audio, input, and filesystem-backed asset loading. Non-rendering modules such as events, timers, data parsing, state machines, and ECS world updates can be used in plain Lua.
Use the aggregate module when you want a batteries-included game object:
local Slate = require("slatelua")
local game = Slate.newGame()
function love.update(dt)
Slate.updateGame(game, dt)
end
function love.draw()
Slate.drawGame(game)
endRequire independent modules when you want a smaller surface:
local World = require("slatelua.core.world")
local UI = require("slatelua.ui")
local world = World.new()
local root = UI.root()