Skip to content

Instantly share code, notes, and snippets.

@truemedian
Created December 12, 2024 14:58
Show Gist options
  • Save truemedian/590ef0f318530d6457e0245062c2682d to your computer and use it in GitHub Desktop.
Save truemedian/590ef0f318530d6457e0245062c2682d to your computer and use it in GitHub Desktop.

Lua Compatibility Matrix

No: This function or field will be missing in this version.
Yes: This function or field is supported unconditionally in this version.
Maybe: This function or field is behind a LUA_COMPAT_* define and may or may not be available.

Feature Lua 5.1 Lua 5.2 Lua 5.3 Lua 5.4
Base Library
assert(v, [msg]) Yes Yes Yes Yes
collectgarbage([opt, [arg]]) Yes Yes Yes Yes
dofile([file]) Yes Yes Yes Yes
error(message, [level]) Yes Yes Yes Yes
getfenv([f]) Yes No No No
getmetatable(object) Yes Yes Yes Yes
ipairs(t) Yes Yes Yes Yes
load(chunk, [source, [mode, [env]]])) No Yes Yes Yes
load(func, [name]) Yes Yes Yes Yes
loadfile([file, [mode, [env]]]) No Yes Yes Yes
loadfile([file]) Yes Yes Yes Yes
loadstring(string, [name]) Yes Maybe Maybe No
next(table, [index]) Yes Yes Yes Yes
pairs(t) Yes Yes Yes Yes
pcall(f, [...]) Yes Yes Yes Yes
print(...) Yes Yes Yes Yes
rawequal(v1, v2) Yes Yes Yes Yes
rawget(tbl, k) Yes Yes Yes Yes
rawlen(v) No Yes Yes Yes
rawset(tbl, k, v) Yes Yes Yes Yes
select(index, ...) Yes Yes Yes Yes
setfenv(f, table) Yes No No No
setmetatable(table, metatable) Yes Yes Yes Yes
tonumber(e, [base]) Yes Yes Yes Yes
tostring(e) Yes Yes Yes Yes
type(v) Yes Yes Yes Yes
unpack(list, [i, [j]]) Yes Maybe Maybe No
warn(msg1, ...) No No No Yes
xpcall(f, errf, [...]) No Yes Yes Yes
xpcall(f, errf) Yes Yes Yes Yes
Coroutine Library
coroutine.close(co) No No No Yes
coroutine.create(f) Yes Yes Yes Yes
coroutine.isyieldable() No No Yes Yes
coroutine.resume(co, [...]) Yes Yes Yes Yes
coroutine.running() Yes Yes Yes Yes
coroutine.status(co) Yes Yes Yes Yes
coroutine.wrap(f) Yes Yes Yes Yes
coroutine.yield(...) Yes Yes Yes Yes
Package Library
module(name, [...]) Yes Maybe Maybe No
require(modname) Yes Yes Yes Yes
package.config Yes Yes Yes Yes
package.cpath Yes Yes Yes Yes
package.loaded Yes Yes Yes Yes
package.loaders Yes Maybe Maybe No
package.loadlib(libname, funcname) Yes Yes Yes Yes
package.path Yes Yes Yes Yes
package.preload Yes Yes Yes Yes
package.searchers No Yes Yes Yes
package.searchpath(name, path, [sep, [rep]]) No Yes Yes Yes
package.seeall(module) Yes Maybe Maybe No
String Library
string.byte(s, [i, [j]]) Yes Yes Yes Yes
string.char(...) Yes Yes Yes Yes
string.dump(f) Yes Yes Yes Yes
string.dump(f, [strip]) No No Yes Yes
string.find(s, pattern, [init, [plain]]) Yes Yes Yes Yes
string.format(fmt, ...) Yes Yes Yes Yes
string.gmatch(s, pattern) Yes Yes Yes Yes
string.gsub(s, pattern, repl, [n]) Yes Yes Yes Yes
string.len(s) Yes Yes Yes Yes
string.lower(s) Yes Yes Yes Yes
string.match(s, pattern, [init]) Yes Yes Yes Yes
string.pack(fmt, ...) No No Yes Yes
string.packsize(fmt) No No Yes Yes
string.rep(s, n, [sep]) Yes Yes Yes Yes
string.reverse(s) Yes Yes Yes Yes
string.sub(s, i, [j]) Yes Yes Yes Yes
string.unpack(fmt, s, [pos]) No No Yes Yes
string.upper(s) Yes Yes Yes Yes
Table Library
table.concat(tbl, [sep, [i, [j]]]) Yes Yes Yes Yes
table.insert(tbl, [pos,] value) Yes Yes Yes Yes
table.pack(...) No Yes Yes Yes
table.move(a1, f, e, t, [a2]) No No Yes Yes
table.maxn(tbl) Yes Maybe Maybe No
table.remove(tbl, [pos]) Yes Yes Yes Yes
table.sort(tbl, [comp]) Yes Yes Yes Yes
table.unpack(list, [i, [j]])) No Yes Yes Yes
Math Library
math.abs(x) Yes Yes Yes Yes
math.acos(x) Yes Yes Yes Yes
math.asin(x) Yes Yes Yes Yes
math.atan(x) Yes Yes Yes Yes
math.atan(x, [y]) No No Yes Yes
math.atan2(y, x) Yes Yes Maybe Maybe
math.ceil(x) Yes Yes Yes Yes
math.cos(x) Yes Yes Yes Yes
math.cosh(x) Yes Yes Maybe Maybe
math.deg(x) Yes Yes Yes Yes
math.exp(x) Yes Yes Yes Yes
math.floor(x) Yes Yes Yes Yes
math.fmod(x, y) Yes Yes Yes Yes
math.frexp(x) Yes Yes Maybe Maybe
math.huge Yes Yes Yes Yes
math.ldexp(m, e) Yes Yes Maybe Maybe
math.log(x) Yes Yes Yes Yes
math.log(x, [base]) No Yes Yes Yes
math.log10(x) Yes Maybe Maybe Maybe
math.max(x, ...) Yes Yes Yes Yes
math.maxinteger No No Yes Yes
math.min(x, ...) Yes Yes Yes Yes
math.mininteger No No Yes Yes
math.modf(x) Yes Yes Yes Yes
math.pi Yes Yes Yes Yes
math.pow(x, y) Yes Yes Maybe Maybe
math.rad(x) Yes Yes Yes Yes
math.random([m, [n]]) Yes Yes Yes Yes
math.randomseed(x) Yes Yes Yes Yes
math.randomseed([x, [y]]) No No No Yes
math.sin(x) Yes Yes Yes Yes
math.sinh(x) Yes Yes Maybe Maybe
math.sqrt(x) Yes Yes Yes Yes
math.tan(x) Yes Yes Yes Yes
math.tanh(x) Yes Yes Maybe Maybe
math.tointeger(x) No No Yes Yes
math.type(x) No No Yes Yes
math.ult(m, n) No No Yes Yes
Bit Library
bit32.arshift(x, disp) No Yes Maybe No
bit32.band(x, ...) No Yes Maybe No
bit32.bnot(x) No Yes Maybe No
bit32.bor(x, ...) No Yes Maybe No
bit32.btest(x, ...) No Yes Maybe No
bit32.bxor(x, ...) No Yes Maybe No
bit32.extract(x, field, width) No Yes Maybe No
bit32.replace(x, v, field, width) No Yes Maybe No
bit32.lrotate(x, disp) No Yes Maybe No
bit32.lshift(x, disp) No Yes Maybe No
bit32.rrotate(x, disp) No Yes Maybe No
bit32.rshift(x, disp) No Yes Maybe No
UTF8 Library
utf8.char(...) No No Yes Yes
utf8.charpattern No No Yes Yes
utf8.codes(s) No No Yes Yes
utf8.codepoint(s, [i, [j]]) No No Yes Yes
utf8.len(s, [i, [j]]) No No Yes Yes
utf8.offset(s, n, [i]) No No Yes Yes
IO Library
io.close([file]) Yes Yes Yes Yes
io.flush() Yes Yes Yes Yes
io.input([file]) Yes Yes Yes Yes
io.lines([filename]) Yes Yes Yes Yes
io.open(filename, [mode]) Yes Yes Yes Yes
io.output([file]) Yes Yes Yes Yes
io.popen(prog, [mode]) Yes Yes Yes Yes
io.read(...) Yes Yes Yes Yes
io.tmpfile() Yes Yes Yes Yes
io.type(obj) Yes Yes Yes Yes
io.write(...) Yes Yes Yes Yes
file:close() Yes Yes Yes Yes
file:flush() Yes Yes Yes Yes
file:lines() Yes Yes Yes Yes
file:read(...) Yes Yes Yes Yes
file:seek([whence], [offset]) Yes Yes Yes Yes
file:setvbuf(mode, [size]) Yes Yes Yes Yes
file:write(...) Yes Yes Yes Yes
OS Library
os.clock() Yes Yes Yes Yes
os.date([format, [time]]) Yes Yes Yes Yes
os.difftime(t2, t1) Yes Yes Yes Yes
os.execute([command]) Yes Yes Yes Yes
os.exit([code]) Yes Yes Yes Yes
os.exit([code, [close]]) No Yes Yes Yes
os.getenv(varname) Yes Yes Yes Yes
os.remove(filename) Yes Yes Yes Yes
os.rename(oldname, newname) Yes Yes Yes Yes
os.setlocale([locale, [category]]) Yes Yes Yes Yes
os.time([table]) Yes Yes Yes Yes
os.tmpname() Yes Yes Yes Yes
Debug Library
debug.debug() Yes Yes Yes Yes
debug.getfenv([object]) Yes No No No
debug.gethook([thread]) Yes Yes Yes Yes
debug.getinfo([thread], f, [what]) Yes Yes Yes Yes
debug.getlocal([thread], f, local) Yes Yes Yes Yes
debug.getmetatable(object) Yes Yes Yes Yes
debug.getregistry() Yes Yes Yes Yes
debug.getupvalue(f, up) Yes Yes Yes Yes
debug.getuservalue(u) No Yes Yes Yes
debug.getuservalue(u, [n]) No No No Yes
debug.setfenv(object, table) Yes No No No
debug.sethook([thread], hook, mask, [count]) Yes Yes Yes Yes
debug.setlocal([thread], level, local, value) Yes Yes Yes Yes
debug.setmetatable(object, table) Yes Yes Yes Yes
debug.setupvalue(f, up, value) Yes Yes Yes Yes
debug.setuservalue(u, value) No Yes Yes Yes
debug.setuservalue(u, value, [n]) No No No Yes
debug.traceback([thread], [message, [level]]) Yes Yes Yes Yes
debug.upvalueid(f, n) No Yes Yes Yes
debug.upvaluejoin(f1, n1, f2, n2) No Yes Yes Yes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment