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 🙏

© 2025 – Pkg Stats / Ryan Hefner

little-process-box

v0.2.3

Published

A little toolkit for running and managing child processes.

Downloads

18

Readme

little-process-box

A little toolkit for running and managing child processes

Installation

$ npm install little-process-box

Status

Development/Testing/Documentation

Actions Status

Usage

const { Supervisor } = require('little-process-box')

const supervisor = new Supervisor()
const pool = supervisor.pool()

supervisor.service('http-server', {
  pool,
  exec: 'node',
  args: ['server.js'],
  env: { PORT: 3000 }
})

supervisor.service('discovery', {
  pool,
  exec: 'node',
  args: ['discovery.js'],
  env: { PORT: 9000 },
})

supervisor.start((err) => {
  // http + discovery should both started
  supervisor.stat({name: 'http-server'}, (err, stats) => {
    console.log(stats)
  })

  supervisor.stat({name: 'discovery'}, (err, stats) => {
    console.log(stats)
  })

  supervisor.stop() // stops all services
})

API

const pool = new ProcessPool([Factory])

The ProcessPool class represents a container of running processes managed by the instance. This class extends the Pool class from the nanoresource-pool module. You can override the default factory by supplying your own Factory that should implement the nanoresource

pool.spawn(command[, args[, opts]])

Creates and spawns a command in a new process managed by the pool.

pool.stat([where], callback)

Collects the stats of all running process calling callback(err, stats) upon success or error. The where object can be used to filter the results that get queried for stats.

pool.launch(pathspec[, opts])

Launches a program by way of an input pathspec that may be an application URL, path to an application directory, or something suitable for the operating system to launch ("open").

const supervisor = new Supervisor()

The Supervisor class represents a higher level container for ProcessPool instances in which it provides abilities to manage processes as services with consolidated logging, mutex locks, graceful shutdowns, and connected message channels.

supervisor.pools

A list of all pools.

supervisor.pool(opts)

Creates a new SupervisorProcessPool instance.

supervisor.service(name, opts)

Creates a named service with options from a new or given pool (opts.pool).

supervisor.stat([where], callback)

Queries all services in all process pools based on an optional where filter calling callback(err, results) upon success or error.

supervisor.start([callback])

Starts all services in all pools calling callback(err) upon success or error.

supervisor.stop([callback])

Stops all services in all pools calling callback(err) upon success or error.

supervisor.restart([callback])

Restarts all services in all pools calling callback(err) upon success or error.

const pool = new SupervisorProcessPool([opts])

The SupervisorProcessPool class represents an extended ProcessPool that creates Service instances as the process resource.

const service = new Service(options)

The Service class represents a named process that can be started, restarted, and stopped. The Service class inherits all properties from the Process class.

service.env

Environment object for the service.

service.pool

The pool that created this service.

service.type

The service type. This can be anything.

service.name

The service name. This can be anything.

service.exec

The command used to execute the service.

service.args

The command arguments used to execute the service.

service.description

A description of the service.

service.stdin

A Writable stream for the service's stdin.

service.stdout

A Readable stream for the service's stdout.

service.stderr

A Readable stream for the service's stderr.

service.started

true if the service has successfully started.

service.starting

true if the service is in the middle of starting.

service.stopped

true if the service is stopped.

service.start([callback])

Starts the services calling callback(err) upon success or error.

service.stop([callback])

Stops the services calling callback(err) upon success or error. This function will reset the nanoresource state (opened, opening, closed, closing, actives) to their initial values.

service.restart([callback])

Restarts the services calling callback(err) upon success or error. This function will call service.stop(callback)

service.stat([callback])

Same as [Process#stat()][nanoprocess#stat].

service.createLogStream()

Returns a readable stream to the caller that pipes stderr from the running service to the stream. If the service does not have a readable stderr stream, then the returned stream will automatically end.

const childProcess = new Process(command[, args[, opts]])

The Process class exported from nanoprocess.

const channel = new Channel(process)

The Channel class represents a channel for a running process that leverages IPC channels falling back to stdin and stdout streams to send and receive messages on where process can be a Process instance, a ChildProcess instance, or the global process object.

channel.send(buffer[, opts])

Sends a buffer to the process through the message channel where opts can be:

{
  id: 0, // The channel ID to send this on
  type: 0, // The message type
}

channel.close(callback)

Closes channel calling callback(err) upon success or error.

channel.destroy([err])

Close process message channel and cleans up all resources.

channel.on('message', message, id, type)

Emitted when a message a sent over the process channel where message is a Buffer of the message sent, id is the channel identifier and type is the message type.

channel.on('error', err)

Emitted when an error occurs on the channel process during the life time of the Channel instance.

channel.on('close')

Emitted when the channel closes.

License

MIT

See Also