@praxisjs/core
Changelog for @praxisjs/core — signals, computed values, effects, peek, untrack, and batch.
@praxisjs/core
1.6.0
Reactivity engine rewrite — lower allocation and cleaner internals. No API changes.
signal()— subscribers stored asnull | Effect | Effect[], avoidingSetallocation for zero- and single-subscriber casescomputed()— plain closure, lazy recompute callback, separate tracking for downstream computeds vs leaf effectseffect()— simplified to a named closure withrunandstopbatch()— pre-allocated module-level array instead of a newSetper call
1.5.0
New: syncedSignal(channelName, initialValue) — signal that stays in sync across browser tabs via BroadcastChannel. Writes in any tab broadcast to all others.
1.4.1
@Watchmulti-prop coalescing — when multiple props change in the same tick, the callback fires once with the final values- Computed notification coalescing — leaf subscribers notified once per microtask boundary when multiple dependencies change simultaneously
- TypeScript fix —
createLifecycleMethodDecoratornow accepts methods with typed parameters
1.4.0
StatelessComponent default type parameter changed from object to Record<never, never>. Components that only receive children no longer need a type argument.
1.3.0
StatelessComponent now exposes an optional typed children prop. this.props.children works without declaring it in T.
1.2.0
New: peek(signal) and untrack(fn) — promoted to the public API.
Bug fix: mountComponent now runs inside untrack(). Static reads like description={this.count} inside a reactive context (e.g. the router) were accidentally subscribing the outer effect to those signals, causing the component to re-mount on every state change.
1.1.0
debounced()returns a.stop()method to cancel the pending timer- Nested
batch()calls no longer overwrite the outer queue - Subscriber errors are now isolated — all subscribers run even when one throws
1.0.0
Breaking
All functional APIs replaced by decorators across the entire ecosystem.
- Added
Composableabstract base class for class-based composables - Removed
resource,createResource,Resource,ResourceStatus,ResourceOptions— use@Resourcefrom@praxisjs/decoratorsinstead
0.4.2
Bug fix: effect() stop function now prevents future re-runs by setting a stopped flag. Previously it only ran cleanup but left the effect subscribed.
0.4.1
Bug fix: when() no longer leaks its reactive effect when the source is immediately truthy on the first run.
0.4.0
Added @Computed() decorator for cached reactive getters.
0.3.0
Migrated from legacy decorator signatures to the TC39 decorator context API. Introduced StatefulComponent and StatelessComponent.
0.1.0
Initial beta release.