Curvea

CurveaScript

CurveaScript Limitations

CurveaScript is intentionally small. These constraints are part of the current Engine behavior.

Expressions are simple paths

Supported:

{{ page.title }}

Unsupported expressions resolve to an empty string:

{{ page.title.toUpperCase() }}
{{ count + 1 }}
{{ items.map(...) }}

No event directives

CurveaScript does not provide framework event syntax:

<button @click="openMenu">

Use normal browser JavaScript or a Curvea built-in helper instead.

No reactive template state

Curvea templates are resolved during development rendering or production build. They do not become reactive templates in the browser.

Component imports are explicit Engine syntax

The Engine requires custom components to be imported before use:

@import Hero

<Hero />

The Curvea VS Code extension can add the matching @import when accepting an unimported component completion if curvea.completions.autoImport is enabled. The resulting source still contains an explicit Engine import.

Component names are PascalCase

Uppercase-starting HTML-like tags are interpreted as component candidates:

<Hero />

Normal lowercase HTML is left as HTML.

Nested identical components

Component matching is intentionally lightweight. Avoid recursively nesting the same component tag inside itself unless the structure has been tested for the current Engine behavior.

No general-purpose npm bundler

Curvea includes an ESM-oriented JavaScript module graph and limited package resolution, but it is not a full application bundler.

Packages can fail when they depend on unsupported exports, module formats, dynamic resolution patterns, file types, or complex CommonJS behavior. Prefer browser-oriented ESM and straightforward local modules.