Node.js is an
open-source
Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source model is a decentralized sof ...
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 outside a
web browser.
Node.js lets developers use JavaScript to write command line tools and for
server-side scripting. The functionality of running scripts server-side produces
dynamic web page
A server-side dynamic web page is a web page whose construction is controlled by an application server processing server-side scripts. In server-side scripting, parameters determine how the assembly of every new web page proceeds, and includin ...
content before the page is sent to the user's web browser. Consequently, Node.js represents a "JavaScript everywhere" paradigm, unifying
web-application development around a single programming language, rather than different languages for server-side and client-side scripts.
Node.js has an
event-driven architecture capable of
asynchronous I/O
In computer science, asynchronous I/O (also non-sequential I/O) is a form of input/output processing that permits other processing to continue before the transmission has finished. A name used for asynchronous I/O in the Windows API is overlapp ...
. These design choices aim to optimize
throughput and
scalability
Scalability is the property of a system to handle a growing amount of work by adding resources to the system.
In an economic context, a scalable business model implies that a company can increase sales given increased resources. For example, a ...
in web applications with many input/output operations, as well as for
real-time Web
The real-time web is a network web using technologies and practices that enable users to receive information as soon as it is published by its authors, rather than requiring that they or their software check a source periodically for updates.
Di ...
applications (e.g.,
real-time communication programs and
browser game
A browser game or a "flash game" is a video game that is played via the internet using a web browser. They are mostly free-to-play and can be single-player or multiplayer.
Some browser games are also available as mobile apps, PC games, or on co ...
s).
The Node.js
distributed development project was previously governed by the Node.js Foundation, and has now merged with the
JS Foundation
The OpenJS Foundation is an organization that was founded in 2019 from a merger of JS Foundation and Node.js Foundation. OpenJS Promotes the JavaScript and web ecosystem by hosting projects and funds activities that benefit the ecosystem. The OpenJ ...
to form the
OpenJS Foundation. OpenJS Foundation is facilitated by the
Linux Foundation
The Linux Foundation (LF) is a non-profit technology consortium founded in 2000 as a merger between Open Source Development Labs and the Free Standards Group to standardize Linux, support its growth, and promote its commercial adoption. Addit ...
's Collaborative Projects program.
Corporate users of Node.js software include
GoDaddy
GoDaddy Inc. is an American publicly traded Internet domain registrar and web hosting company headquartered in Tempe, Arizona, and incorporated in Delaware.
, GoDaddy has more than 21 million customers and over 6,600 employees worldwide. The c ...
,
Groupon,
IBM,
LinkedIn,
Microsoft,
Netflix,
PayPal,
SAP
Sap is a fluid transported in xylem cells (vessel elements or tracheids) or phloem sieve tube elements of a plant. These cells transport water and nutrients throughout the plant.
Sap is distinct from latex, resin, or cell sap; it is a separ ...
,
Walmart,
Yahoo!, and
Amazon Web Services
Amazon Web Services, Inc. (AWS) is a subsidiary of Amazon that provides on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis. These cloud computing web services provide ...
.
History
Node.js was written initially by
Ryan Dahl in 2009,
about thirteen years after the introduction of the first server-side JavaScript environment,
Netscape's LiveWire Pro Web. The initial release supported only Linux and Mac OS X. Its development and maintenance was led by Dahl and later sponsored by
Joyent.
Dahl criticized the limited possibilities of the most popular web server in 2009,
Apache HTTP Server
The Apache HTTP Server ( ) is a free and open-source cross-platform web server software, released under the terms of Apache License 2.0. Apache is developed and maintained by an open community of developers under the auspices of the Apache Sof ...
, to handle a lot of concurrent connections (up to 10,000 and more) and the most common way of creating code (sequential programming), when code either blocked the entire process or implied multiple execution stacks in the case of simultaneous connections.
Dahl demonstrated the project at the inaugural European JSConf on November 8, 2009.
[Sams Teach Yourself Node.js in 24 Hours](_blank)
Sams Publishing, 05-Sep-2012 Node.js combined
Google's
V8 JavaScript engine, an
event loop, and a low-level
I/O API
An application programming interface (API) is a way for two or more computer programs to communicate with each other. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how ...
.
[Professional Node.js: Building JavaScript Based Scalable Software](_blank)
John Wiley & Sons, 01-Oct-2012
In January 2010, 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 wi ...
was introduced for the Node.js environment called
''npm''. The package manager makes it easier for programmers to publish and share source code of Node.js packages and is designed to simplify installation, updating, and uninstallation of packages.
In June 2011, Microsoft and Joyent implemented a native
Windows version of Node.js. The first Node.js build supporting Windows was released in July 2011.
In January 2012, Dahl stepped aside, promoting coworker and ''
npm'' creator Isaac Schlueter to manage the project. In January 2014, Schlueter announced that Timothy J. Fontaine would lead the project.
In December 2014, Fedor Indutny started io.js, a
fork of Node.js. Due to the internal conflict over Joyent's governance, io.js was created as an
open governance alternative with a separate technical committee.
[Q&A: Why io.js decided to fork Node.js](_blank)
InfoWorld
''InfoWorld'' (abbreviated IW) is an information technology media business. Founded in 1978, it began as a monthly magazine. In 2007, it transitioned to a web-only publication. Its parent company today is International Data Group, and its siste ...
Tech Watch Unlike Node.js, the authors planned to keep io.js up-to-date with the latest releases of the Google V8 JavaScript engine.
In February 2015, the intent to form a neutral Node.js Foundation was announced. By June 2015, the Node.js and io.js communities voted to work together under the Node.js Foundation.
In September 2015, Node.js v0.12 and io.js v3.3 were merged back together into Node v4.0. This merge brought V8
ES6
ECMAScript (; ES) is a JavaScript standard intended to ensure the interoperability of web pages across different browsers. It is standardized by Ecma International in the documenECMA-262
ECMAScript is commonly used for client-side scripting o ...
features into Node.js and a long-term support release cycle. As of 2016, the io.js website recommends that developers switch back to Node.js and that no further releases of io.js are planned due to the merge.
In 2019, the JS Foundation and Node.js Foundation merged to form the
OpenJS Foundation.
In September 2022, Node.js 18.9.0 was released.
Overview
Node.js allows the creation of
Web servers and networking tools using
JavaScript and a collection of "modules" that handle various core functionalities.
[Smashing Node.js: JavaScript Everywhere](_blank)
John Wiley & Sons, 14-Aug-2012 Modules are provided for
file system I/O, networking (
DNS
The Domain Name System (DNS) is a hierarchical and distributed naming system for computers, services, and other resources in the Internet or other Internet Protocol (IP) networks. It associates various information with domain names assigned to ...
,
HTTP
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
,
TCP,
TLS/SSL
Transport Layer Security (TLS) is a cryptographic protocol designed to provide communications security over a computer network. The protocol is widely used in applications such as email, instant messaging, and voice over IP, but its use in secur ...
, or
UDP),
binary
Binary may refer to:
Science and technology Mathematics
* Binary number, a representation of numbers using only two digits (0 and 1)
* Binary function, a function that takes two arguments
* Binary operation, a mathematical operation that ta ...
data (buffers),
cryptography
Cryptography, or cryptology (from grc, , translit=kryptós "hidden, secret"; and ''graphein'', "to write", or ''-logia'', "study", respectively), is the practice and study of techniques for secure communication in the presence of adve ...
functions,
data streams, and other core functions.
Node.js's modules use an API designed to reduce the complexity of writing server applications.
[Node.js Essentials](_blank)
Packt Publishing, 10-Nov-2015
JavaScript is the only language that Node.js supports natively, but many
compile-to-JS languages are available. As a result, Node.js applications can be written in
CoffeeScript
CoffeeScript is a programming language that compiles to JavaScript. It adds syntactic sugar inspired by Ruby, Python, and Haskell in an effort to enhance JavaScript's brevity and readability. Specific additional features include list comprehens ...
,
Dart
Dart or DART may refer to:
* Dart, the equipment in the game of darts
Arts, entertainment and media
* Dart (comics), an Image Comics superhero
* Dart, a character from ''G.I. Joe''
* Dart, a ''Thomas & Friends'' railway engine character
* Da ...
,
TypeScript,
ClojureScript and others.
Node.js is primarily used to build network programs such as Web servers.
[Node.js for PHP Developers](_blank)
O'Reilly Media, Inc., 2013 The most significant difference between Node.js and
PHP is that most functions in PHP
block
Block or blocked may refer to:
Arts, entertainment and media Broadcasting
* Block programming, the result of a programming strategy in broadcasting
* W242BX, a radio station licensed to Greenville, South Carolina, United States known as ''96.3 ...
until completion (commands execute only after previous commands finish), while Node.js functions are
non-blocking (commands execute
concurrently or even in
parallel
Parallel is a geometric term of location which may refer to:
Computing
* Parallel algorithm
* Parallel computing
* Parallel metaheuristic
* Parallel (software), a UNIX utility for running programs in parallel
* Parallel Sysplex, a cluster of IB ...
,
and use
callbacks
In computer programming, a callback or callback function is any reference to executable code that is passed as an argument to another piece of code; that code is expected to ''call back'' (execute) the callback function as part of its job. Thi ...
to signal completion or failure).
Node.js is officially supported on
Linux, and
Microsoft Windows 8.1 and Server 2012 (and later),
with tier 2 support for
SmartOS and
IBM AIX
AIX (Advanced Interactive eXecutive, pronounced , "ay-eye-ex") is a series of proprietary Unix operating systems developed and sold by IBM for several of its computer platforms.
Background
Originally released for the IBM RT PC RISC work ...
and experimental support for
FreeBSD.
OpenBSD also works, and LTS versions available for
IBM i (AS/400). The provided source code may also be built on similar operating systems to those officially supported or be modified by third parties to support others such as
NonStop OS and
Unix servers.
Platform architecture
Node.js brings
event-driven programming to
web servers, enabling development of fast web servers in JavaScript.
Developers can create scalable servers without using
threading, by using a simplified model of
event-driven programming that uses callbacks to signal the completion of a task.
Node.js connects the ease of a scripting language (JavaScript) with the power of Unix network programming.
Node.js was built on top of
Google's
V8 JavaScript engine since it was open-sourced under the
BSD license
BSD licenses are a family of permissive free software licenses, imposing minimal restrictions on the use and distribution of covered software. This is in contrast to copyleft licenses, which have share-alike requirements. The original BSD lice ...
. It is proficient with internet fundamentals such as
HTTP
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
,
DNS
The Domain Name System (DNS) is a hierarchical and distributed naming system for computers, services, and other resources in the Internet or other Internet Protocol (IP) networks. It associates various information with domain names assigned to ...
, and
TCP.
JavaScript was also a well-known language, making Node.js accessible to the
web development community.
Industry support
There are thousands of open-source libraries for Node.js, most of them hosted on the
npm website. There are multiple developer conferences and events that support the Node.js community, including NodeConf, Node Interactive, and Node Summit as well as a number of regional events.
The open-source community has developed
web frameworks to accelerate the development of applications. Such frameworks include Connect,
Express.js
Express.js, or simply Express, is a back end web application framework for building RESTful APIs with Node.js, released as free and open-source software under the MIT License. It is designed for building web applications and APIs. It has been c ...
,
Socket.IO, Feathers.js, Koa.js, Hapi.js,
Sails.js,
Meteor, Derby, and many others.
[Express.js Guide: The Comprehensive Book on Express.js](_blank)
Azat Mardan, 28-May-2014 Various packages have also been created for interfacing with other languages or runtime environments such as
Microsoft .NET
The Microsoft .NET strategy is a marketing plan that Microsoft followed in the early 2000s. Steve Ballmer described it as the company's "most ambitious undertaking since Internet Strategy Day in 1995". In support of this strategy, between 2000 and ...
.
Modern desktop
IDEs Ides or IDES may refer to:
Calendar dates
* Ides (calendar), a day in the Roman calendar that fell roughly in the middle of the month. In March, May, July, and October it was the 15th day of the month; in other months it was the 13th.
**Ides of Mar ...
provide editing and debugging features specifically for Node.js applications. Such IDEs include
Atom,
Brackets,
JetBrains
JetBrains s.r.o. (formerly IntelliJ Software s.r.o.) is a Czech software development company which makes tools for software developers and project managers. , the company has offices in Prague; Munich; Berlin; Boston, Massachusetts; Amsterdam; ...
WebStorm,
Microsoft Visual Studio
Visual Studio is an integrated development environment (IDE) from Microsoft. It is used to develop computer programs including web site, websites, web apps, web services and mobile apps. Visual Studio uses Microsoft software development platfor ...
(with Node.js Tools for Visual Studio, or
TypeScript with Node definitions,)
NetBeans,
Nodeclipse Enide Studio (
Eclipse-based), and
Visual Studio Code
Visual Studio Code, also commonly referred to as VS Code, is a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. Features include support for debugging, syntax highlighting, intelligent code complet ...
.
Certain online web-based IDEs also support Node.js, such as
Codeanywhere Codeanywhere is a cross-platform cloud integrated development environment (IDE) created by Codeanywhere, Inc. Codeanywhere enables users to write, edit, collaborate, and run web development projects from a web browser or mobile device.
Codeanywher ...
,
Codenvy,
Cloud9 IDE
Cloud9 IDE is an Online IDE (integrated development environment), published as open source from version 2.0, until version 3.0. It supports multiple programming languages, including C, C++, PHP, Ruby, Perl, Python, JavaScript with Node.js, ...
, Koding, and the visual flow editor in
Node-RED.
Node.js is supported across a number of cloud-hosting platforms like
Jelastic,
Google Cloud Platform,
AWS Elastic Beanstalk,
Joyent and others.
Releases
New major releases of Node.js are cut from the
GitHub main branch every six months. Even-numbered versions are cut in April and odd-numbered versions are cut in October. When a new odd version is released, the previous even version undergoes transition to
Long Term Support (LTS), which gives that version 18 months of active support from the date it is designated LTS. After these 18 months expire, an LTS release receives an additional 12 months of maintenance support. An active version receives non-breaking backports of changes a few weeks after they land in the current release. A maintenance release receives only critical fixes and documentation updates.
The LTS Working Group manages strategy and policy in collaboration with the Technical Steering Committee of the Node.js Foundation.
Technical details
Node.js is a JavaScript runtime environment that processes incoming requests in a loop, called the
event loop.
Internals
Node.js uses
libuv under the hood to handle asynchronous events. Libuv is an abstraction layer for network and file system functionality on both Windows and
POSIX-based systems such as Linux,
macOS, OSS on
NonStop, and Unix.
Threading
Node.js operates on a
single-thread event loop, using
non-blocking I/O
In computer science, asynchronous I/O (also non-sequential I/O) is a form of input/output processing that permits other processing to continue before the transmission has finished. A name used for asynchronous I/O in the Windows API is overlapp ...
calls, allowing it to support tens of thousands of concurrent connections without incurring the cost of thread
context switch
In computing, a context switch is the process of storing the state of a process or thread, so that it can be restored and resume execution at a later point, and then restoring a different, previously saved, state. This allows multiple processes ...
ing. The design of sharing a single thread among all the requests that use the
observer pattern is intended for building highly concurrent applications, where any function performing I/O must use a
callback
Callback may refer to:
* Callback (comedy), a joke which refers to one previously told
* Callback (computer programming), executable code that is passed as a parameter to other code
* Callback (telecommunications), the telecommunications event tha ...
. To accommodate the single-threaded event loop, Node.js uses the
libuv library—which, in turn, uses a fixed-sized thread pool that handles some of the non-blocking asynchronous I/O operations.
A thread pool handles the execution of parallel tasks in Node.js. The main thread function call posts tasks to the shared task queue, which threads in the thread pool pull and execute. Inherently non-blocking system functions such as networking translate to kernel-side non-blocking sockets, while inherently blocking system functions such as file I/O run in a blocking way on their own threads. When a thread in the thread pool completes a task, it informs the main thread of this, which in turn, wakes up and executes the registered callback.
A downside of this single-threaded approach is that Node.js does not allow
vertical scaling
Scalability is the property of a system to handle a growing amount of work by adding resources to the system.
In an economic context, a scalable business model implies that a company can increase sales given increased resources. For example, a ...
by increasing the number of
CPU core
A central processing unit (CPU), also called a central processor, main processor or just processor, is the electronic circuitry that executes instructions comprising a computer program. The CPU performs basic arithmetic, logic, controlling, an ...
s of the machine it is running on without using an additional module, such as cluster,
StrongLoop Process Manager, or pm2. However, developers can increase the default number of threads in the libuv thread pool. The server
operating system (OS) is likely to distribute these threads across multiple cores. Another problem is that long-lasting computations and other CPU-bound tasks freeze the entire event-loop until completion.
V8
V8 is the JavaScript execution engine which was initially built for
Google Chrome
Google Chrome is a cross-platform web browser developed by Google. It was first released in 2008 for Microsoft Windows, built with free software components from Apple WebKit and Mozilla Firefox. Versions were later released for Linux, macOS, ...
. It was then open-sourced by Google in 2008. Written in
C++
C, or c, is the third letter in the Latin alphabet, used in the modern English alphabet, the alphabets of other western European languages and others worldwide. Its name in English is ''cee'' (pronounced ), plural ''cees''.
History
"C" ...
, V8 compiles JavaScript source code to native machine code
at runtime.
As of 2016, it also includes Ignition, a
bytecode interpreter
Bytecode (also called portable code or p-code) is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references (normall ...
.
Package management
npm is the pre-installed package manager for the Node.js server platform. It installs Node.js programs from th
npm registry organizing the installation and management of third-party Node.js programs. Packages in the npm registry can range from simple helper libraries such as
Lodash
Lodash is a JavaScript library which provides utility functions for common programming tasks using the functional programming paradigm.
History
''See also Underscore § History.''
Lodash is a fork of Underscore.js.
It joined the Dojo Fo ...
to task runners such as
Grunt.
Unified API
Node.js can be combined with a browser with your site , a database that supports JSON data (such as
Postgres,
MongoDB, or
CouchDB
Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.
CouchDB uses multiple formats and protocols to store, transfer, and process its data. It uses JSON to store data, JavaScript as its query language using M ...
) and
JSON for a unified JavaScript development stack. With the adaptation of what were essentially server-side development patterns such as
MVC,
MVP
In team sports, a most valuable player award, abbreviated 'MVP award', is an honor typically bestowed upon an individual (or individuals, in the instance of a tie) whose individual performance is the greatest in an entire league, for a partic ...
,
MVVM, etc., Node.js allows the
reuse
Reuse is the action or practice of using an item, whether for its original purpose (conventional reuse) or to fulfill a different function ( creative reuse or repurposing). It should be distinguished from recycling, which is the breaking down of ...
of the same model and service interface between client side and server side.
Event loop
Node.js registers with the operating system so the OS notifies it of connections and issues a callback. Within the Node.js runtime, each connection is a small
heap allocation
In computer science, manual memory management refers to the usage of manual instructions by the programmer to identify and deallocate unused objects, or garbage. Up until the mid-1990s, the majority of programming languages used in industry suppo ...
. Traditionally, relatively heavyweight OS processes or threads handled each connection. Node.js uses an event loop for scalability, instead of processes or threads. In contrast to other event-driven servers, Node.js's event loop does not need to be called explicitly. Instead, callbacks are defined, and the server automatically enters the event loop at the end of the callback definition. Node.js exits the event loop when there are no further callbacks to be performed.
WebAssembly
Node.js supports
WebAssembly and as of Node 14 has experimental support of
WASI, the WebAssembly System Interface.
Native bindings
Node.js provides a way to create "add-ons" via a
C-based API called N-API, which can be used to produce loadable (importable)
.node
modules from source code written in C/C++.
The modules can be directly loaded into memory and executed from within JS environment as simple CommonJS modules. The implementation of the N-API relies on internal C/C++ Node.js and V8 objects requiring users
to import (
#include) Node.js specific
headers into their native source code.
As the Node.js platform constantly evolves, the API compatibility is subject to changes, and may sometimes get broken by a new version (as a consequence, modules have to be built against specific Node.js versions to work correctly). To address the issue, third parties have introduced open-sourced С/С++ wrappers on top of the API that partially alleviate the problem. They simplify interfaces, but as a side effect they may also introduce complexity which maintainers have to deal with. Even though the core functionality of Node.js resides in a JavaScript built-in library, modules written in C++ can be used to enhance capabilities and to improve performance of applications.
In order to produce such modules one needs to have an appropriate C++ compiler and necessary headers (the latter are typically shipped with Node.js itself):
gcc,
clang
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection (GCC) ...
or
MSVC++.
The N-API is similar to
Java Native Interface.
Project governance
In 2015, various branches of the greater Node.js community began working under the vendor-neutral Node.js Foundation. The stated purpose of the organization "is to enable widespread adoption and help accelerate development of Node.js and other related modules through an open governance model that encourages participation, technical contribution, and a framework for long-term stewardship by an ecosystem invested in Node.js' success."
The Node.js Foundation Technical Steering Committee (TSC) is the technical governing body of the Node.js Foundation. The TSC is responsible for the core Node.js repo as well as dependent and adjacent projects. Generally the TSC delegates the administration of these projects to working groups or committees. The LTS group that manages long term supported releases is one such group. Other current groups include Website, Streams, Build, Diagnostics, i18n, Evangelism, Docker, Addon API, Benchmarking, Post-mortem, Intl, Documentation, and Testing.
In August 2017, a third of the TSC members resigned due to a dispute related to the project's code of conduct.
[Whittaker, Zack, ]
After governance breakdown, Node.js leaders fight for its survival
', ZDNet, 25 August 2017
See also
*
Deno—a back-end runtime environment for JavaScript and TypeScript, also created by Ryan Dahl.
References
Further reading
*
*
*
*
*
External links
*
*
{{Use dmy dates, date=November 2019
2009 software
Free software programmed in C++
Free software programmed in JavaScript
JavaScript libraries
Joyent
Linux Foundation projects
Software using the MIT license