Pyreon, running right now
The counter below is a real Pyreon app, mounted live on this page — no install, no sandbox. Click it. The number is a signal; the framework re-renders only that one text node when it changes.
That's the whole model: a signal is a reactive value you read as a function (count()) and write with .set() / .update(). Read it inside JSX and the compiler makes that spot reactive — no virtual DOM, no re-running your component.
Scaffold a new app (the 60-second path)
The fastest way to a complete, batteries-included project (router, SSR/SSG, dev server, TypeScript) is the scaffolder:
npm create @pyreon/zero@latest my-appbun create @pyreon/zero my-apppnpm create @pyreon/zero my-appyarn create @pyreon/zero my-appThen start the dev server:
cd my-app
npm install
npm run devcd my-app
bun install
bun run devcd my-app
pnpm install
pnpm run devcd my-app
yarn
yarn devOpen the printed URL and you have a routed, server-rendered Pyreon app with hot-reload.
Prefer to wire it up by hand?
If you want to add Pyreon to an existing Vite project (or understand exactly what the scaffolder generates), the Getting Started guide walks through the manual install + vite.config.ts setup, SSR, routing, and the compatibility layers — package by package.
Next steps
Build an App — a guided, interactive tutorial that builds a real Todo app step by step, each step running live on the page.
Reactivity Rules — the handful of rules that make signals click ("components run once; reactivity is about where you read a signal").
Why Pyreon — the honest case: what Pyreon is fast at, where it isn't, and who it's for.