The JavaScript runtime layer is where the language meets the operating system. In 2026, three runtimes matter: Node.js — the safe default with sixteen years of production track record; Bun — the modern challenger collapsing five tools into one binary; and Deno — the security-first alternative from Node's original creator. This sub-hub covers all three with shared decision frames and connections back into the rest of the tree.
Each leaf is a canonical decision-grade explainer for its runtime: hero, what-it-is, how-it-works, gotchas, decision guide, vs-the-others, connections, resources. Read both Node and Bun if you're picking a stack today — the comparison frame across the two is the actual decision.
The original server-side JavaScript runtime. V8 + libuv + npm origin. Sixteen years old, every package tested against it, the safe default for production. The runtime almost every cloud platform supports first-class.
The all-in-one alternative. Runtime + package manager + test runner + bundler in one binary. JavaScriptCore + Zig. Drop-in npm-compatible, ~10x faster install, native TypeScript, ~5ms cold start. Three years old, production-credible, aggressively shipping.
The third runtime. Built by Ryan Dahl (Node's original creator). Security-first defaults (no FS / network access without explicit permission). URL-based imports. Web-API-first standard library. Deno Deploy as the natively-paired edge platform. Different design philosophy from Bun; quiet but credible.
Whatever runtime you pick, four operating concerns shape how the choice plays out. Each leaf in this sub-tree treats them as load-bearing — the gotchas section of every runtime page maps to one or more of these.
For long-running servers, cold start is irrelevant. For CLI tools, edge functions, short-lived agents, and serverless: a 30ms vs 5ms gap on every invocation is the difference between snappy and sluggish. Pick the runtime whose cold-start profile fits the workload.
Most runtimes claim "Node-compatible" and mostly deliver. The 5% of packages that don't work is where you spend the debugging time. Older codebases with deep node-gyp dependencies should default to Node; greenfield projects can experiment more freely.
Native TS support (Bun, Deno) means no separate build step, no tsx/ts-node, no transpile-time vs runtime divergence. Native TS is a developer-loop win, not a production win — production usually compiles to JS anyway. But the loop-feel difference is real.
Bun's pitch — runtime + pm + test + build in one binary — isn't just speed. It's fewer tools to learn, configure, debug, and version-pin. For teams or solo devs, that's a real cognitive load reduction. For mature teams already invested in their npm/pnpm/jest/webpack/tsc setup, the migration cost can outweigh the consolidation benefit.
The runtime layer touches almost every other tech sub-tree. Cloudflare Workers (V8 isolates with Node compat), frameworks (Drizzle + others run on all three), Frappe (Node + npm in its build chain), agent skills that spawn short-lived processes (where Bun's startup speed becomes a real lever).