PraxisJS
Signal-driven frontend framework for TypeScript — fine-grained reactivity, class components, and a complete first-party ecosystem.
PraxisJS
PraxisJS is a signal-driven frontend framework for TypeScript. Class components with decorators, and fine-grained DOM updates — no virtual DOM, no re-renders.
The entire reactive model follows one rule: render() runs once on mount, and arrow functions in JSX create live subscriptions that update only the exact DOM node they're bound to.
@Component()
class Counter extends StatefulComponent {
@State() count = 0
render() {
return (
<div>
<p>{() => this.count}</p> {/* reactive — updates when count changes */}
<button onClick={() => this.count++}>+</button>
</div>
)
}
}New here? Read the Introduction then jump into the Quick Start — you'll have a running component in under five minutes.
Learn
Introduction
What PraxisJS is, how signals replace the virtual DOM, and the three rules that explain everything
Quick Start
Scaffold a project with create-praxisjs or set up manually — running in under five minutes
Components
StatefulComponent for logic-heavy components, StatelessComponent for pure presentational ones
Reactivity & Signals
How @State, @Computed, and arrow-function JSX work together — and how to read without subscribing
Reference
Decorators
@State, @Watch, @Emit, @Debounce, @Lazy, @Resource, and 20+ more — organized by category
Composables
Reactive DOM and browser utilities via @Compose — WindowSize, Mouse, Clipboard, Pagination, VirtualList
Packages
Router, Store, DI, Motion animations, FSM, and async concurrency — install only what you need
Tooling
Vite plugin, in-app DevTools overlay, and Storybook adapter