Build native binaries and WASM from one codebase
LukeLang
mimo install · compile to C · ship anywhere
A reactive-native, full-stack language that compiles to native C and WebAssembly. One dependency graph from database row to screen pixel.
One graph,
end to end.
Mainstream stacks glue three worlds together with fetch, cache invalidation, subscriptions and diffing. LukeLang keeps one dependency graph that the compiler can see — so change travels on its own.
- Database rowUPDATE users …
- Server cellwatch user from db
- Wirepush watch user on req
- Client cellwatch user from "/watch"
- Pixelbind("name", user)
You never fetch.
You never invalidate.
You never subscribe.
You never diff.
You declare the dependency once — and exactly 1 region paints.
Reads like intent.
Runs like C.
Typed Build mode, arena memory, and no garbage collector on the ship path. The same source targets a native binary or the browser.
print("Hello from Luke Build")
let name = "Luke"
print("My name is " + name)
fn add(a: float, b: float) -> float {
return a + b
}
print(add(21, 21)) // 42 — native code, arena memory
signal price = 100
signal quantity = 3
derived total = price * quantity
effect on total {
print("total=" + total)
}
price = 200 // total=600, one flush
batch {
price = 120
quantity = 5 // still one flush
}
import std/server
import std/sqlite
let db = dbOpen("/tmp/luke_live_graph.db")
watch user from db where "id = 1"
let server = httpListen(8798)
let req = httpAccept(server)
push watch user on req for 50 beats every 50 ms
import std/js
signal user = ""
bind("name", user)
watch user from "http://127.0.0.1:8798/watch"
// external UPDATE → one push → one write → one region paints
effect on user {
print("region=" + region_paint_count)
}
Engineered, not assembled.
- 0
- garbage collectors on the ship path — arena memory, freed at scope
- 1
- dependency graph carries every change from row to pixel
- 10K
- concurrent connections — event-loop I/O, keep-alive, REUSEPORT
- 2
- compile targets from one source — native C and WebAssembly
What the language believes.
- Write like you talk. Ship like systems. The surface stays readable; the compiler keeps the guarantees.
- Build is the language of record. Types, layouts and arenas are decided at compile time, not guessed at runtime.
- The browser is the renderer. Compile to DOM and CSS; patch surgically, never repaint the world.
- One beachhead. Win reactive full-stack first. Everything else is earned later.
Three lines to your first binary.
git clone https://github.com/lucasdmarshall/LukeLang.git
cd LukeLang/vm && make
./build/luke BUILD ../examples/build/hello.luke -o hello && ./hello