Pulse-native JSX framework for direct-DOM client-rendered SPA applications.
Fine-grained rendering with explicit routing and async primitives.
Start a new app with the scaffolder:
pnpm create @ochairo/create-beat my-app --template routerThat command scaffolds a Vite + TypeScript starter already configured for Beat's JSX runtime and Vite plugin with routing support.
import { bindText, component } from "@ochairo/beat";
import { pulse } from "@ochairo/pulse";
const counter = pulse(0);
const onclick = (value) => {
counter.set(counter.get() + value);
};
export const App = component(() => {
return (
<main>
<header class="header">
<h1 class="title">Counter app</h1>
</header>
<section class="counter">
<button class="button" onClick={() => onclick(-1)}>
-
</button>
<strong class="result">{bindText(counter)}</strong>
<button class="button" onClick={() => onclick(1)}>
+
</button>
</section>
</main>
);
});