9 releases
| 0.2.9 | Dec 28, 2025 |
|---|---|
| 0.2.8 | Dec 22, 2025 |
| 0.2.7 | Sep 27, 2025 |
| 0.2.6 | Aug 28, 2025 |
| 0.1.1 | Dec 11, 2024 |
#1739 in Programming languages
89KB
2K
SLoC
Dalbit
Why is this folder here? it's because we use custom rules to provide some features for example module resolution
Dalbit(달빛) is a Luau-to-Lua transpiler, designed specifically for Lua 5.3.
TO-DOs
- Implement CLI.
- Implement basic transpilation process using
darkluaandfull-moon. - Implement modifiers (such as converting number literals and generalized iterations)
- Implement basic lua polyfills.
- Add tests for polyfills.
- Add tests for transpilation. (to ensure the same results in lua and luau)
- Add tests for dalbit internally.
- Add logging for dalbit internally for debug.
-
convert_bit32modifier now convertsbit32.btest. - Add comments for docs and code readability. (WIP)
- Optimize polyfill.
Installation
From Releases
Using Cargo (build from source)
cargo install dalbit --locked
Usage
init
Initializes dalbit manifest file in the current path.
dalbit init
fetch
Fetches and updates lua polyfills.
- This polyfill can be found here.
dalbit fetch
transpile
Transpiles luau code to lua code.
dalbit transpile
clean
Cleans polyfill caches from disk.
dalbit clean
Example
dalbit.toml
input = "input.luau"
output = "output.lua"
file_extension = "lua"
target_version = "lua53"
minify = true
[modifiers]
[polyfill]
repository = "https://github.com/CavefulGames/dalbit-polyfill"
injection_path = "__polyfill__"
inputs/input.luau
local obj = { items = {1, 4, 9} }
setmetatable(obj, { __iter = function(o) return next, o.items end })
for k, v in obj do
print(k * k)
end
outputs/output.luau
local setmetatable=require'./__polyfill__'.setmetatable local __DALBIT_getmetatable_iter=require'./__polyfill__'.__DALBIT_getmetatable_iter local type=require'./__polyfill__'.type local next=require'./__polyfill__'.next local module=nil local package=nil local dofile=nil local loadfile=nil local load=nil local obj={items={1,4,9}}
setmetatable(obj,{__iter=function(o)return next,o.items end})do local _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c=
obj if type(_DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c)=='table'then local m=__DALBIT_getmetatable_iter(_DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c)if type(m)=='table'and type(m.__iter)=='function'then _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c=m.__iter(_DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c)else _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c=next, _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c end end for k,v in _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c,_DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c,_DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c do
print(k*k)
end end
How does it work?
- Dalbit utilizes darklua and full-moon to transform lua scripts.
Real-world use cases
- Kaledis - A tool that enables Luau to work with Love2D, simplifying project management, transpiling, and configuration.
- Overblox - A tool that can transpile Roblox scripts to OVERDARE scripts using Dalbit.
Why darklua-demo over darklua?
darklua-demois a temporary fork to work properly with dal.darklua-demowill be replaced by officialdarkluaonce darklua released with important features to work properly with dal.
Contributions
Any issues, advices, and PRs for contribution are welcome!
Special Thanks
- seaofvoices/darklua - Providing important and cool lua mutating rules.
- Kampfkarren/full-moon - A lossless Lua parser.
Trivia
The name of this project, Dalbit, translates to "moonshine" in Korean.
Dependencies
~30–49MB
~818K SLoC