← Menut · ← Inside Menut

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.