This project provides bindings for Raylib (a simple and easy-to-use game development library) to be used with Lua, a powerful, efficient, lightweight scripting language. With this binding, you can use Raylib's functionalities directly from Lua scripts, enabling rapid development of games and graphical applications.
- Complete raylib 6.0 API coverage — every public
RLAPIfunction inraylib.his bound (606 callables exposed viarequire("raylib")) - Simple, idiomatic Lua bindings spanning drawing, audio, textures, models, shaders, 3D/2D cameras & coordinate transforms, render-to-texture / blend / scissor modes, gamepad/gesture/touch input, filesystem & data utilities, VR, and automation events
- Colors as
{r,g,b,a}tables or named constants (RED,RAYWHITE, …);ClearBackgroundandDrawRectangleadditionally accept a packed0xRRGGBBAAinteger - Autocomplete available for VSCode: https://marketplace.visualstudio.com/items?itemName=LegendaryRedfox.raylib-lua-bindings-autocomplete
- Easily extendable: Add more bindings as you go!
Before building this project, ensure you have the following software installed:
- GCC: C compiler used for compiling the bindings.
- Make: A tool to automate the build process.
- libX11 development headers (usually
libx11-dev).
Raylib 6.0 and Lua 5.5.0 are vendored as static libraries — no system installation required.
- GCC (MinGW): C compiler used for compiling the bindings.
- Make: A tool to automate the build process.
Note: Windows users must supply a Lua 5.5.0
lua.lib(the vendored one is for Lua 5.4) and a Raylib 6.0 import library.
- Raylib development files
- Lua development files
git clone https://github.com/yourusername/raylib-lua-bindings.git
cd raylib-lua-bindingsI'm still working on that
Download and install MinGW (GCC for Windows). Download Raylib and Lua (make sure to install the development headers).
Run the following command to compile and create the shared library:
makeThis will generate the appropriate shared library file:
Linux: libraylib.so Windows: raylib.dll
In your Lua script, you can require the Raylib bindings as follows:
local raylib = require("raylib")
-- Initialize the window
raylib.InitWindow(800, 600, "Raylib Lua Example")
-- Main game loop
while not raylib.WindowShouldClose() do
raylib.BeginDrawing()
raylib.ClearBackground(DARKGRAY) -- named color constant
raylib.DrawText("Hello, Raylib and Lua!", 10, 10, 20, DARKGREEN)
raylib.EndDrawing()
end
-- Close window
raylib.CloseWindow()Colors are passed as a named constant or a {r,g,b,a} table. A packed 32-bit
integer (0xRRGGBBAA) is additionally accepted by ClearBackground and
DrawRectangle; every other function expects a table or named constant:
raylib.ClearBackground(RAYWHITE) -- named constant (a table)
raylib.ClearBackground({r=245, g=245, b=245, a=255}) -- explicit table
raylib.ClearBackground(0xF5F5F5FF) -- packed int (ClearBackground/DrawRectangle only)
raylib.DrawText("hi", 10, 10, 20, RAYWHITE) -- other calls need a table/constantThe suite (237 checks) covers text utilities and parsing, hashing (CRC32/MD5/SHA1/SHA256), color utilities, CPU-side image operations (generate/inspect/copy/transform), filesystem & path helpers, data (de)compression and base64, and random sequences — everything that runs without an open window.
make testTests are plain Lua scripts in tests/ run against the bundled raylib.so. The only requirement is a Lua 5.5 interpreter on PATH.
To remove the object files and shared library:
make cleanThis will delete the compiled object files and the generated shared library (libraylib.so or raylib.dll).
| Make target | Effect |
|---|---|
make |
Compile all sources, link raylib.so / raylib.dll |
make test |
Run the Lua unit test suite |
make clean |
Remove object files and the shared library |
- The project works well on Windows; Linux support is in progress and some features may not behave correctly.
- Audio stream processor callbacks dispatch to fixed Lua global function names, so only one processor of each type can be active at a time.
- Raylib objects (textures, images, sounds, fonts, models, …) are returned as userdata and must be released with the matching
Unload*; they are not garbage-collected automatically. - Contributions to help resolve these issues are highly welcome.
If you would like to contribute, please feel free to fork the repository, submit issues, and create pull requests.
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a pull request
