Packages
PraxisJS first-party packages — Router, Store, DI, Motion, FSM, and async concurrency.
Packages
All first-party packages use the same signal system and decorator conventions as core. They're completely independent of each other — install only what your project needs.
Router
Signal-based client-side routing. @RouterConfig sets up routes. @Route co-locates path with the page component. Reactive injectors for params, query, and navigation.
Store
Class-based singleton state management. @Store registers a class globally. @UseStore injects the shared instance into any component.
Dependency Injection
@Injectable, @Inject, @Scope, and token-based injection. Scoped child containers per component instance. Circular dependency detection.
Motion
Animated field decorators. @Tween for duration-based easing. @Spring for physics-based spring animation. Assign a value — the transition plays automatically.
State Machines
Finite state machines via @StateMachine and @Transition. Typed states and events, reactive state signal, per-state onEnter/onExit hooks.
Concurrency
@Task, @Queue, and @Pool for async concurrency control. Reactive .loading(), .error(), and .pending() state directly on each decorated field.
Installation
Each package is independent. Install only what you need:
| Package | Install |
|---|---|
@praxisjs/router | npm install @praxisjs/router |
@praxisjs/store | npm install @praxisjs/store |
@praxisjs/di | npm install @praxisjs/di |
@praxisjs/motion | npm install @praxisjs/motion |
@praxisjs/fsm | npm install @praxisjs/fsm |
@praxisjs/concurrent | npm install @praxisjs/concurrent |
Choosing a package
List Utilities
@praxisjs/composables list utilities — VirtualList for virtualizing large lists with reactive scroll tracking.
Router
@praxisjs/router — signal-based client-side router. Configure routes with @RouterConfig, define lazy routes with @Lazy, annotate pages with @Route, and inject reactive router state with @InjectRouter, @Params, @Query, @Location.