Skip to content

Signals

The @rimitive/signals package provides signals, computeds, and effects for reactive state management.

Package on GitHub

Terminal window
npm install @rimitive/core @rimitive/signals
import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
const { signal, computed, effect } = compose(
SignalModule,
ComputedModule,
EffectModule
);
const count = signal(0);
const doubled = computed(() => count() * 2);
effect(() => {
console.log(`Count: ${count()}, Doubled: ${doubled()}`);
});
count(1); // logs: "Count: 1, Doubled: 2"
APIDescription
signal()Create reactive state
computed()Derive values from signals
effect()Run side effects when dependencies change
batch()Group updates into a single notification
untrack()Read signals without creating dependencies
subscribe()Subscribe to signal changes with a callback
iter()Reactive linked list with O(1) operations

Each API has a corresponding module for composition:

import {
SignalModule,
ComputedModule,
EffectModule,
BatchModule,
UntrackModule,
SubscribeModule,
IterModule,
} from '@rimitive/signals/extend';

Compose only what you need:

// Minimal — just signals
const svc = compose(SignalModule);
// With derived values
const svc = compose(SignalModule, ComputedModule);
// Full reactivity
const svc = compose(SignalModule, ComputedModule, EffectModule, BatchModule);

Effects support flush strategies to control when they run:

import { mt, raf, debounce } from '@rimitive/signals/extend';
effect(mt(() => { ... })); // microtask
effect(raf(() => { ... })); // requestAnimationFrame
effect(debounce(300, () => { ... })); // debounced

See effect() for details.