Documentation

Production web

Status: v1 in progress (shippable static apps)
Goal: Ship real browser apps as Luke-owned UI + Build AOT, not a thin skin over React.
Frontend track: FRONTEND_ROADMAP.md

Stack layers

Luke app (.luke / .lk)Hanka          nested COLUMN / ROW / STACK (+ ALIGN, AUTO)Argus          TEXT / BUTTON / INPUT / IMAGE / BOX / SELECT / TABLE / MODALEvents         CLICKED | CHANGED | SUBMITTED | FETCH READYRouting        GO TO / WHEN THE ROUTE IS …Data           FOR EACH list → UI · START FETCH (async)Thin boot      WASM + lukejs embedder (runtime, not app JS)Static dist    .html + .wasm + fonts/

Checklist

Capability Now
Nested Hanka yes (+ ALIGN)
Inputs (+ email/password) yes
Select / table / modal yes (beachhead)
THE VALUE OF / validation helpers yes
Text measure / SIZE AUTO yes
Viewport width yes
Hash routing yes
Async fetch GET/POST + status/body yes
FOR EACH → UI yes
Deploy folder html + wasm + fonts
a11y roles on paint yes (beachhead)
Motion polish in progress
luke PUBLISH WEB yes
Reactive runtime Phases 1–8 — see REACTIVE.md

Surface (v1)

raw "BEGIN COLUMN AT 48, 48 SIZE 720, 520 PAD 0 GAP 16 ALIGN CENTER"raw "BEGIN ROW AT 0, 0 SIZE 720, 48 PAD 0 GAP 12"raw "SLOT BUTTON \"nav-home\" SIZE 120, 44 SAY \"Home\""raw "SLOT BUTTON \"nav-search\" SIZE 120, 44 SAY \"Search\""raw "END ROW"raw "SLOT INPUT \"email\" AS EMAIL SIZE 480, 48 SAY \"you@example.com\""raw "SLOT INPUT \"pass\" AS PASSWORD SIZE 480, 48 SAY \"Password\""raw "SLOT SELECT \"plan\" SIZE 240, 40 SAY \"Free|Pro|Team\""raw "END COLUMN"raw "LAY OUT THE SCREEN"raw "PAINT THE SCREEN"

Demo / deploy

luke BUILD examples/build/web_app.luke -target browser -o dist/app# or:luke PUBLISH WEB examples/build/web_app.luke -o dist/app# ship: dist/app.html + dist/app.wasm (+ fonts/)