https://github.com/CDSoft/luax Skip to content Navigation Menu Toggle navigation Sign in * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Resources + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} CDSoft / luax Public * * Notifications * Fork 8 * Star 93 * luax is a Lua interpreter and REPL based on Lua 5.4, augmented with some useful packages. It is also a "compiler" that produces standalone executables from Lua scripts. cdelord.fr/luax License GPL-3.0 license 93 stars 8 forks Branches Tags Activity Star Notifications * Code * Issues 1 * Pull requests 0 * Actions * Projects 0 * Security * Insights Additional navigation options * Code * Issues * Pull requests * Actions * Projects * Security * Insights CDSoft/luax This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. master BranchesTags Go to file Code Folders and files Name Name Last commit message Last commit date Latest commit History 585 Commits .github .github doc doc ext ext libluax libluax lua lua luax luax tests tests tools tools .editorconfig .editorconfig .gitignore .gitignore .luarc.json .luarc.json LICENSE LICENSE README.md README.md bootstrap.ninja bootstrap.ninja bootstrap.sh bootstrap.sh build.lua build.lua View all files Repository files navigation * README * GPL-3.0 license [luax-banne] Lua eXtended luax is a Lua interpreter and REPL based on Lua 5.4, augmented with some useful packages. luax can also produce executable scripts from Lua scripts. luax runs on several platforms with no dependency: * Linux (x86_64, aarch64) * MacOS (x86_64, aarch64) * Windows (x86_64) luax can compile scripts from and to any of these platforms. It can produce scripts that can run everywhere Lua or LuaX is installed as well as standalone executables containing the LuaX runtime and the Lua scripts. The target platform can be explicitly specified to cross-compile^1 scripts for a supported platform. Getting in touch * cdelord.fr/luax * github.com/CDSoft/luax Requirements * Ninja: to compile LuaX using the LuaX Ninja file * C compiler (cc, gcc, clang, ...): to generate the Ninja file Compilation Quick compilation The script bootstrap.sh installs ninja, zig and compiles LuaX. Once done, LuaX can be installed with ninja install. git must already be installed, which is likely to be the case if LuaX has been cloned with git... $ git clone https://github.com/CDSoft/luax $ cd luax $ ./bootstrap.sh $ ninja install If this fails, please try a manual compilation. Contributions on non supported platforms are welcome. Manual compilation luax is written in C and Lua. The build system uses Ninja and Zig (automatically downloaded by the Ninja file). Just download luax (https://github.com/CDSoft/luax), generate build.ninja and run ninja: $ git clone https://github.com/CDSoft/luax $ cd luax $ ninja -f bootstrap.ninja # compile Lua and generate build.ninja $ ninja # compile LuaX $ ninja test # run tests $ ninja doc # generate LuaX documentation Note: ninja will download a Zig compiler. If the bootstrap stage fails, you can try to: 1. use another C compiler: + CC=gcc ninja -f bootstrap.ninja to compile Lua with gcc instead of cc + CC=clang ninja -f bootstrap.ninja to compile Lua with clang instead of cc + ... 2. or install Lua and generate build.ninja manually: + apt install lua, dnf install lua, ... + lua tools/bang.lua to generate build.lua with the Lua interpreter provided by your OS Compilation options Option Description bang -- fast Optimized for speed bang -- small Optimized for size bang -- debug Debug symbols kept, not optimized bang -- san Compiled with ASan and UBSan (implies clang) bang -- zig Compile LuaX with Zig bang -- gcc Compile LuaX with gcc bang -- clang Compile LuaX with clang bang must be run before ninja to change the compilation options. lua tools/bang.lua can be used instead of bang if it is not installed. The default compilation options are fast and zig. Zig is downloaded by the ninja file. gcc and clang must be already installed. Compilation in debug mode LuaX can be compiled in debug mode (less optimization, debug symbols kept in the binaries). With the san option, the tests are executed with ASan and UBSan. They run slower but this helps finding tricky bugs. $ git clone https://github.com/CDSoft/luax $ cd luax $ tools/bang.lua -- debug san # generate build.ninja in debug mode with sanitizers $ ninja # compile LuaX $ ninja test # run tests on the host Cross-compilation luax can compile scripts and link them to precompiled libraries for all supported targets. E.g.: to produce an executable containing the LuaX runtime for the current host and hello.lua: $ luax compile -t native -o hello hello.lua E.g.: to produce an executable containing the LuaX runtime for linux-x86_64-musl and hello.lua: $ luax compile -t linux-x86_64-musl -o hello hello.lua E.g.: to produce an executable with the compiled Lua bytecode with no debug information: $ luax compile -s -t linux-x86_64-musl -o hello hello.lua luax compile can compile Lua scripts to Lua bytecode. If scripts are large they will start quickly but will run as fast as the original Lua scripts. Precompiled LuaX binaries In case precompiled binaries are needed (GNU/Linux, MacOS, Windows), some can be found at cdelord.fr/hey. These archives contain LuaX as well as some other softwares more or less related to LuaX. Warning: There are Linux binaries linked with musl and glibc. The musl binaries are platform independent but can not load shared libraries. The glibc binaries can load shared libraries but may depend on some specific glibc versions on the host. Installation $ ninja install # install luax to ~/.local/bin and ~/.local/lib $ PREFIX=/usr ninja install # install luax to /usr/bin and /usr/lib luax is a single autonomous executable. It does not need to be installed and can be copied anywhere you want. LuaX artifacts ninja install installs: * $PREFIX/bin/luax: LuaX binary * $PREFIX/bin/luax.lua: a pure Lua REPL reimplementing some LuaX libraries, usable in any Lua 5.4 interpreter (e.g.: lua, pandoc lua, ...) * $PREFIX/bin/luax-pandoc.lua: LuaX run in a Pandoc Lua interpreter * $PREFIX/lib/libluax.so: Linux LuaX shared libraries * $PREFIX/lib/libluax.dylib: MacOS LuaX shared libraries * $PREFIX/lib/libluax.dll: Windows LuaX shared libraries * $PREFIX/lib/luax.lua: a pure Lua reimplementation of some LuaX libraries, usable in any Lua 5.4 interpreter. Usage luax is very similar to lua and adds more options to compile scripts: usage: luax [cmd] [options] Commands: "help" (or "-h") Show this help "version" (or "-v") Show LuaX version "run" (or none) Run scripts "compile" (or "c") Compile scripts "env" Set LuaX environment variables "run" options: -e stat execute string 'stat' -i enter interactive mode after executing 'script' -l name require library 'name' into global 'name' -l g=name require library 'name' into global 'g' -l _=name require library 'name' (no global variable) -v show version information -- stop handling options - stop handling options and execute stdin script [args] script to execute "compile" options: -t target name of the targetted platform -t list list available targets -o file name the executable file to create -b compile to Lua bytecode -s emit bytecode without debug information -k key script encryption key -q quiet compilation (error messages only) scripts scripts to compile Environment variables: LUA_INIT_5_4, LUA_INIT code executed before handling command line options and scripts (not in compilation mode). When LUA_INIT_5_4 is defined, LUA_INIT is ignored. PATH PATH shall contain the bin directory where LuaX is installed LUA_PATH LUA_PATH shall point to the lib directory where the Lua implementation of LuaX lbraries are installed LUA_CPATH LUA_CPATH shall point to the lib directory where LuaX shared libraries are installed PATH, LUA_PATH and LUA_CPATH can be set in .bashrc or .zshrc with << luax env >>. E.g.: eval $(luax env) << luax env >> can also generate shell variables from a script. E.g.: eval $(luax env script.lua) When compiling scripts (options -t and -o), the scripts shall contain tags (e.g. in comments) showing how the script is used by LuaX: * --@MAIN: main script (must be unique) * --@LOAD: library that is require'd before the main script is run and stored in a global variable * --@LOAD=: as --@LOAD but the module is stored in a global variable with the given name * --@LIB: library that must be explicitly require'd by the main script * --@LIB=: library that is require'd with instead of the source filename. Scripts without tags are classified using a simplistic heuristic: * if the last non empty line starts with return then it is a library (as if it contained a @LIB tag) * otherwise it is the main script (as if it contained the @MAIN tag). This heuristic should work for most of the Lua scripts but explicit tags are recommended. LuaX can also embed files that are not Lua scripts. These files are embedded as Lua modules that return the file content as a string. In this case, the module name if the file name. Note for Windows users: since Windows does not support shebangs, a script script shall be explicitly launched with luax (e.g.: luax script). If script is not found, it is searched in the installation directory of luax or in $PATH. Examples # Compilation (standalone executable script for LuaX) $ luax compile -o executable main.lua lib1.lua lib2.lua $ ./executable # equivalent to luax main.lua # Compilation for Lua $ luax compile -o executable -t lua main.lua lib1.lua lib2.lua $ ./executable # equivalent to lua main.lua # Compilation for Pandoc Lua $ luax compile -o executable -t pandoc main.lua lib1.lua lib2.lua $ ./executable # equivalent to pandoc lua main.lua # Available targets $ luax compile -t list luax lua pandoc native linux-x86_64 linux-x86_64-musl linux-aarch64 linux-aarch64-musl macos-x86_64 macos-aarch64 windows-x86_64 Built-in modules The luax runtime comes with a few builtin modules. Some modules are heavily inspired by BonaLuna and lapp. * LuaX interactive usage: improved Lua REPL * package: modified Lua package package * debug: modified Lua package debug * import: import Lua scripts to user table instead of _G * F: functional programming inspired functions * fs: file system management * sh: shell command execution * mathx: complete math library for Lua * imath: arbitrary precision integer and rational arithmetic library * qmath: rational number library * complex: math library for complex numbers based on C99 * ps: Process management module * sys: System module * term: Terminal manipulation module * crypt: cryptography module * lz4: Extremely Fast Compression algorithm * lpeg: Parsing Expression Grammars For Lua * luasocket: Network support for the Lua language * argparse: Feature-rich command line parser for Lua * serpent: Lua serializer and pretty printer * cbor: pure Lua implementation of the CBOR * linenoise: A small, portable GNU readline replacement with UTF-8 support * json: JSON Module for Lua Shared libraries LuaX is also available as a shared library. This shared library is a Lua module that can be loaded with require. It provides the same modules than the LuaX executable and can be used by a regular Lua interpreter (e.g.: lua, pandoc, ...). E.g.: $ lua -l libluax Lua 5.4.7 Copyright (C) 1994-2024 Lua.org, PUC-Rio > F = require "F" > F.range(100):sum() 5050 > F.show({x=1, y=2}) {x=1, y=2} > F.show({x=1, y=2}, {indent=4}) { x = 1, y = 2, } Pure Lua modules LuaX modules also provide pure Lua implementations (no LuaX dependency). The script lib/luax.lua can be reused in pure Lua programs: * luax.lua: LuaX modules reimplemented in pure Lua (except LuaSocket and lpeg) License luax is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. luax is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with luax. If not, see . For further information about luax you can visit http://cdelord.fr/luax luax uses other third party softwares: * Zig: General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. (MIT license) * Lua 5.4: Copyright (C) 1994-2023 Lua.org, PUC-Rio (MIT license) * Lpeg: Parsing Expression Grammars For Lua (MIT license) * luasocket: Network support for the Lua language (LuaSocket 3.0 license) * serpent: Lua serializer and pretty printer. (MIT license) * LZ4: Extremely Fast Compression algorithm (License) * Argparse: a feature-rich command line parser for Lua (MIT license ) * Linenoise: A minimal, zero-config, BSD licensed, readline replacement (BSD license) * dkjson.lua: JSON Module for Lua (MIT license) * CBOR: pure Lua implementation of the CBOR (License) Footnotes 1. luax uses zig to link the LuaX runtime with the Lua scripts. The Lua scripts are actually compiled to Lua bytecode. luax produces executables that do not require LuaX to be installed. - About luax is a Lua interpreter and REPL based on Lua 5.4, augmented with some useful packages. It is also a "compiler" that produces standalone executables from Lua scripts. cdelord.fr/luax Topics c interpreter lua Resources Readme License GPL-3.0 license Activity Stars 93 stars Watchers 2 watching Forks 8 forks Report repository Releases 260 tags Sponsor this project Sponsor Learn more about GitHub Sponsors Packages 0 No packages published Languages * C 57.6% * Lua 40.7% * C++ 1.1% * Shell 0.6% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.