GitHub Actions ends Node 20 runner support and moves JavaScript actions to Node 24

GitHub Changelog image for the Node 20 runner-support change.GitHub Changelog
GitHub Changelog image for the Node 20 runner-support change.GitHub Changelog
Tools & Apps

GitHub Actions has completed its Node 20 runner removal: JavaScript actions now run on Node 24, so repositories with legacy runtime assumptions need a compatibility check.

GitHub Actions has completed the removal of Node 20 from its hosted runners. GitHub’s final notice says JavaScript actions now use Node 24, closing the temporary compatibility window for actions that still depended on the older runtime.

The change matters most for repositories with custom JavaScript actions, older third-party actions, or workflows that silently depended on the runner’s embedded Node version. A green workflow before the cutover is not proof that every action remains compatible after it.

What changed in GitHub Actions

GitHub’s changelog describes this as the final notification: hosted runners no longer make Node 20 available for JavaScript actions, and the runners use Node 24 instead. The earlier opt-out environment variable, ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION, is no longer a durable migration plan.

This is a runtime change inside the action execution path. It is separate from the Node version used by an explicit actions/setup-node step for application builds. A workflow can therefore use Node 20 for a project test while its JavaScript actions execute under the runner’s newer action runtime.

Which repositories need attention

Start with actions maintained in the repository and dependencies that pin old Node behavior. Check:

  • action.yml files for JavaScript actions and their runs.using value;
  • build and packaging dependencies that fail under Node 24;
  • native modules compiled during action setup;
  • third-party actions that have not published a recent runtime update; and
  • self-hosted runners, where the installed runtime and action behavior may differ from GitHub-hosted runners.

The risk is higher for actions that bundle old npm packages, rely on deprecated Node APIs, or compile native extensions during execution. The workflow file itself may look unchanged while the action’s runtime behavior changes underneath it.

A practical migration check

Run the affected workflows against a representative pull request, then inspect action logs rather than only the final job status. For custom actions, update the action metadata and dependencies, rebuild the distribution bundle, and test on the Node 24 line. Pinning actions/setup-node remains useful for the application’s own test matrix, but it does not restore Node 20 for the runner’s JavaScript actions.

Node.js 24 is an official current release line, but runtime compatibility still depends on the action’s dependency tree and native modules. Treat the move as a CI maintenance task: inventory first, test the action path, then update or replace components that fail.

Sources and scope

GitHub’s changelog is the primary source for the Actions rollout. The Node.js 24 release announcement provides independent runtime context; it does not replace repository-level testing. Teams with self-hosted runners should verify their own runner image and action execution path separately.

From reading to doing

Try the related loot

Run Low-Cost, Deterministic Computer Use with TypeSafe

Open loot