
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
Quickly scan for CLI flags and arguments
This is a fast and lightweight alternative to minimist and yargs-parser.
It only exists because I find that I usually don't need most of what minimist and yargs-parser have to offer. However, mri is similar enough that it might function as a "drop-in replacement" for you, too!
See Comparisons for more info.
$ npm install --save mri
$ demo-cli --foo --bar=baz -mtv -- hello world
const mri = require('mri');
const argv = process.argv.slice(2);
mri(argv);
//=> { _: ['hello', 'world'], foo:true, bar:'baz', m:true, t:true, v:true }
mri(argv, { boolean:['bar'] });
//=> { _: ['baz', 'hello', 'world'], foo:true, bar:true, m:true, t:true, v:true }
mri(argv, {
alias: {
b: 'bar',
foo: ['f', 'fuz']
}
});
//=> { _: ['hello', 'world'], foo:true, f:true, fuz:true, b:'baz', bar:'baz', m:true, t:true, v:true }
Return: Object
Type: Array
Default: []
An array of arguments to parse. For CLI usage, send process.argv.slice(2). See process.argv for info.
Type: Object
Default: {}
An object of keys whose values are Strings or Array<String> of aliases. These will be added to the parsed output with matching values.
Type: Array|String
Default: []
A single key (or array of keys) that should be parsed as Booleans.
Type: Object
Default: {}
An key:value object of defaults. If a default is provided for a key, its type (typeof) will be used to cast parsed arguments.
mri(['--foo', 'bar']);
//=> { _:[], foo:'bar' }
mri(['--foo', 'bar'], {
default: { foo:true, baz:'hello', bat:42 }
});
//=> { _:['bar'], foo:true, baz:'hello', bat:42 }
Note: Because
--foohas a default oftrue, its output is cast to a Boolean. This means thatfoo=true, making'bar'an extra argument (_key).
Type: Array|String
Default: []
A single key (or array of keys) that should be parsed as Strings.
Type: Function
Default: undefined
Callback that is run when a parsed flag has not been defined as a known key or alias. Its only parameter is the unknown flag itself; eg --foobar or -f.
Once an unknown flag is encountered, parsing will terminate, regardless of your return value.
Note:
mrionly checks for unknown flags ifoptions.unknownandoptions.aliasare populated. Otherwise, everything will be accepted.
mri is 5x faster (see benchmarks)Numbers when possible
opts.boolean or opts.stringBooleans by default:
minimist(['-abc', 'hello']);
//=> { _:[], a:'', b:'', c:'hello' }
mri(['-abc', 'hello']);
//=> { _:[], a:true, b:true, c:'hello' }
opts.unknown behaves differently:
minimist, mri will not continue continue parsing after encountering an unknown flagoptions:
opts.stopEarlyopts['--']\n) within args (see test)mri is 40x faster (see benchmarks)Numbers when possible
opts.boolean or opts.stringoptions:
opts.arrayopts.configopts.coerceopts.countopts.envPrefixopts.nargopts.normalizeopts.configurationopts.numberopts['--']parser.detailed() methodoptions.unknown featureRunning Node.js v10.13.0
Load Times:
nopt 3.179ms
yargs-parser 2.137ms
minimist 0.746ms
mri 0.517ms
Benchmark:
minimist x 328,747 ops/sec ±1.09% (89 runs sampled)
mri x 1,622,801 ops/sec ±0.94% (92 runs sampled)
nopt x 888,223 ops/sec ±0.22% (92 runs sampled)
yargs-parser x 30,538 ops/sec ±0.81% (91 runs sampled)
MIT © Luke Edwards
Yargs is a more feature-rich command-line option parsing library compared to mri. It offers advanced features like command handling, automatic help generation, and more detailed option configurations. While mri focuses on simplicity and performance, yargs provides a broader set of functionalities for complex CLI applications.
Commander is another popular option parsing library that provides a high-level API for creating command-line interfaces. It supports subcommands, custom help, auto-completion, and more. Compared to mri, Commander is suited for more complex CLI applications that require structured commands and options.
Minimist is a minimalist option parsing library similar to mri in terms of simplicity and performance. It provides basic parsing capabilities with a focus on minimal overhead. While mri and minimist share similar goals, mri offers a slightly more modern API and additional features like option type specification.
FAQs
Quickly scan for CLI flags and arguments
The npm package mri receives a total of 8,379,392 weekly downloads. As such, mri popularity was classified as popular.
We found that mri 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.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.