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

alien-deepsignals

v0.3.1

Published

AlienDeepSignals 🧶 -alien signals, but using regular JavaScript objects

Readme

🧶 AlienDeepSignals

Use alien-signals with the interface of a plain JavaScript object.

  • DeepSignal works by wrapping the object with a Proxy that intercepts all property accesses and returns the signal value by default.
  • This allows you to easily create a deep object that can be observed for changes, while still being able to mutate the object normally.
  • Nested objects and arrays are also converted to deep signal objects/arrays, allowing you to create fully reactive data structures.
  • The $ prefix returns the signal instance: state.$prop.

Credits

Features

  • Transparent: deepsignal wraps the object with a proxy that intercepts all property accesses, but does not modify how you interact with the object. This means that you can still use the object as you normally would, and it will behave exactly as you would expect, except that mutating the object also updates the value of the underlying signals.
  • Tiny (less than 1kB): deepsignal is designed to be lightweight and has a minimal footprint, making it easy to include in your projects. It's just a small wrapper around alien-signals.
  • Full array support: deepsignal fully supports arrays, including nested arrays.
  • Deep: deepsignal converts nested objects and arrays to deep signal objects/arrays, allowing you to create fully reactive data structures.
  • Lazy initialization: deepsignal uses lazy initialization, which means that signals and proxies are only created when they are accessed for the first time. This reduces the initialization time to almost zero and improves the overall performance in cases where you only need to observe a small subset of the object's properties.
  • Stable references: deepsignal uses stable references, which means that the same Proxy instances will be returned for the same objects so they can exist in different places of the data structure, just like regular JavaScript objects.
  • Automatic derived state: getters are automatically converted to computeds instead of signals.
  • TypeScript support: deepsignal is written in TypeScript and includes type definitions, so you can use it seamlessly with your TypeScript projects, including access to the signal value through the prefix state.$prop.
  • State management: deepsignal can be used as a state manager, including state and actions in the same object.

The most important feature is that it just works. You don't need to do anything special. Just create an object, mutate it normally and all your components will know when they need to rerender.

Installation

npm install alien-deepsignals

Usage

import { deepSignal } from 'alien-deepsignals';
const state = deepSignal({
  count: 0,
  name: 'John',
  nested: {
    deep: 'value',
  },
  array: [1, 2, 3],
});
state.count++;
state.$nested.value.deep = 'new value';
state.$array.value.push(4);

watch

import { deepSignal, watch } from 'alien-deepsignals';
const state = deepSignal({
  count: 0,
  name: 'John',
  nested: {
    deep: 'value',
  },
  array: [1, 2, 3],
});

watch(state,(value)=>{
  console.log(value);
},{
  deep: true,
  immediate: true,
  // once
})