9 releases
| new 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 |
#836 in Programming languages
Used in kaledis
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–48MB
~814K SLoC