Less code,
more reactivity

Think VueUse, for Angular Signals

76 composables for browser APIs, DOM elements, and reactive state. SSR-ready, type-safe, tree-shakable.

app.ts
import { windowSize, mediaQuery, storage } from '@signality/core';

@Component({ /* ... */ })
export class App {
  // every one is a signal, cleanup is automatic
  readonly size = windowSize();
  readonly mobile = mediaQuery('(width <= 768px)');
  readonly draft = storage('draft', {});
}
live sizemobile resize the window

Skip the boilerplate

Signality wraps imperative platform APIs into signals: listeners attach lazily, tear down with the component, and stay inert during server rendering.

By hand
readonly width = signal(window.innerWidth);

constructor() {
  const update = () => {
    this.width.set(window.innerWidth);
  };
  window.addEventListener('resize', update);
  inject(DestroyRef).onDestroy(() => {
    window.removeEventListener('resize', update);
  });
  // and this still throws during SSR
}
With Signality
readonly size = windowSize();

// size.width() and size.height() are signals:
// SSR-safe, torn down with the component

What's inside

76 utilities across 9 categories, every one documented with a usage example.

How they work

Signals in, signals out

Reactive state comes back as signals, ready to compose with computed and effect. No RxJS subscriptions to unwrap.

SSR-safe by default

Browser APIs return safe defaults on the server, then pick up real values in the browser.

Automatic cleanup

Listeners, observers, and timers are disposed with the injection context that created them.

Reactive options

Where configuration can change over time, options take a signal as readily as a plain value.

Tree-shakable

Only the utilities you import end up in your bundle.

Strictly typed

Written in strict TypeScript with full inference, from options to return values.

Built in the open

Signality follows the philosophy of VueUse, rebuilt for Angular's signal-based reactivity.

Contributions of all kinds are welcome.

Install

$ npm install @signality/core

Also available via pnpm and yarn.

Get Started