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

multi-npm

v1.0.8

Published

Multiple node Package Manager (mpm)

Readme

Multiple node Package Manager (MPM)

An open-source library to manage multiple packages.

mpm enable you to clone, install, sync, build and link your packages in a multi-package / component solution. It is perfect to be used as a dev tool in a micro-services environment. Instead of cloning multiple repositories / packages, navigating to each one, installing it, building, starting it manually and configure how each package "talks" with the other in your local dev environment, you can use simple mpm install, mpm link, and mpm start commands to install all your packages, link, and start those. The library if fully customizable and gives you full control via the multi-package.json file. There you define the packages, their scripts and more.

mpm in action

Platforms

Currenly supported only for Mac OS and Linux. You are welcomed to contribute more support ;)

Installation

npm install -g multi-npm

Usage

  1. Initiate an mpm project
    $ mkdir <your-projects-folder>
    $ cd <your-projects-folder>
    $ mpm init
  2. Follow the mpm init instructions to create your multi-package.json
  3. Install your packages
    $ mpm install
  4. Run
    $ mpm link
  5. Run
    $ mpm start
  6. Sync (git-wise)
    $ mpm pull
  7. Add whichever commands and scripts you would like.

The mutli-package.json file:

The multi-package.json file holds the packages configuration for the different scripts.

{
   "packages": {
      "package1": {
         "name": "package1",
         "repository": "https://github.com/<package1>.git",
         "branch": "<The desired working branch to sync with>",
         "scripts": {
            "install": "git clone https://github.com/<package1>.git <package1> && cd <package1> && git checkout <working-branch> && npm install",
            "pull": "git stash && git pull --rebase && git stash pop && npm install"
         }
      },
      "package2": {
         "name": "package2",
         "repository": "https://github.com/<package2>.git",
         "branch": "<The desired working branch to sync with>",
         "scripts": {
            "install": "git clone https://github.com/<package1>.git <package2> && cd <package2> && git checkout <working-branch> && npm install && node **do-something-important-after-install.js**",
            "pull": "git stash && git pull --rebase && git stash pop && npm install"
         }
      }
   },
   "scripts": {
        "build": "node my-custom-build-script.js"
   }
}

It has 2 sections:

  1. packages: an object with all the packages configuration. Each package configuration has a name key, and scripts section. The repository and branch keys are not required, and are added during the "wizard"-like mpm init process. The important section is the scripts section, in which the different custom scripts are defined. When running mpm install for example, mpm iterates through the install scripts (defined in the multi-package.json) for each package and run it (synchronized). In case the script is not defined in the multi-package.json file, but it is a valid npm script (e.g. update), mpm would run it as well. Meaning, all npm scripts are inherently supported, unless overriden by the multi-package.json file. Running mpm my-script will run all matching scripts in the multi-package.json packages sections.

Important note: In case of an overlap between a script name defined in the packages section, and a script defined in the scripts section, the scripts will run, and the packages scripts will not.

  • init: Initiates the multi-package.json file.
  • start: Runs the start script of the different packages (as defined in the multi-package.json file) - each in its own terminal tab.
  • link: Create symlinks between all your local packages. see below. e.g. running mpm start for 5 packages, opens 5 different terminal tabs, navigates to each package in the corresponding tab, and run the start script for it. You may pass a -p or --package parameter to run specific packages (e.g. mpm start -p package1 -p package4)
  1. scripts: Holds the custom scripts you may want to add to mpm. In the initial multi-package.json file created in the init process, this section is empty. You may add scripts you can run via mpm myCustomeScript.

Linking of local packages

mpm provides an option to create all the symlinks between your packages automatically using mpm link. Assuming npm install had been run for each package, it goes throught all the node_modules of each package, and replaces the packages that are also found in the root mpm folder with a symlink to the local package. for example:

root
|
- lib1
- package1
  |
  -lib1
  -lib2
  ...
- package2
- ...

In the example above, mpm link would replace lib1 inside package1/node_modules with a symlink to root/lib1. It achieves the same result as runnin npm install '../lib1' from within root/package1 folder.

That way, the package.json file reamins unchanged for package1 and commits can be done without any staging problems.