Weblin & Menut vs. the HTML-first landscape
An honest comparison. No framework wins everything — each makes specific trade-offs.
Weblin isn't the only project betting against the build-step, virtual-DOM default. This page places it honestly next to the closest relatives, so you can pick the right tool — or see exactly why Weblin exists.
| Weblin (CSS) | Menut | Fixi | htmx | Alpine.js | Petite-Vue | |
|---|---|---|---|---|---|---|
| Category | Classless CSS framework | Reactive micro-framework | Hypermedia micro-lib | Hypermedia library | Reactive directives | Reactive micro-framework |
| Build step | None | None | None | None | None | None |
| State model | — | Single window._ |
Server-driven | Server-driven | Per-component x-data |
Per-component v-scope |
| Reactivity | — | Granular (Proxy) | None (server round-trip) | None (server round-trip) | Proxy-based | Proxy-based (Vue 3) |
| Components | Declarative Shadow DOM | define-component, SFC |
— | — | Alpine components | Vue-like SFC subset |
| Dependencies | Zero | Zero | Zero | Zero | Zero | Vue reactivity core |
| Native HTML5 | dialog, popover, view-transitions |
Inherits Weblin | Partial | Own DSL | Partial | Partial |
| CSP | — | Needs unsafe-eval |
Clean | Clean | Needs unsafe-eval |
Needs unsafe-eval |
| Best for | Zero-JS UI chrome, semantic styling | Client-side state without a compiler | Ultra-minimal AJAX | Server-rendered apps | Sprinkles of interactivity | Small reactive widgets |
Where Weblin + Menut sit
Against Fixi / htmx
Those are hypermedia-first — the server owns state, the client just swaps HTML fragments. Weblin+Menut assume the state sometimes needs to live in the browser (a form wizard, a filter panel, a local counter) without asking the server for permission. Menut is closer to Petite-Vue in intent, but rejects Vue's reactivity core as a dependency and rejects the SFC-with-compiler pattern in favor of native <script> tags the browser already understands.
Against Alpine / Petite-Vue
Same territory (attribute-driven reactivity, no build), but Menut is a single file with window._ as one flat, inspectable source of truth, rather than N isolated x-data / v-scope islands. Trade-off: less encapsulation, more transparency — you can open devtools and read the entire app state in one place.
Honest weaknesses
The unsafe-eval requirement rules Weblin/Menut out for strict-CSP environments (banking, gov, some enterprise). Fixi/htmx don't have this problem. This is a real trade-off, not a footnote — say it plainly rather than let someone discover it in production.
A CSP-strict variant is technically possible (~250 lines of expression parser). See CSP compatibility for the full analysis.