Philosophy
Curvea is built around a simple idea:
Build websites faster without hiding the web.
Curvea is intentionally close to HTML. It does not try to turn websites into application components with reactive state, virtual DOM behavior, or framework-specific syntax.
HTML-first
A CurveaScript file should feel familiar to anyone who understands HTML.
Curvea adds directives and expressions, but the template remains mostly HTML.
Example:
@page
<section>
<h1>{{ page.title }}</h1>
<p>{{ page.description }}</p>
</section>
Static-first
Curvea renders pages at build time.
This keeps output predictable and deployable anywhere static files can be served.
Minimal magic
Curvea avoids hidden behavior where possible.
Important examples:
- components must be imported before use
- layouts must exist in
src/layouts - data must be explicitly loaded with
@load - dynamic pages are based on file naming and data/content rules
Predictable structure
Curvea projects follow a clear folder structure:
src/pages
src/layouts
src/components
src/data
src/content
src/assets
public
dist
Each folder has a specific responsibility.
No framework syntax
CurveaScript does not support syntax such as:
<button @click="openMenu"> <Component :title="title" /> <Component prop={value} />
CurveaScript is not JavaScript inside HTML. It is a simple build-time template language.