Components are classes
Declared with TC39 standard decorators. A component is constructed once and never re-run to produce a view.
A TypeScript UI framework with Angular-shaped components, Vue-shaped templates, and TC39 signals — and no virtual DOM anywhere.
import { Component, Signal } from '@voltdev/core';
@Component({
selector: 'v-counter',
templateUrl: './counter.html',
})
export class Counter {
count = new Signal.State(0);
increment() { this.count.set(this.count.get() + 1); }
decrement() { this.count.set(this.count.get() - 1); }
}<!-- counter.html -->
<div>
<button :click="decrement()">−</button>
<output>{ count.get() }</output>
<button :click="increment()">+</button>
<p :if="count.get() > 9">That's a lot.</p>
</div>Pressing + updates one text node. Not the component, not a subtree — the text node whose value changed.