Kernel API
Core Sairin primitives.
Signals
signal
function signal<T>(path: PathKey, initial: T): Signal<T>
Create a reactive signal at a path.
Signal Class
class Signal<T> {
readonly id: number;
readonly path: PathKey;
get(): T
set(value: T, options?: { owner?: string }): void
update(fn: (value: T) => T): void
subscribe(fn: Subscriber): () => void
unsubscribe(fn: Subscriber): void
peek(): T
get version(): number
}
isSignal
function isSignal<T>(value: unknown): value is Signal<T>
Check if a value is a signal.
Derived
derived
function derived<T>(
path: PathKey,
fn: () => T,
options?: { eager?: boolean }
): Derived<T>
Create a computed value.
Derived Class
class Derived<T> {
readonly id: number;
readonly path: PathKey;
get(): T
subscribe(fn: Subscriber): () => void
isDirty(): boolean
peek(): T
get version(): number
}
Effects
effect
function effect(fn: () => CleanupFn): () => void
Create an effect (runs in next microtask).
effectSync
function effectSync(fn: () => CleanupFn): () => void
Create a synchronous effect.
effectIdle
function effectIdle(fn: () => CleanupFn): () => void
Create an idle effect.
onCleanup
function onCleanup(fn: () => void): void
Register cleanup in an effect.
untracked
function untracked<T>(fn: () => T): T
Run without subscribing.
Batching
batch
function batch(fn: () => void): void
Group updates into one flush.
isFlushing
function isFlushing(): boolean
Currently in a flush?
hasPendingEffects
function hasPendingEffects(): boolean
Effects waiting to run?
Configuration
configureSairin
function configureSairin(config: SairinConfig): void
Configure Sairin behavior.
getSairinConfig
function getSairinConfig(): Readonly<SairinConfig>
Get current config.