Coming from Vue / React
Tape's component model is directly inspired by the patterns you know — props down, events up, single-file components. The difference is it compiles to native code, not a JS bundle.
single-file components
Vue SFC
+ + . Three languages (HTML, JS, CSS) in one file.
Tape
#code + #view + #style. Same concept — one file, multiple concerns — but every section speaks tape syntax.
reactivity
Vue / React
Proxy-based reactivity (Vue) or setState + virtual DOM diff (React). Runtime overhead.
Tape
var mutations set a dirty flag. Compiler generates a dependency map — only affected dynamic points re-evaluate. No diffing.
events / emit
Vue
$emit('update', value) — string-based event names, runtime dispatch.
Tape
event on_update(val: i64) + fire on_update(val) — typed at compile time. Wrong handler signature = compile error.
conditional / list rendering
Vue / React
v-if / v-for (Vue) or {cond && / .map() (React).
Tape
if (cond) { ... } and for (item in list) { ... } — same tape syntax inside view {}. Keyed reconciliation via key: prop.
what stays the same
- - Compiles to native x86-64, not JavaScript
- - No browser, no DOM, no CSS — tape renders directly
- - Static types required (no any in t1 components)
- - No npm, no bundler, no node_modules
- - Desktop-native, not web-wrapped