Engines and Runtimes

A JavaScript engine implements ECMAScript: it parses source, runs it through interpreters and just-in-time (JIT) compilers, and collects garbage. On its own it cannot print text, read a file or change a page. A runtime (or host) embeds the engine and adds APIs and an event loop: a browser adds the DOM, fetch() and timers; Node.js 2,131 adds process, fs and network sockets. Browsers and Engines pairs these engines with browsers; Node.js Quick Start installs Node.js.

The major engines and server-side runtimes
Name Kind Maker / built on Ships in / latest (Sept 2026)
V8 86,723 Engine Google Chrome 154 1 (V8 15.4), Edge, Node.js, Deno 60,577
SpiderMonkey 946,470 Engine Mozilla Firefox 156 555
JavaScriptCore Engine Apple Safari 10 , all WebKit 15,343 browsers, Bun 73,307
Node.js Runtime V8, libuv 24.21 LTS (V8 13.6), 26.8 Current (V8 14.6)
Deno Runtime V8, Rust, Tokio 2.9.6 (V8 15.0)
Bun Runtime JavaScriptCore, Rust 1.4.2

The engine version decides which language features you get: Node.js 24 LTS runs a V8 from 2025, so a new ES2026 method may work in Chrome but not on your server. Node.js (2009) is the compatibility baseline that npm 2,036 packages target. Deno, also by Node.js creator Ryan Dahl, runs TypeScript directly and denies file, network and environment access until you grant it with flags such as --allow-read. Bun puts a runtime designed as a drop-in replacement for Node.js, a package manager, a test runner and a bundler in one executable. Each runtime exposes its own global, so a script can tell where it runs:

Detecting the runtime (runtime.js)JavaScript
const runtime =
  typeof Deno !== 'undefined' ? `Deno ${Deno.version.deno}` :
  typeof Bun !== 'undefined' ? `Bun ${Bun.version}` :
  typeof process !== 'undefined' ? `Node.js ${process.versions.node}` :
  'a browser';
console.log(`Running on ${runtime}`);
console.log(typeof window, typeof globalThis.setTimeout);
Output
Running on Node.js 25.8.0
undefined function

Run it with node runtime.js, deno run runtime.js or bun runtime.js. window exists only in browsers; globalThis (ES2020) names the global object everywhere, and web APIs such as setTimeout(), fetch() and URL exist in all three runtimes.