JavaScript Runtime

What is Node.js

A server-side JavaScript runtime built on V8 that lets one language run your whole stack.

Official site

Overview

Node.js runs JavaScript outside the browser, on the server, using Chrome's V8 engine. Its event-driven, non-blocking I/O model makes it well suited to network-bound work — APIs, real-time services, and glue between systems — where a request spends most of its time waiting rather than computing.

Because it is JavaScript, Node lets a team share language, types and tooling between frontend and backend. Its package ecosystem (npm) is the largest of any language, which is both its greatest strength and a supply-chain responsibility.

What it is

Node.js is a runtime, not a framework. It provides the event loop, file/network access and a module system; you add a framework such as Express or NestJS on top to structure an application.

  • Non-blocking, single-threaded event loop (with worker threads available)
  • npm — the largest package registry in software
  • Excellent for I/O-heavy APIs and real-time services

When we reach for it

Node is our default backend runtime for REST/GraphQL APIs and backend-for-frontend layers, especially with TypeScript and NestJS. It keeps the whole stack in one language, which speeds up small-to-mid teams considerably.

Trade-offs

Node is not the tool for CPU-bound number-crunching — a single busy loop blocks everything, so heavy compute belongs in workers or a different language like Rust. The npm ecosystem is huge but demands care around dependencies and security.

How REO Rank uses it

Our core API runs on NestJS (a TypeScript framework on Node), and our AI/agent work uses TypeScript and Node for orchestration. When a hot path needs raw throughput — like our crawler — we drop to Rust instead.

Why it matters

Node.js is a runtime that lets JavaScript run on the server, outside the browser. It matters because it unified web development around one language — teams can use JavaScript (and TypeScript) across both front-end and back-end, sharing code, tooling and skills — and because its event-driven, non-blocking architecture makes it well-suited to the I/O-heavy workloads typical of web servers and APIs. It underpins a vast amount of modern web infrastructure, from API servers to build tools to the server-side rendering in frameworks like Next.js.

  • A runtime that runs JavaScript on the server, outside the browser
  • Unifies front-end and back-end around one language, tooling and skillset
  • Event-driven and non-blocking — well-suited to I/O-heavy web workloads

Key characteristics

Node.js runs on Google's V8 engine and uses a single-threaded, event-driven, non-blocking I/O model: rather than blocking a thread while waiting for a database or network call, it registers a callback and moves on, handling many concurrent connections efficiently. This makes it excellent for I/O-bound services (APIs, real-time apps, proxies) but less suited to CPU-heavy computation, which can block the event loop. Its npm ecosystem is the largest package registry in the world, giving enormous reach but also requiring care around dependencies. It powers not just servers but much of the JavaScript build tooling developers use daily.

  • Single-threaded, event-driven, non-blocking I/O for high concurrency
  • Excellent for I/O-bound services; poor for heavy CPU-bound computation
  • npm is the largest package ecosystem — huge reach, needs dependency care
  • Runs servers, APIs, real-time apps and much JS build tooling

When to use it

Node.js is a natural choice for web APIs, real-time applications (chat, live updates), server-side rendering, and any back-end where sharing JavaScript/TypeScript with the front-end is valuable. It is less appropriate as the primary engine for CPU-intensive work (heavy data processing, complex computation), where a language and runtime built for that would serve better — though such work can be offloaded to worker threads or separate services. The common pattern is Node.js for the I/O-heavy web tier, with heavy computation delegated elsewhere. For full-stack JavaScript teams, it is the default server runtime.

  • Ideal for web APIs, real-time apps and server-side rendering
  • Great when sharing JS/TS across front-end and back-end matters
  • Not ideal as the main engine for CPU-heavy computation
  • Offload heavy compute to worker threads or separate services

Common questions

Node.js — questions

Straight answers on how this fits your marketing and build.

Is Node.js a programming language?
No. Node.js is a runtime that executes JavaScript on the server. The language is JavaScript (or TypeScript compiled to it); Node provides the environment and I/O APIs to run it outside a browser.
When should you not use Node.js?
Avoid Node for heavy CPU-bound work — image processing, large computations — because its single event loop blocks under load. For those, use worker threads or a systems language like Rust. Node excels at I/O-bound APIs.
Is Node.js a programming language?
No — Node.js is a runtime environment that lets you run JavaScript (the language) on the server. JavaScript existed only in browsers before Node.js; Node.js provides the engine and APIs to execute it outside the browser, which is what enabled server-side and full-stack JavaScript development.
When is Node.js a poor choice?
For CPU-intensive workloads — heavy computation, large-scale data crunching or complex processing — because its single-threaded event loop can be blocked by long-running CPU work, hurting concurrency. Node.js excels at I/O-bound tasks; for CPU-bound work, either offload it to worker threads or separate services, or use a runtime designed for that.

Still have questions? Talk to a specialist