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 Engine built-in helper instead.
No reactive template state
CurveaScript 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 CurveaScript 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 Engine 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.