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

iomsg

v1.3.1

Published

iomsg, a simple lightweight state handler.

Readme

iomsg

I wrote this package due to I was getting a bit sick and tired of doing all the boilerplate needed for other libraries that do state management (Not saying that there's no boilerplate here, but it's less). The focus of IoMessage (iomsg) is to make it easier for lazy people like me, and/or you, to handle state management and data fetching.

Structure

The basic construction of iomsg is that you have a warehouse that needs to be filled with workers that can send messages between each other and store data. Added bonus is that there are listeners that can run functions on messages. Iomsg has a peer dependency of react 16.7 and up since it uses hooks that are not introduced to react until then.

Data fetching

As an adde bonus in this package there's also included a query builder to do data fetching from your api.

Minimum requirement example

A counter seems to be the most used example, so here we go:

install iomsg

npm install iomsg

Basic usage


import React from 'react'
import ReactDOM from 'react-dom'
import Warehouse, { createFactory, useFactory } from 'iomsg'

const counter = (data = { count: 0 }, message) => {
    switch (message.type) {
        case 'increment':
            return { count: data.count + 1 }
        case 'decrement':
            return { count: data.count - 1 }
        default:
            return data
    }
}

const factory = createFactory({
    workers: { counter },
})

const Comp = () => {
    const { data: { counter } send } = useFactory(factory)
    return (
        <>
            {counter.count}
            <button onClick={() => send({ type: 'increment' })}>
                increment
            </button>
            <button onClick={() => send({ type: 'decrement' })}>
                decrement
            </button>
        </>
    )
}

ReactDOM.render(
    <Warehouse factory={factory}>
        <Comp />
    </Warehouse>,
    document.getElementById('root')
)

That's it, you can run this example in any react environment (given it's 16.8 or higher).

createFactory

The create factory function takes a couple of parameter in the options JSON:

  • workers
  • Listeners

(Work in progress, more goodies will be added)

Workers

Is a dictionary of workers that can be used. in the example above we just use one but you can add many workers to the factory like so:


{
    worker1: workerfn1,
    worker2: workerfn2
    ...
}

Listeners

A listener is a function that listens to a message type and executes a function when it "hears" it. it's constructed like so:

import { listener } from 'iomsg'
export const inc = listener('increment', async (data, message, send) => {
    // send({ type: 'loading' })
    // await some data fetching
    // send({ type: 'loadingDone' })
})

when you create a listener it first takes a string that is the same name of the message type to listen to. Second it's a function that takes three arguments:

| value | description | | - | - | | data | The cached values that are in the factory. | | message | The message that gets intercepted. | | send | The same "send function" that you get from your factory. |

More things to come shortly.