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