Signals, effects & owners
Guide: Reactivity.
Signal(T)
| Method | Signature | Notes |
|---|---|---|
init | (initial: T, allocator) Signal(T) | usually via ctx.useSignal |
get | () T | read and subscribe current effect |
peek | () T | untracked read |
set | (new: T) void | notify subscribers; no-op when equal |
increment/decrement | () void | numeric T only |
on_set / on_set_ctx | fields | post-write hook (client DOM mirror) |
Effect
| Export | Signature |
|---|---|
createEffect | (owner: *Owner, ctx_ptr: anytype, comptime f: fn (@TypeOf(ctx_ptr)) void) !*Effect |
Runs eagerly once collecting dependencies; re-runs on any dependency write. The ctx-pointer-plus-comptime-fn shape is the framework's allocation-free closure pattern.
Owner
Reactive scope. Owner.init(allocator) · createChild() !*Owner · allocator() · dispose() — disposing unsubscribes every owned effect from every signal it read. Server: one owner per request. Client: the runtime's root owner.
Escape hatches
| Export | Signature |
|---|---|
untrack | (comptime R, ctx_ptr, comptime f: fn (...) R) R — read without subscribing |
batch | (ctx_ptr, comptime f: fn (...) void) void — coalesce writes, one flush |
setReactivePendingAllocator | (allocator) void — WASM runtime setup |
Chunk-side named signals
Island chunks address signals registered in the main runtime's slot table by bind name:
registerI32/registerStr/registerF32(name, initial) · registerBool(name, class, initial) · signalSetI32/Str/Bool/F32(name, v) · signalGetI32/Bool/F32(name) · signalGetStr(name, buf) / signalGetStrLen(name).
Registration is idempotent — multiple islands registering the same name share one signal.