A statically typed, declarative, and reactive programming language for modeling complex state-driven systems. Define relationships, write rules the runtime handles the rest.
entity SecuritySensor {
is_armed: Boolean
motion_detected: Boolean
-- Derived: alert only if sensor is armed
is_breached := is_armed and motion_detected
}
rule "Intrusion Alert"
when any SecuritySensor.is_breached becomes true {
alert
severity: "critical",
message: "Security Breach: {SecuritySensor.zone}",
code: "SEC_001"
}
cooldown 1h
Lumina inverts the control paradigm. Declare relationships, define constraints the runtime resolves everything deterministically.
Define what your state should be, not how to get there.
Derived fields (:=) maintain guaranteed relationships through topological evaluation using
Kahn's algorithm.
Rules fire on edge transitions via becomes. Temporal triggers
handle duration-based logic with for and every. The DAG evaluation graph cascades
state changes without divergent recursion.
Before every state mutation, the runtime deep-copy snapshots memory. If an
@range invariant is violated or recursion limit is breached, it rolls back instantly -
guaranteed stable state.
Traditional languages make you write the plumbing. Lumina lets you declare intent.
You write poll loops, threshold checks, state tracking, cooldown timers, and alerting logic. Every detail is your responsibility.
def check_security(sensors):
for id, s in sensors.items():
if s.is_armed and s.motion and not s.alerted:
if time.time() - s.last_alert > 3600:
send_alert(f"Intrusion: {id}")
s.alerted = True
s.last_alert = time.time()
elif not s.motion and s.alerted:
send_clear(f"Zone Clear: {id}")
s.alerted = False
You describe the truth the engine handles edge detection, evaluation order, and alerting. No loops. No state tracking. No bugs.
cooldown built into the languageentity SecuritySensor {
is_armed: Boolean
motion_detected: Boolean
is_breached := is_armed and motion_detected
}
rule "High Priority Breach"
when any SecuritySensor.is_breached becomes true {
alert
severity: "critical",
message: "Intrusion Detected!",
code: "SEC_CRIT_001"
on clear {
show "Zone Secured"
}
}
cooldown 1h
Every Lumina program flows through a deterministic compiler pipeline with zero-cost abstractions and strict memory safety.
High-throughput DFA tokenizer via the logos crate. Handles string
interpolation mode-switching.
Hybrid recursive-descent & Pratt parsing with full operator precedence.
Resolves import statements with circular dependency detection and AST
merging.
Dependency graph construction via Kahn's algorithm, static type safety, and
@range invariant checks.
Snapshot VM with state allocation, becomes edge detection, temporal
scheduling, and self-healing rollback.
Run Lumina programs directly in the browser via wasm-pack and wasm-bindgen.
Syntax highlighting, snippets, bracket matching, and LSP (v1.5) for .lum files.
Stable C ABI via liblumina_ffi.so. Python wrapper via ctypes, Go wrapper via
cgo.
MQTT, HTTP Poll, Rust Channel, File Watch, and Static adapters for real-world data sources.
Multi-file projects with import, dependency resolution, circular import detection, and AST
merging.
Real-time diagnostics, hover tooltips, go-to-definition, completion, and document symbols.
Choose your preferred way to install the Lumina binary.
> irm https://lumina.rw/install.ps1 | iex
$ curl -fsSL https://lumina.rw/install.sh | sh
$ curl -fsSL https://lumina.rw/install.sh | sh
Create a hello.lum file and execute it instantly.
entity App { name: Text }
let app = App { name: "Lumina" }
show "Hello, {app.name}!"
$ lumina run hello.lum
Hello, Lumina!