npm (
originally short for Node Package Manager) is a
package manager
A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner.
A package manager deals w ...
for the
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
programming language maintained by
npm, Inc. npm is the default package manager for the JavaScript runtime environment
Node.js
Node.js is an open-source server environment. Node.js is cross-platform and runs on Windows, Linux, Unix, and macOS. Node.js is a back-end JavaScript runtime environment. Node.js runs on the V8 JavaScript Engine and executes JavaScript code ou ...
. It consists of a command line client, also called npm, and an
online database An online database is a database accessible from a local network or the Internet, as opposed to one that is stored locally on an individual computer or its attached storage (such as a CD). Online databases are hosted on websites, made available as s ...
of public and paid-for private packages, called the npm registry. The registry is accessed via the client, and the available packages can be browsed and searched via the npm website. The package manager and the registry are managed by npm, Inc.
Acronym
npm
is officially a "recursive
bacronymic abbreviation for 'npm is not a package manager. However, the initial commit of
npm
referred to it as the "Node Package Manager". The expansion of the name was changed in 2014.
History
npm is written entirely in JavaScript and was developed by Isaac Z. Schlueter as a result of having "seen module packaging done terribly" and with inspiration from other similar projects such as
PEAR
Pears are fruits produced and consumed around the world, growing on a tree and harvested in the Northern Hemisphere in late summer into October. The pear tree and shrub are a species of genus ''Pyrus'' , in the family Rosaceae, bearing the p ...
(
PHP
PHP is a General-purpose programming language, general-purpose scripting language geared toward web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementati ...
) and
CPAN
The Comprehensive Perl Archive Network (CPAN) is a repository of over 250,000 software modules and accompanying documentation for 39,000 distributions, written in the Perl programming language by over 12,000 contributors. ''CPAN'' can denote eith ...
(
Perl
Perl is a family of two High-level programming language, high-level, General-purpose programming language, general-purpose, Interpreter (computing), interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it ...
).
Notable breakages
* In March 2016, npm attracted press attention
after a package called
left-pad
, which many popular JavaScript packages depended on, was unpublished as the result of a naming dispute between Azer Koçulu, a self-taught software engineer, and
Kik
KiK, legally ''KiK Textilien und Non-Food GmbH'', is a German clothing discount store chain headquartered in Bönen.
Overview
KiK was founded in 1994 by Stefan Heinig and the holding company Tengelmann Group. ''KiK'' is an acronym for ( en, T ...
. Although the package was republished three hours later, it caused widespread disruption, leading npm to change its policies regarding unpublishing to prevent a similar event in the future.
* In February 2018, an issue was discovered in version 5.7.0 in which running
sudo npm
on Linux systems would change the ownership of system files, permanently breaking the operating system.
* In July 2018, the npm credentials of a maintainer of the popular
eslint-scope
package were compromised resulting in a malicious release of
eslint-scope
, version 3.7.2. The malicious code copied the npm credentials of the machine running
eslint-scope
and uploaded them to the attacker.
* In November 2018, it was discovered that a malicious package had been added as a dependency to version 3.3.6 of the popular package
event-stream
. The malicious package, called
flatmap-stream
, contained an encrypted payload that stole
bitcoin
Bitcoin ( abbreviation: BTC; sign: ₿) is a decentralized digital currency that can be transferred on the peer-to-peer bitcoin network. Bitcoin transactions are verified by network nodes through cryptography and recorded in a public di ...
s from certain applications. npm administrators removed the offending package.
* In April 2020, a small package called
is-promise
resulted in outage in serverless applications and deployments worldwide by virtue of being a dependency of many big and important applications.
* In January 2022, the maintainer of the popular package
colors
pushed changes printing garbage text in an infinite loop. The maintainer also cleared the repository of another popular package,
faker
, and its package on npm, and replaced it with a README that read, "What really happened to
Aaron Swartz
Aaron Hillel Swartz (November 8, 1986 – January 11, 2013) was an American computer programmer, entrepreneur, writer, political organizer, and Internet hacktivist. A prolific programmer, Swartz helped develop the web feed format RSS, the tech ...
?"
* In March 2022, developer
Brandon Nozaki Miller released a version of the package
node-ipc
containing malicious code that would delete files from users with Belarusian and Russian IP addresses, in protest of the
Russian invasion of Ukraine
On 24 February 2022, in a major escalation of the Russo-Ukrainian War, which began in 2014. The invasion has resulted in tens of thousands of deaths on both sides. It has caused Europe's largest refugee crisis since World War II. ...
.
Vue.js
Vue.js (commonly referred to as Vue; pronounced "view") is an open-source model–view–viewmodel front end JavaScript framework for building user interfaces and single-page applications. It was created by Evan You, and is maintained by him a ...
, which uses
node-ipc
as a dependency, did not pin its dependencies to a safe version, meaning that some users of Vue.js became affected by the malicious package if the dependency was fetched as the latest package. The affected dependency was also briefly present in version 3.1 of
Unity Hub; a hotfix was released the same day to remove the issue, however.
Description
npm is included as a recommended feature in the
Node.js
Node.js is an open-source server environment. Node.js is cross-platform and runs on Windows, Linux, Unix, and macOS. Node.js is a back-end JavaScript runtime environment. Node.js runs on the V8 JavaScript Engine and executes JavaScript code ou ...
installer.
npm consists of a
command line
A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
client that interacts with a remote registry. It allows users to consume and distribute JavaScript modules that are available in the registry.
Packages in the registry are in
CommonJS
CommonJS is a project with the goal to establish conventions on the module ecosystem for JavaScript outside of the web browser. The primary reason for its creation was a major lack of commonly accepted forms of JavaScript module units which coul ...
format and include a metadata file in
JSON
JSON (JavaScript Object Notation, pronounced ; also ) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other s ...
format.
Over 1.3 million packages are available in the main npm registry. The registry does not have any vetting process for submission, which means that packages found there can potentially be low quality, insecure, or malicious.
Instead, npm relies on user reports to take down packages if they violate policies by being low quality, insecure, or malicious. npm exposes statistics including number of downloads and number of depending packages to assist developers in judging the quality of packages.
In npm version 6, the audit feature was introduced to help developers identify and fix security vulnerabilities in installed packages. The source of security vulnerabilities were taken from reports found on the Node Security Platform (NSP) and has been integrated with npm since npm's acquisition of NSP.
Usage
npm can manage packages that are local
dependencies of a particular project, as well as globally-installed JavaScript tools.
When used as a dependency manager for a local project, npm can install, in one command, all the dependencies of a project through the
package.json
file.
In the
package.json
file, each dependency can specify a range of valid
versions
Version may refer to:
Computing
* Software version, a set of numbers that identify a unique evolution of a computer program
* VERSION (CONFIG.SYS directive), a configuration directive in FreeDOS
Music
* Cover version
* Dub version
* Remix
* ''Ve ...
using the semantic versioning scheme, allowing developers to auto-update their packages while at the same time avoiding unwanted breaking changes.
npm also provides version-bumping tools for developers to tag their packages with a particular version.
[
] npm also provides the
package-lock.json
file which has the entry of the exact version used by the project after evaluating semantic versioning in
package.json
.
Alternatives
There are a number of open-source alternatives to npm for installing modular JavaScript, including
ied
,
pnpm
,
npmd
, and
Yarn
Yarn is a long continuous length of interlocked fibres, used in sewing, crocheting, knitting, weaving, embroidery, ropemaking, and the production of textiles. Thread is a type of yarn intended for sewing by hand or machine. Modern manufac ...
, the last of which was released by
Facebook
Facebook is an online social media and social networking service owned by American company Meta Platforms. Founded in 2004 by Mark Zuckerberg with fellow Harvard College students and roommates Eduardo Saverin, Andrew McCollum, Dustin ...
in October 2016.
They are all compatible with the public npm registry and use it by default, but provide different client-side experiences, usually focused on improving performance and
determinism
Determinism is a philosophical view, where all events are determined completely by previously existing causes. Deterministic theories throughout the history of philosophy have developed from diverse and sometimes overlapping motives and consi ...
compared to the npm client.
Registry
Internally npm relies on the NoSQL
Couch DB to manage publicly available data.
See also
*
Software repository
A software repository, or repo for short, is a storage location for software packages. Often a table of contents is also stored, along with metadata. A software repository is typically managed by source control or repository managers. Package ...
*
Universal package manager
References
External links
*
{{Microsoft FOSS
Command-line software
Free package management systems
Free software programmed in JavaScript
JavaScript programming tools
Microsoft free software
Software using the Artistic license
2010 software