Curvea

Introduction

Philosophy

Curvea Engine is built around a simple idea:

Build websites faster without hiding the web.

CurveaScript 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.

CurveaScript 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 Engine renders pages at build time.

This keeps output predictable and deployable anywhere static files can be served.

Minimal magic

Curvea Engine 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 Engine 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.