
Research
/Security News
77 Firefox Extensions Linked to Crypto Wallet and Credential Theft
Socket uncovered 77 linked Firefox extensions, including 40 that steal wallet secrets or credentials and 37 deceptive sports-score shells.
multi-tool
Advanced tools
Install multiple versions of NPM packages at runtime. Use any semver ranges which are also a valid (Li|U)nix directory
names as your versions and require them intuitively (e.g. require('ramda@0.23.x'), require('ramda@~0.22.1'),
require('ramda@latest')). Leverage custom invalidators to automatically keep installed packages up-to-date.
$ npm install --save multi-tool
An options object is required to configure before using. However, only path is required:
const options = {delay: 2500, path: 'node_modules', invalidate: () => true, timeout: 60000};
const install = require('multi-tool')(options);
const installed = await install('ramda', 'latest');
const R = require('ramda@latest');
R.identity(0);
const installed = await install('ramda', '0.23.0');
const R = require('ramda@0.23.0');
R.identity(0);
const installed = await install('ramda', '0.23.x');
const R = require('ramda@0.23.x');
R.identity(0);
const installed = await install('ramda', '~0.22.1');
const R = require('ramda@~0.22.1');
R.identity(0);
const installed = await install('ramda', '^0.22.1');
const R = require('ramda@^0.22.1');
R.identity(0);
const installed = await install('package-doesnt-exist', 'latest');
const installed = await install('ramda', '99.99.99');
It is possible to use custom invalidators to customize when multi-tool should assume an already successfully
installed package should be reinstalled. This is accomplished via a higher-order function passed as an argument upon
require. The invalidator function is executed upon each install. The invalidator function is provided the package
name, the package version, and how many milliseconds ago the package at hand was last successfully installed.
The invalidator function should return a Boolean value which when true will invalidate the previously successfully
installed package and reinstall. The default invalidator behavior is to always invalidate.
const invalidate = (name, version, age) => age >= 0;
const install = require('multi-tool')({path: 'node_modules', invalidate});
const invalidate = (name, version, age) => age >= Number.MAX_SAFE_INTEGER;
const install = require('multi-tool')({path: 'node_modules', invalidate});
const invalidate = (name, version, age) => version === 'latest' && age >= 600000;
const install = require('multi-tool')({path: 'node_modules', invalidate});
FAQs
Install and require multiple simultaneous versions of any NPM package
The npm package multi-tool receives a total of 2 weekly downloads. As such, multi-tool popularity was classified as not popular.
We found that multi-tool demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Socket uncovered 77 linked Firefox extensions, including 40 that steal wallet secrets or credentials and 37 deceptive sports-score shells.

Security News
NIST disclosed an unreleased AI tool called V-etalon and opened a broad inquiry into NVD modernization after years of automation plans produced no public enrichment system.

Security News
In his AI Council 2026 talk, Feross Aboukhadijeh covers recent package compromises, vulnerability discovery, and a more automated security model.