let x = 0 is reactive, no hooks or setState<script>
let count = 0
</script>
<button onclick="count++">
Clicks: {count}
</button>
But with everything you need, and no pointless complexity and boilerplate!
Prerender every route to real HTML and hydrate in place. Content before JavaScript, SEO out of the box, zero-config.
Write let x = 0 and it's
reactive. No useState, no refs, no decorators.
Components are .html files. No
JSX, no special syntax. Just HTML and JavaScript.
Drop .tsx components in: they
compile to signals and direct DOM. 8 KB where React ships 59.
await ui.confirm('Sure?') is a
complete accessible dialog. Modal, toasts, drawers: native top-layer, CSS-var themeable.
Drop files in pages/ and they
become routes. Dynamic params with [id].html.
Stores, query caching, scoped styles, directives and typed routes ship in the core. Strict TypeScript throughout.
Every scaffold ships a skills library and
AGENTS.md, so your AI assistant writes correct JAF from the first prompt.