tech, developers, and the code underneath

issue 083· news·

Node.js 24 goes LTS and the runtime wars settle into a truce

Long-term support for the batteries-included Node, plus a look at where Deno and Bun actually landed.

Node.js 24 entered long-term support this week. That makes it the version most teams will run for the next two years, and it is a good moment to take stock of the three-way runtime competition that has defined server-side JavaScript since 2022.

what you get in 24 LTS#

The accumulated result of the last two years of Node absorbing its own ecosystem:

  • A test runner (node --test) with coverage, mocking, and watch mode.
  • TypeScript type stripping, no build step.
  • A permission model for filesystem, network, and child process access.
  • .env file loading built in.
  • A SQLite module in the standard library.
  • fetch, WebSocket, URLPattern as globals.
  • using declarations for deterministic resource cleanup.
  • A watch mode that does not require nodemon.

Every one of those replaced a dependency. That is the whole story of Node's last three years, and it was the correct response to competitive pressure.

where the three landed#

Node won by absorbing. It has the ecosystem, the deployment targets, the enterprise support, and now most of the convenience. Its remaining weaknesses are startup time and the accumulated weight of API decisions from 2010 that cannot be changed.

Deno built the best security model and the most coherent standard library, then spent years walking back the decisions that made adoption hard — first adding npm compatibility, then node_modules, then package.json. It is excellent and it is a niche, and the trademark dispute over "JavaScript" was an unusual way to spend a year.

Bun won on speed and on the package manager. bun install is dramatically faster than npm and a very large number of teams use it for exactly that while running Node in production. That is a real and defensible position — being the best tool for one step of the workflow.

what actually changed for developers#

The competition worked. All three runtimes are much better than Node was in 2021, and Node specifically improved in ways it had resisted for a decade.

That is the argument for competition in developer tooling, and it is worth remembering when a dominant tool seems permanent.

practical guidance#

For a new production service: Node 24 LTS. The ecosystem compatibility and operational maturity dominate, and the convenience gap has closed.

For a CLI or a script: Bun, probably. Startup time and the single-binary story are genuinely better, and the compatibility risk is low for a program you control end to end.

For anything where sandboxing matters: Deno's permission model is the most mature, though Node's is now credible.

For your package manager: Bun or pnpm. npm is fine and it is slower, and the difference on a large install is minutes rather than seconds.

the migration note#

If you are on Node 20, plan the move to 24. Node 22 is a reasonable interim stop and there is no strong reason to linger there.

Things to check:

  • Base image compatibility. Node 24 raises minimum glibc and macOS versions.
  • Deprecated APIs that now throw rather than warning.
  • Native modules. Anything with a compiled component needs a rebuild and possibly an upgrade.

Run your full test suite on 24 in CI before you switch the default. The upgrade is usually uneventful and "usually" is doing work in that sentence.

Dom, October 28, 2025

get README in your inbox

One dispatch, no noise. Tech and developer news, plus the occasional long piece on the craft.

subscribe →