A low-level compiled alternative to C, C++, and more!
Why? • Goals • Status • Getting Started • Usage • Join Us
Luma is a modern systems programming language designed to provide the performance and control of low-level languages while maintaining developer productivity and code clarity. Built from the ground up to address common pain points in systems programming.
Modern systems programming often involves a trade-off between performance, safety, and developer experience. Luma aims to bridge this gap by providing:
- Direct hardware access without sacrificing code readability
- Predictable performance characteristics for systems-critical applications
- Developer-friendly tooling that doesn't compromise on compile speed
- Memory safety options that can be opted into when needed
- 🎯 Minimal & Explicit Syntax – Avoid hidden control flow or magic
- ⚡ Fast Compilation – Prioritize developer feedback cycles
- 🚀 Zero-Cost Abstractions – Avoid performance penalties for convenience
- 🔧 Manual Memory Control – Support fine-grained memory management
- 🛠️ Toolchain Simplicity – No complex build systems required
Current Phase: Early Development
Luma is currently in active development. Core language features are being implemented and the compiler architecture is being established. Check out the todo to see what is being worked on or that is done.
You'll need the following tools installed:
- Make - Build automation
- GCC - GNU Compiler Collection
- LLVM - Compiler infrastructure (Version 20.0+ required)
- Valgrind (optional) - Memory debugging
Important: Luma requires LLVM 20.0 or higher due to critical bug fixes in the constant generation system.
Known Issues:
- LLVM 19.1.x: Contains a regression that causes crashes during code generation (
illegal hardware instruction
errors) - LLVM 18.x and older: Not tested, may have compatibility issues
If you encounter crashes during the "LLVM IR" compilation stage (typically at 60% progress), this is likely due to an incompatible LLVM version.
llvm-config --version
Arch Linux:
sudo pacman -S llvm
# For development headers:
sudo pacman -S llvm-libs
Fedora/RHEL:
sudo dnf update llvm llvm-devel llvm-libs
# Or install specific version:
sudo dnf install llvm20-devel llvm20-libs
Ubuntu/Debian:
sudo apt update
sudo apt install llvm-20-dev
macOS (Homebrew):
brew install llvm
"illegal hardware instruction" during compilation:
- This indicates an LLVM version incompatibility
- Upgrade to LLVM 20.0+ to resolve this issue
- See LLVM Version Requirements above
Missing LLVM development headers:
# Install development packages
sudo dnf install llvm-devel # Fedora/RHEL
sudo apt install llvm-dev # Ubuntu/Debian
Install the required tools using Scoop:
# Install Scoop package manager first if you haven't: https://scoop.sh/
scoop install python ninja cmake mingw
- Clone the LLVM repository:
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
- Configure the build:
cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_ASM_COMPILER=gcc
- Build LLVM (adjust
-j8
based on your CPU cores):
ninja -C build -j8
- Build time: 30 minutes to several hours depending on hardware
- Disk space required: ~15-20 GB for full build
- RAM usage: Can use 8+ GB during compilation
- If you encounter memory issues, reduce parallelism:
ninja -C build -j4
orninja -C build -j1
The compiled binaries will be located in build/bin/
To use clang
, lld
, and other LLVM tools from anywhere, add the build directory to your PATH:
Option 1: Temporary (current session only)
set PATH=%PATH%;C:\path\to\your\llvm-project\build\bin
Option 2: Permanent
- Open System Properties → Advanced → Environment Variables
- Edit the
PATH
variable for your user or system - Add the full path to your
build\bin
directory (e.g.,C:\Users\yourname\Desktop\llvm-project\build\bin
)
Option 3: Using PowerShell (permanent)
[Environment]::SetEnvironmentVariable("PATH", $env:PATH + ";C:\path\to\your\llvm-project\build\bin", "User")
After adding to PATH, open a new command prompt and test:
clang --version
lld --version
llvm-config --version
Interested in contributing to Luma? We'd love to have you!
- Check out our GitHub repository
- Join our Discord community
- Look at the doxygen-generated docs for architecture details here
- If you would like to contribute, please read our contribution guidelines.
Built with ❤️ by the Luma community