What it does
The compiler transforms three things:1. let → signals
let declaration becomes a signal. Reads become .value accesses, and assignments become .value = writes:
2. const → computed
When a const depends on reactive values, the compiler wraps it in computed():
3. JSX → fine-grained DOM
JSX is compiled into direct DOM creation with reactive bindings:4. AOT SSR compilation
For server-side rendering, the compiler can generate string-builder functions that bypass the DOM shim entirely:What it doesn’t do
The compiler is per-file, single-pass. It does not:- Analyze across files — each file is compiled independently
- Run type checking — that’s still
tsc - Bundle modules — that’s the bundler (Bun)
- Optimize at runtime — all transforms happen at build time
Reactive prop generation
When you pass expressions to a component, the compiler generates getter-based props so reactivity flows through:task and disabled as plain values. The getters re-evaluate whenever the underlying signals change — updating only the affected DOM nodes, not the entire component.
Destructured props
You write idiomatic destructured parameters — the compiler reverses them to preserve getter-based reactivity:{ id: cardId }), defaults ({ size = 'md' }), and rest patterns ({ title, ...rest }). You never need to think about it — write destructured props as usual and the compiler handles the rest.
Signal API awareness
The compiler knows which APIs return objects with signal properties. For example,query() returns an object where .data, .loading, and .error are signals:
query(), form(), and other framework APIs.
How to use it
The compiler runs automatically when you use the Vertz dev server or build command:TypeScript configuration
The compiler requires thesetsconfig.json settings:
<form> → HTMLFormElement, <input> → HTMLInputElement).