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

@wirestate/dev

v1.0.0

Published

Development bundler plugins enabling hot reload for Wirestate services

Readme

@wirestate/dev [monorepo] [docs]

npm license

Bundler plugins enabling hot reload for Wirestate services.

Use this package during development so that editing a service file swaps the affected containers in place instead of remounting the application tree. It applies to the dev server only and has no effect on production builds.

The swap rebuilds containers that have a registered owner. ContainerProvider from @wirestate/react registers the managed containers it creates, so React applications need no setup. A container created elsewhere, including one provided to Lit, is rebuilt only after it is registered as its own hot-swap owner.

Install

npm install --save-dev @wirestate/dev

Start

Register the plugin in the Vite config, before the framework plugin:

import { wirestate } from "@wirestate/dev/vite";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [wirestate(), react()],
});

Application code stays as it is. Containers, providers, and services need no changes.

Editing a service now reports the swap instead of reloading the page:

[wirestate] Hot swap replaced 1 container(s).

How It Works

Wirestate keys bindings by class identity, and a hot update replaces the class. The plugin wraps every module mentioning Injectable in two markers: a header that opens the module in the Wirestate hot runtime and a footer that closes it. While the module body evaluates, @Injectable() registers each decorated class under a stable id derived from the module path and the class name, so nothing is parsed. A module that declares such classes accepts its own hot updates. The update stops propagating up the import graph, and the runtime rebuilds the containers bound to the previous class: teardown deepest-first, then replacements root-first, as one synchronous step.

React state, DOM state, scroll position, and form inputs survive. Services are constructed fresh, so resource work belongs in @OnProvision and cleanup in @OnDeprovision.

What Is Included

  • @wirestate/dev/vite: the wirestate() Vite plugin, with include and exclude options for projects using different file conventions.
  • The package root: transformHotModule, createHotHeader, and createHotFooter, the bundler-agnostic transform the adapters build on.

By default .ts, .mts, .js, and .mjs files are transformed, skipping node_modules, declaration files, test files, and server-side transforms. Component files (.tsx, .jsx) are excluded because React Fast Refresh already owns them, so keep services in their own modules.

Every module-scope class decorated with @Injectable() participates, whatever name the decorator is imported under. Classes created later at runtime, for example inside a factory function, are not registered.

Requires @wirestate/core in the application: the injected markers import the @wirestate/core/hot runtime that performs the swap. The package has no other dependencies.

Learn More

License

MIT