Skip to content

VoltClasses, templates, signals.

A TypeScript UI framework with Angular-shaped components, Vue-shaped templates, and TC39 signals — and no virtual DOM anywhere.

In one file

ts
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); }
}
html
<!-- 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.

Released under the MIT License.