npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@spearwolf/signalize

v0.27.2

Published

signals and effects for all

Readme

signalize hero

npm (scoped) GitHub Workflow Status (with event) GitHub

@spearwolf/signalize - A lightweight JavaScript library for signals & effects. Reactive programming, made simple. Works in Browser & Node.js. Type-safe. Fast. No framework lock-in.

Signals and Effects for All

@spearwolf/signalize is a JavaScript library for creating fine-grained reactivity through signals and effects.

  • Standalone - Framework agnostic, works anywhere JavaScript runs
  • Side-effect free - Targets ES2023+ environments
  • TypeScript-first - Written in TypeScript v5 with full type support
  • Modern decorators - Optional TC39 decorators for class-based APIs

[!NOTE] Reactivity is the secret sauce to building modern, dynamic web apps. @spearwolf/signalize makes it easy. No frameworks, no boilerplate, just pure reactivity.

Quick Start

Installation

npm install @spearwolf/signalize

Hello World

import {createSignal, createEffect} from '@spearwolf/signalize';

// Create a signal with an initial value
const count = createSignal(0);

// Create an effect that runs whenever `count` changes
createEffect(() => {
  console.log(`The count is now: ${count.get()}`);
});
// => "The count is now: 0"

// Update the signal
count.set(5);
// => "The count is now: 5"

count.set(10);
// => "The count is now: 10"

That's it! No extra boilerplate, no framework dependencies. Just pure, simple reactivity.

Core Concepts

The library revolves around four main primitives:

Signals

Reactive values that notify dependents when changed. Think of them as reactive variables.

const name = createSignal('Alice');
console.log(name.get()); // Read with tracking
console.log(name.value); // Read without tracking
name.set('Bob'); // Write

Effects

Functions that automatically re-run when their signal dependencies change.

createEffect(() => {
  // Automatically re-runs when `name` changes
  console.log(`Hello, ${name.get()}!`);
});

Memos

Computed signals - cached derived values that update when dependencies change.

const firstName = createSignal('John');
const lastName = createSignal('Doe');

const fullName = createMemo(() => `${firstName.get()} ${lastName.get()}`);
console.log(fullName()); // => "John Doe"

Links

Explicit one-way data flow connections between signals. Inspired by visual programming tools like Unreal Engine Blueprints.

const source = createSignal(10);
const target = createSignal(0);

link(source, target);
console.log(target.value); // => 10

source.set(42);
console.log(target.value); // => 42

Class-based API with Decorators

For those who prefer object-oriented patterns:

import {signal, memo} from '@spearwolf/signalize/decorators';

class Counter {
  @signal() accessor value = 0;

  @memo()
  doubled() {
    return this.value * 2;
  }

  increment() {
    this.value++;
  }
}

[!IMPORTANT] The decorator API is still in the early stages of development. It only uses the new JavaScript standard decorators, not the legacy TypeScript ones.

Documentation

For comprehensive documentation, see the docs/ folder:

| Document | Description | | ---------------------------------------- | ----------------------------------- | | Introduction | Overview and key features | | Getting Started | Installation and first steps | | Developer Guide | Comprehensive guide to all features | | Full API Reference | Complete API documentation | | Cheat Sheet | Quick reference for all APIs |

API at a Glance

Signals

createSignal, destroySignal, isSignal, getSignalsCount, muteSignal, unmuteSignal, touch, value

Effects

createEffect, getEffectsCount, onCreateEffect, onDestroyEffect

Memos

createMemo

Links

link, unlink, getLinksCount

Groups & Collections

SignalGroup, SignalAutoMap

Utilities

batch, beQuiet, isQuiet, hibernate

Decorators (from @spearwolf/signalize/decorators)

@signal, @memo

Contributing

Contributions are welcome! If you find a bug or have a feature request, please open an issue. If you want to contribute code or documentation, please open a pull request.

See CONTRIBUTING.md for development guidelines and CODE_OF_CONDUCT.md for community guidelines.

For version history and migration guides, see the CHANGELOG.

License

This project is licensed under the Apache-2.0 License. See the LICENSE file for details.


The hero image above was created at the request of spearwolf using OpenAI's DALL-E and guided by ChatGPT. It was then animated by KLING AI and converted by Ezgif.com.