Page compilation
Reads frontmatter and template HTML from src/pages/index.lilastro, validates required fields, and emits the root HTML document.
Static page layer
A small .lilastro page compiler that keeps Lilscript in charge of application behavior and hands web delivery to Lilpack.
Its exact job
Reads frontmatter and template HTML from src/pages/index.lilastro, validates required fields, and emits the root HTML document.
The frontmatter points to main.lil. Listings, prices, quantities, screens, and rendered fragments remain Lilscript.
Lilpack compiles the module graph before Vite 8 handles the dev server, HMR, Rolldown build, and Oxc minification.
Control flow
index.lilastrofrontmatter + static HTML + skeletonmain.lildata, state machine, rendering, interactionsbrowser.lil → browser.tstyped host boundary for DOM, events, timers, and scrollingLilpack → Vite 8dependency graph, reload, production bundleInterop and reload
The POC imports a small TypeScript adapter through typed Lilscript extern declarations. It performs DOM mounting, delegated click handling, timers, and scrolling. Business state never moves into a second implementation.
A .lilastro edit regenerates the page. A .lil edit is recompiled through Lilpack and invalidates the Vite module graph at the Lilscript HMR boundary.
Controlled production result
The control uses plain Astro with no Solid integration. Both builds share the same CSS, behavior, focus restoration and announcements, modern ESM target, Vite 8.2.1, Rolldown/Oxc path, and disabled module-preload polyfill.
| JavaScript build | Brotli-11 · primary | gzip-9 | Raw |
|---|---|---|---|
| Lilastro + Lilpack | 2,665 B | 3,132 B | 7,957 B |
| Astro | 2,672 B | 3,132 B | 8,801 B |
Lilastro is 7 B smaller Brotli, ties gzip, and is 844 B smaller raw. The compressed result is effectively equal; this POC does not establish framework-wide superiority. Open both builds as demos.
Current capability
Not claimed