@gomani/signals
v0.2.0
Published
Reactive core for Gomani — a thin, stable wrapper over a proven fine-grained signals engine.
Maintainers
Readme
@gomani/signals
The reactive core of Gomani — fine-grained signals, wrapped behind a small stable API so the engine underneath stays swappable.
Gomani doesn't reinvent reactivity: signals are the converged, settled answer. This package is a
deliberately thin wrapper over @preact/signals-core, exposing
Gomani's own surface so the rest of the framework — and, later, the .goma compiler — depends only on
this. Everything is isomorphic: the same primitives snapshot initial values during SSR and drive
fine-grained DOM updates on the client.
Install
npm install @gomani/signalsAPI
import { signal, computed, effect, batch, untracked, isSignal } from '@gomani/signals';
const count = signal(0);
const doubled = computed(() => count.value * 2);
const stop = effect(() => {
console.log(count.value, doubled.value); // runs now, and on every change
return () => {}; // optional cleanup, runs before each re-run and on stop()
});
batch(() => {
count.value = 1;
count.value = 2; // dependents re-run once, after the batch
});
count.peek(); // read without subscribing
untracked(() => count.value); // read without subscribing the surrounding effect
stop(); // tear down the effect
isSignal(count); // true| Export | Purpose |
| --------------- | ------------------------------------------------------------------ |
| signal(v) | A writable reactive value (.value, .peek()) |
| computed(fn) | A cached, read-only derived value |
| effect(fn) | Run now + on change; returns a disposer; fn may return a cleanup |
| batch(fn) | Coalesce writes so dependents run once |
| untracked(fn) | Read without subscribing |
| isSignal(x) | Narrow an unknown to a signal |
License
MIT © Venancio Gomani / Kwacha Kulture.
