Alpha Release of TENUM – Lua on Kotlin Multiplatform (Open Source)
Hello everyone,
we are excited to announce that the alpha version of TENUM, our Lua runtime and toolchain built on Kotlin Multiplatform, is now available as open source.
GitHub: [https://github.com/TENUM-Dev/tenum](https://github.com/TENUM-Dev/tenum)
TENUM aims to make Lua a first-class citizen across modern platforms by compiling to JVM, JavaScript, Linux, Windows, and macOS from a single Kotlin codebase. The project provides a foundation for building full-stack Lua applications without custom C toolchains, while still keeping Lua's simplicity and embedability.
Current Alpha Features:
* Lua interpreter implemented in Kotlin
* tlua (interactive interpreter)
* tluac (compiler runner)
* Multiplatform builds (JVM, JS, native targets)
* Published to npm for easy installation: npm install -g u/tenum-dev/tenum
Run the tools using:
tlua
tluac
Goals:
The alpha release is intended to gather community feedback as we continue stabilizing the runtime and improving compatibility with standard Lua behavior and libraries. We would appreciate input on which areas should be prioritized, including tooling, performance, interoperability, APIs, and language compatibility.
Feedback Welcome:
This is an early release, but the core is open and evolving quickly. If you are interested in Lua on JVM, JS, or native platforms, or in building multiplatform Lua applications, please take a look and let us know your thoughts.
Thanks,
The TENUM Team
https://redd.it/1pjtu44
@r_lua
Hello everyone,
we are excited to announce that the alpha version of TENUM, our Lua runtime and toolchain built on Kotlin Multiplatform, is now available as open source.
GitHub: [https://github.com/TENUM-Dev/tenum](https://github.com/TENUM-Dev/tenum)
TENUM aims to make Lua a first-class citizen across modern platforms by compiling to JVM, JavaScript, Linux, Windows, and macOS from a single Kotlin codebase. The project provides a foundation for building full-stack Lua applications without custom C toolchains, while still keeping Lua's simplicity and embedability.
Current Alpha Features:
* Lua interpreter implemented in Kotlin
* tlua (interactive interpreter)
* tluac (compiler runner)
* Multiplatform builds (JVM, JS, native targets)
* Published to npm for easy installation: npm install -g u/tenum-dev/tenum
Run the tools using:
tlua
tluac
Goals:
The alpha release is intended to gather community feedback as we continue stabilizing the runtime and improving compatibility with standard Lua behavior and libraries. We would appreciate input on which areas should be prioritized, including tooling, performance, interoperability, APIs, and language compatibility.
Feedback Welcome:
This is an early release, but the core is open and evolving quickly. If you are interested in Lua on JVM, JS, or native platforms, or in building multiplatform Lua applications, please take a look and let us know your thoughts.
Thanks,
The TENUM Team
https://redd.it/1pjtu44
@r_lua
GitHub
GitHub - TENUM-Dev/tenum: TENUM is a Kotlin Multiplatform Lua 5.4.8 interpreter and full‑stack toolkit: write UI + backend in Lua…
TENUM is a Kotlin Multiplatform Lua 5.4.8 interpreter and full‑stack toolkit: write UI + backend in Lua, run it across JVM/JS/Native with a single register‑based VM, standard library, CLI, and npm ...
Lua PageMaker: A Lua-powered layout engine for generating magazine-style multi-column pages in LaTeX
I’ve been working on a project that may interest people who enjoy using Lua as a lightweight declarative engine inside other systems.
It’s called Lua PageMaker, and it turns Lua into a page-layout noscripting language for LaTeX.
The idea is simple: Lua computes all frame geometries (columns, banners, figures, sidebars, etc.), then emits
This gives LaTeX something close to a mini InDesign—but fully programmable.
---
## What it does
- Arbitrary multi-column layouts, including variable-width columns
- Static boxes (top banners, figures, sidebars, bottom boxes)
- Boxes can span multiple columns
- Page structure is defined in a small, readable Lua DSL
- Coordinates expressed in screen space (origin = top-left, y downward)
- Deterministic layout (all geometry computed before TeX sees text)
- Only depends on LuaLaTeX
---
## Example DSL (
return {
width = 7.88,
height = 10.75,
left = 0.5,
right = 0.5,
top = 0.75,
bottom = 1,
colsep = 0.25,
pages = {
{
columns = {
{ width = 1/3 },
{ width = 1/3 },
{ width = 1/3 }
},
boxes = {
{ name="topbanner", colfrom=1, colto=3, top=0, h=1.0 },
{ name="sidebar", colfrom=2, colto=3, top=1.0, h=2.5 }
}
}
}
}
Lua computes all coordinates, resolves spans, trims columns, and emits compatible
---
## Why Lua?
LuaTeX provides Lua as an embedded engine, enabling:
- real numeric geometry (no TeX dimension arithmetic)
- custom DSLs
- separation of concerns: geometry in Lua, rendering in TeX
- deterministic, debuggable layout specification
- extensibility and simplicity
The project is intentionally minimalistic: a Lua geometry engine + a declarative page denoscription file.
---
## GitHub
https://github.com/sylvainhalle/lua-pagemaker
---
## Feedback welcome
I’d love to hear ideas about:
- the DSL design
- idiomatic Lua improvements
- extensions to the layout model
- integration with ConTeXt / LuaMetaTeX / SILE
If you try generating your own layouts, please share your results!
https://redd.it/1pk9l28
@r_lua
I’ve been working on a project that may interest people who enjoy using Lua as a lightweight declarative engine inside other systems.
It’s called Lua PageMaker, and it turns Lua into a page-layout noscripting language for LaTeX.
The idea is simple: Lua computes all frame geometries (columns, banners, figures, sidebars, etc.), then emits
flowfram primitives during the TeX run. This gives LaTeX something close to a mini InDesign—but fully programmable.
---
## What it does
- Arbitrary multi-column layouts, including variable-width columns
- Static boxes (top banners, figures, sidebars, bottom boxes)
- Boxes can span multiple columns
- Page structure is defined in a small, readable Lua DSL
- Coordinates expressed in screen space (origin = top-left, y downward)
- Deterministic layout (all geometry computed before TeX sees text)
- Only depends on LuaLaTeX
---
## Example DSL (
pages.lua)return {
width = 7.88,
height = 10.75,
left = 0.5,
right = 0.5,
top = 0.75,
bottom = 1,
colsep = 0.25,
pages = {
{
columns = {
{ width = 1/3 },
{ width = 1/3 },
{ width = 1/3 }
},
boxes = {
{ name="topbanner", colfrom=1, colto=3, top=0, h=1.0 },
{ name="sidebar", colfrom=2, colto=3, top=1.0, h=2.5 }
}
}
}
}
Lua computes all coordinates, resolves spans, trims columns, and emits compatible
flowfram frames.---
## Why Lua?
LuaTeX provides Lua as an embedded engine, enabling:
- real numeric geometry (no TeX dimension arithmetic)
- custom DSLs
- separation of concerns: geometry in Lua, rendering in TeX
- deterministic, debuggable layout specification
- extensibility and simplicity
The project is intentionally minimalistic: a Lua geometry engine + a declarative page denoscription file.
---
## GitHub
https://github.com/sylvainhalle/lua-pagemaker
---
## Feedback welcome
I’d love to hear ideas about:
- the DSL design
- idiomatic Lua improvements
- extensions to the layout model
- integration with ConTeXt / LuaMetaTeX / SILE
If you try generating your own layouts, please share your results!
https://redd.it/1pk9l28
@r_lua
GitHub
GitHub - sylvainhalle/lua-pagemaker: Magazine-Style Page Layouts in Pure LaTeX
Magazine-Style Page Layouts in Pure LaTeX. Contribute to sylvainhalle/lua-pagemaker development by creating an account on GitHub.
Free Lua Course: 7 Modules, 21 Lessons, In‑Browser Execution
https://8gwifi.org/tutorials/lua/
https://redd.it/1pl2fhb
@r_lua
https://8gwifi.org/tutorials/lua/
https://redd.it/1pl2fhb
@r_lua
8gwifi.org
Lua Tutorial - Learn Lua Programming | 8gwifi.org Tutorials
Learn Lua programming from scratch with interactive examples. Free Lua tutorial for beginners to advanced with live code editor.
ZeroBrane installation issues | Linux Ubuntu
My PC runs with the same efficiency as a turnip and so I decided to learn love2d to make games rather than use performance costly game engines. In the tutorial I was watching I had to download and use the ZeroBrane IDE to write noscripts.
When I save the linux download link as an .sh file, give it perms and run it, it gives the error:
Verifying archive integrity...Error in MD5 checksums: 96cd37c6c911cf0d918d98ebca93782a is different from ee3ec7e6138e80b1bce27e6dae079c3b
What is the issue? I have re-downloaded the file multiple times. Thanks.
https://redd.it/1plhw5h
@r_lua
My PC runs with the same efficiency as a turnip and so I decided to learn love2d to make games rather than use performance costly game engines. In the tutorial I was watching I had to download and use the ZeroBrane IDE to write noscripts.
When I save the linux download link as an .sh file, give it perms and run it, it gives the error:
Verifying archive integrity...Error in MD5 checksums: 96cd37c6c911cf0d918d98ebca93782a is different from ee3ec7e6138e80b1bce27e6dae079c3b
What is the issue? I have re-downloaded the file multiple times. Thanks.
https://redd.it/1plhw5h
@r_lua
Reddit
From the lua community on Reddit
Explore this post and more from the lua community
Issues Checking and Comparing Table Values in Lua
Hey all, I'm following a [raycasting tutorial](https://www.youtube.com/watch?v=E18bSJezaUE), and I'm having a little bit of trouble grabbing and comparing values from nested tables. Right now I have a table, Map1, with other tables in it:
local Map1 = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
}
and the way I'm searching through the table for the 0's and 1's is:
function Map1:draw()
for r, row in ipairs(Map1) do
for c, v in ipairs(Map1[r]) do
tile_x = c * TILESIZE
tile_y = r * TILESIZE
if Map1[r][c] == 0 then
love.graphics.setColor(0, 0, 0)
love.graphics.rectangle("fill", tile_x, tile_y, TILESIZE, TILESIZE)
print("drawn blacks")
elseif Map1[r][c] == 1 then
love.graphics.setColor(255, 255, 255)
love.graphics.rectangle("fill", tile_x, tile_y, TILESIZE, TILESIZE)
print("drawn whites")
end
end
end
end
and finally, in my main.lua i have:
flocal consts = require("constants")
local map = require("map")
function love.load()
end
function love.update(dt)
end
function love.draw()
map:draw()
end
I think the check is what's wrong, but I'm not 100% sure. Right now it's checking the value in `Map[r][c]`, which is the same as `v`, but when the code runs it doesn't properly draw the tiles as shown in the table.
https://redd.it/1pltdca
@r_lua
Hey all, I'm following a [raycasting tutorial](https://www.youtube.com/watch?v=E18bSJezaUE), and I'm having a little bit of trouble grabbing and comparing values from nested tables. Right now I have a table, Map1, with other tables in it:
local Map1 = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
}
and the way I'm searching through the table for the 0's and 1's is:
function Map1:draw()
for r, row in ipairs(Map1) do
for c, v in ipairs(Map1[r]) do
tile_x = c * TILESIZE
tile_y = r * TILESIZE
if Map1[r][c] == 0 then
love.graphics.setColor(0, 0, 0)
love.graphics.rectangle("fill", tile_x, tile_y, TILESIZE, TILESIZE)
print("drawn blacks")
elseif Map1[r][c] == 1 then
love.graphics.setColor(255, 255, 255)
love.graphics.rectangle("fill", tile_x, tile_y, TILESIZE, TILESIZE)
print("drawn whites")
end
end
end
end
and finally, in my main.lua i have:
flocal consts = require("constants")
local map = require("map")
function love.load()
end
function love.update(dt)
end
function love.draw()
map:draw()
end
I think the check is what's wrong, but I'm not 100% sure. Right now it's checking the value in `Map[r][c]`, which is the same as `v`, but when the code runs it doesn't properly draw the tiles as shown in the table.
https://redd.it/1pltdca
@r_lua
YouTube
Raycasting Tutorial (in Python)
After 3 years since the last video I finally had the courage to make and upload another one. This time, about a subject that I was willing to teach for a long time: Raycasting
If you think this video helped you, you may consider supporting my work by clicking…
If you think this video helped you, you may consider supporting my work by clicking…
making lua do what it shouldn't: typesafe structs
https://if-not-nil.github.io/lua-structs/
https://redd.it/1plw6o7
@r_lua
https://if-not-nil.github.io/lua-structs/
https://redd.it/1plw6o7
@r_lua
if-not-nil.github.io
making lua do what it shouldn't: typesafe structs
it shouldn't, but it should should, if that makes sense
LuaJIT Compiler
Successfully managed to make a compiler for luaJIT (a lua 5.1 fork/thing optimized for performance) in python
Works by getting the source code of luajit, rewriting the main .c file to execute a specific noscript instead of whatever you have as the first argument, and using a portable minGW thingy to compile it to EXE. (Dosent actually turn it into assembly, im not that good)
This is compatible with most lua noscripts that work for lua 5.1 or less, and luajit noscripts
Should i make it open source?
(I know luastatic exists, but this is way damn simpler)
https://preview.redd.it/aomysk89817g1.png?width=747&format=png&auto=webp&s=0251c0ce550bcdd15e83b3779bc027b9a6d57b65
https://redd.it/1plvch2
@r_lua
Successfully managed to make a compiler for luaJIT (a lua 5.1 fork/thing optimized for performance) in python
Works by getting the source code of luajit, rewriting the main .c file to execute a specific noscript instead of whatever you have as the first argument, and using a portable minGW thingy to compile it to EXE. (Dosent actually turn it into assembly, im not that good)
This is compatible with most lua noscripts that work for lua 5.1 or less, and luajit noscripts
Should i make it open source?
(I know luastatic exists, but this is way damn simpler)
https://preview.redd.it/aomysk89817g1.png?width=747&format=png&auto=webp&s=0251c0ce550bcdd15e83b3779bc027b9a6d57b65
https://redd.it/1plvch2
@r_lua
Roblox coding for everyone !
Hi there ! If you see this you may be a person that need a code for his Roblox game!
I'm here to help!
I was a rookie noscripter back then and I know how hard it is to code and make a game so everyone who will send me a message or a comment and I will get you the code (noscript) for acctualy free
If it has the limit of 200 words if not you will need to pay 400 Robux for extra 1000
Good luck!
https://redd.it/1plu6vo
@r_lua
Hi there ! If you see this you may be a person that need a code for his Roblox game!
I'm here to help!
I was a rookie noscripter back then and I know how hard it is to code and make a game so everyone who will send me a message or a comment and I will get you the code (noscript) for acctualy free
If it has the limit of 200 words if not you will need to pay 400 Robux for extra 1000
Good luck!
https://redd.it/1plu6vo
@r_lua
Reddit
From the lua community on Reddit
Explore this post and more from the lua community
I need some help with lua-periphery
Okay, so I'm making a silly little desktop toy for myself, as a way to learn some more advanced Lua and Love2d, running on a Raspi 4.
Here's the code so far: https://hastebin.cc/decutuhomu.lua
So here's what happens - it launches a window (because Love2D), and in the terminal it just waits. I have a little 4x3 matrix keypad wired up to the GPIO pins, and I can correctly get the button pressed. That part's all sorted. What's currently happening is it lets me press any button, but only registers a different button from the last pressed. ie, I can press 1 2 3, no problem. If I press the same button twice, it doesn't register. (I know why). How can I set this up to 'release' the button pressed?
The library I'm using is lua-periphery, (https://github.com/vsergeev/lua-periphery) which seems to be well documented, but as I'm a relative noob to Lua, the lack of examples isn't really helping.
Basically, I want to be able to press a button repeatedly, with each separate press counting.
https://redd.it/1pmzo5u
@r_lua
Okay, so I'm making a silly little desktop toy for myself, as a way to learn some more advanced Lua and Love2d, running on a Raspi 4.
Here's the code so far: https://hastebin.cc/decutuhomu.lua
So here's what happens - it launches a window (because Love2D), and in the terminal it just waits. I have a little 4x3 matrix keypad wired up to the GPIO pins, and I can correctly get the button pressed. That part's all sorted. What's currently happening is it lets me press any button, but only registers a different button from the last pressed. ie, I can press 1 2 3, no problem. If I press the same button twice, it doesn't register. (I know why). How can I set this up to 'release' the button pressed?
The library I'm using is lua-periphery, (https://github.com/vsergeev/lua-periphery) which seems to be well documented, but as I'm a relative noob to Lua, the lack of examples isn't really helping.
Basically, I want to be able to press a button repeatedly, with each separate press counting.
https://redd.it/1pmzo5u
@r_lua
Showcase We are building a Lua 5.4 implementation distributable via NPM. It runs standard test suites, but we need help breaking it!
Hi everyone,
We’ve been working hard on TENUM, specifically on our Lua implementation (`tlua`). Our goal is to make modern app development fast and accessible, and a huge part of that is a robust Lua implementation.
We recently reached a milestone where we can successfully run foreign noscripts and testing frameworks (like `u-test`) without issues.
The Demo
I put together a quick video showing how to install the runtime and run a standard unit testing framework in under 2 minutes without any complex build chains:
https://youtu.be/QYODYqnkzvQ
How to try it:
If you have Node installed, it's just a one-line install:
```bash
npm install -g u/tenumdev
tlua your\noscript.lua
Why we are posting here: While we are aiming for full Lua 5.4.8 compatibility, we know that the last 5% is the hardest. We are heavily hunting for edge cases right now.
We would love for the r/Lua community to:
1. Install
2. Throw your weirdest, most complex noscripts at it.
3. Report what breaks.
If you find an assertion failure or a noscript that behaves differently than the standard Lua interpreter, please provide an issue with a minimum test case on our GitHub. We are happy to introduce that test case to our suite and fix it immediately.
Repo: https://github.com/TENUM-Dev/tenum/tree/dev
Let us know what you think!
https://redd.it/1pn5pha
@r_lua
Hi everyone,
We’ve been working hard on TENUM, specifically on our Lua implementation (`tlua`). Our goal is to make modern app development fast and accessible, and a huge part of that is a robust Lua implementation.
We recently reached a milestone where we can successfully run foreign noscripts and testing frameworks (like `u-test`) without issues.
The Demo
I put together a quick video showing how to install the runtime and run a standard unit testing framework in under 2 minutes without any complex build chains:
https://youtu.be/QYODYqnkzvQ
How to try it:
If you have Node installed, it's just a one-line install:
```bash
npm install -g u/tenumdev
tlua your\noscript.lua
Why we are posting here: While we are aiming for full Lua 5.4.8 compatibility, we know that the last 5% is the hardest. We are heavily hunting for edge cases right now.
We would love for the r/Lua community to:
1. Install
tlua.2. Throw your weirdest, most complex noscripts at it.
3. Report what breaks.
If you find an assertion failure or a noscript that behaves differently than the standard Lua interpreter, please provide an issue with a minimum test case on our GitHub. We are happy to introduce that test case to our suite and fix it immediately.
Repo: https://github.com/TENUM-Dev/tenum/tree/dev
Let us know what you think!
https://redd.it/1pn5pha
@r_lua
YouTube
Run Lua Scripts Instantly with NPM (No Build Chain Required) | TENUM Demo
We have made major updates to our `tlua` implementation! In this video, we demonstrate how easily you can run foreign Lua noscripts locally using TENUM without setting up a complex build chain.
We successfully ran `u-test` (a unit testing framework) on our…
We successfully ran `u-test` (a unit testing framework) on our…
Ai with Lua?
Is there any ai that can write Lua coding for me that is free (not just free tier like fully free no limits) if your just gonna say something about ai slop or trash just skip this post
https://redd.it/1po4123
@r_lua
Is there any ai that can write Lua coding for me that is free (not just free tier like fully free no limits) if your just gonna say something about ai slop or trash just skip this post
https://redd.it/1po4123
@r_lua
Reddit
From the lua community on Reddit
Explore this post and more from the lua community
I need help executing lua files on VScode
(Sorry for bad english)
I'm using PopOS
Already installed lua with "sudo apt install 5.4" and everything is fine.
When I try to execute a file in VScode terminal with "lua5.4 filename.lua " or "lua filename.lua"
It appears "lua5.4: command not found"
Can someone help me please? Im new on Linux and dont know if I need to do another command on terminal.
https://redd.it/1pp8se1
@r_lua
(Sorry for bad english)
I'm using PopOS
Already installed lua with "sudo apt install 5.4" and everything is fine.
When I try to execute a file in VScode terminal with "lua5.4 filename.lua " or "lua filename.lua"
It appears "lua5.4: command not found"
Can someone help me please? Im new on Linux and dont know if I need to do another command on terminal.
https://redd.it/1pp8se1
@r_lua
Reddit
From the lua community on Reddit
Explore this post and more from the lua community
How to prevent Lua from aborting the entire program
im trying to embed Lua 5.3.6 into a game, but i dont want lua to abort my program when it encouters an error, and i cant find a way to make sure these two functions are called in protected mode, the first function is called from a lua_CFunction, second is a lua_CFunction, i dont want to have to call all my c functions using pcall in lua, but im fine with pcall in cpp
GameObjectType get_GameObjectType(lua_State L, const int idx) {
void ud = luaL_checkudata(L, idx, "core.GameObjectType");
luaL_argcheck(L, ud != nullptr, idx, "GameObject expected");
return static_cast<GameObjectType >(ud);
}
static int coregetroot (luaState *L) {
auto *gameobjecttype = createGameObjectType(L);
try {
gameobjecttype->object = core::getroot();
} catch (const std::exception& e) {
luaLerror(L,e.what());
}
return 1;
};
https://redd.it/1pql0w6
@r_lua
im trying to embed Lua 5.3.6 into a game, but i dont want lua to abort my program when it encouters an error, and i cant find a way to make sure these two functions are called in protected mode, the first function is called from a lua_CFunction, second is a lua_CFunction, i dont want to have to call all my c functions using pcall in lua, but im fine with pcall in cpp
GameObjectType get_GameObjectType(lua_State L, const int idx) {
void ud = luaL_checkudata(L, idx, "core.GameObjectType");
luaL_argcheck(L, ud != nullptr, idx, "GameObject expected");
return static_cast<GameObjectType >(ud);
}
static int coregetroot (luaState *L) {
auto *gameobjecttype = createGameObjectType(L);
try {
gameobjecttype->object = core::getroot();
} catch (const std::exception& e) {
luaLerror(L,e.what());
}
return 1;
};
https://redd.it/1pql0w6
@r_lua
Reddit
From the lua community on Reddit
Explore this post and more from the lua community