reactivity library

Fine-grained reactivity system inspired by Vue's Composition API.

This library provides three modules:

Core - Reactive primitives and effects:

Utilities - Helper functions:

Advanced - Advanced features:

Classes

Computed<T>
A computed reactive value.
EffectScope
An effect scope for grouping and disposing reactive effects.
ReactiveEffect
Represents a reactive side effect that re-runs when dependencies change.
Readonly<T>
A readonly wrapper around a reactive value.
Ref<T>
A reactive reference container.
Scheduler
Scheduler for batching and flushing effects.
ShallowReadonly<T>
A shallow readonly wrapper.
ShallowRef<T>
A shallow reactive reference.
WatchHandle
Handle to control a watcher.
WatchOptions
Options for configuring watch behavior.
WritableComputed<T>
A writable computed value.

Enums

FlushMode
Flush timing for effects.

Extensions

ReadonlyComputed on Computed<T>
Extension to create readonly from Computed.
ReadonlyRef on Ref<T>
Extension to create readonly from Ref.
ScopedEffect on ReactiveEffect
Extension to register effects with the current scope.

Properties

activeEffect ↔ ReactiveEffect?
The currently active effect being executed.
getter/setter pair
effectStack → List<ReactiveEffect>
Stack of active effects for nested effect handling.
final

Functions

computed<T>(T getter()) → Computed<T>
Creates a readonly computed value.
customRef<T>(CustomRefFactory<T> factory) → Ref<T>
Creates a customized ref with explicit control over dependency tracking.
effectScope({bool detached = false}) → EffectScope
Creates an effect scope for grouping reactive effects.
getCurrentScope() → EffectScope?
Get the currently active effect scope.
isMarkedRaw(Object? value) → bool
Check if an object is marked as raw.
isProxy(Object? value) → bool
Check if a value is a reactive proxy (Ref, Computed, Readonly, ShallowRef).
isReactive(Object? value) → bool
Check if a value is reactive (Ref, Computed, or ShallowRef).
isReadonly(Object? value) → bool
Check if a value is readonly (Readonly or read-only Computed).
isRef(Object? value) → bool
Check if a value is a Ref.
markRaw<T extends Object>(T value) → T
Marks an object so that it will never be converted to a reactive proxy.
onScopeDispose(void callback(), {bool failSilently = false}) → void
Register a dispose callback on the current active effect scope.
onWatcherCleanup(CleanupFn cleanup, {bool failSilently = false}) → void
Register a cleanup function for the current watcher.
readonly<T>(Object source) → Readonly<T>
Creates a readonly proxy of a reactive value.
ref<T>(T value) → Ref<T>
Creates a reactive reference to a value.
shallowReadonly<T>(Object source) → ShallowReadonly<T>
Creates a shallow readonly wrapper.
shallowRef<T>(T value) → ShallowRef<T>
Creates a shallow ref - only .value access is reactive.
toRaw<T>(Object? value) → T
Returns the raw, original value from a reactive wrapper.
toRef<T>(Object source) → Ref<T>
Normalizes value/ref/getter to a Ref.
toRefs<T>(Map<String, T> source) → Map<String, Ref<T>>
Converts a Map to a Map of Refs.
toValue<T>(Object source) → T
Normalizes values/refs/getters to values.
triggerRef(ShallowRef ref) → void
Force trigger effects that depend on a shallow ref.
unref<T>(Object? maybeRef) → T
Unwrap a Ref to get its value, or return the value as-is if not a Ref.
watch<T>(T source(), WatchCallback<T> callback, {WatchOptions options = WatchOptions.defaults}) → WatchHandle
Watches a reactive source and invokes a callback when it changes.
watchEffect(EffectFn effect, {WatchOptions options = WatchOptions.defaults}) → WatchHandle
Runs an effect immediately and re-runs it when dependencies change.
watchMultiple<T>(List<T Function()> sources, void callback(List<T> values, List<T?> oldValues, OnCleanup onCleanup), {WatchOptions options = WatchOptions.defaults}) → WatchHandle
Watches multiple sources and invokes callback when any of them change.
watchPostEffect(EffectFn effect) → WatchHandle
Alias for watchEffect with flush: FlushMode.post.
watchSyncEffect(EffectFn effect) → WatchHandle
Alias for watchEffect with flush: FlushMode.sync.
writableComputed<T>({required T get(), required void set(T value)}) → WritableComputed<T>
Creates a writable computed value.

Typedefs

CleanupFn = void Function()
Effect cleanup function type.
CustomRefFactory<T> = ({T Function() get, void Function(T) set}) Function(void track(), void trigger())
Factory function for creating a custom ref.
EffectFn = void Function(OnCleanup onCleanup)
Watch effect function signature.
OnCleanup = void Function(CleanupFn cleanup)
Callback for registering cleanup in effects.
WatchCallback<T> = void Function(T value, T? oldValue, OnCleanup onCleanup)
Watch callback signature with new value, old value, and cleanup registration.
WatchGetter<T> = T Function()
Getter function for watch sources.