Azure Pipelines "is dependent on a Node version (10) that is end-of-life": Node.js 6, 10 and 16 leave the agent on November 24, 2026
Azure Pipelines tasks written in JavaScript run on a Node.js runner that ships with the agent, and each task's task.json says which ones it can use. Microsoft's Node.js runners page says that Node.js 6, 10 and 16 will be removed from the agent on November 24, 2026, and that tasks that require them may fail to run after that. Until then, the agent runs those tasks and only warns. On October 25 and 26, 2026, issues asking for Node.js 24 handlers were opened on many Marketplace extensions at once, among them azure-pipelines-terraform #384 and jfrog-azure-devops-extension #675.
To see which pull requests' builds fail on November 24: Azure DevOps Pull Requests, a plugin for JetBrains IDEs, shows a failing build policy as failed next to its pull request in your IDE. Get it on JetBrains Marketplace
What it looks like
A task that declares an end-of-life runner gives warnings like these from the agent (the agent's own strings, with the task's name and version in place of the placeholders):
Task '<name>' version <n> (<name>@<n>) is dependent on a Node version (10) that is end-of-life. Contact the extension owner for an updated version of the task. Task maintainers should review Node upgrade guidance: https://aka.ms/node-runner-guidance
Task ... relies on an unsupported version of Node.js. Unsupported Node versions (6, 10, and 16) are being retired, and any pipelines using tasks dependent on these versions will begin to fail.
The pipeline still passes, so the warning is easy to miss in a run with many steps. The runner a task declares is in the execution section of its task.json: Node is Node.js 6, then Node10, Node16, Node20_1 and Node24. A task that lists Node20_1 or Node24 next to an old one is not affected, because the agent picks the highest handler it has.
Find the affected pipelines before November 24
Microsoft added an organization setting to try the removal in advance:
- Open Organization settings → Pipelines → Settings.
- Under Task restrictions, turn on Restrict out of support Node.js versions in pipeline tasks.
- Run your pipelines and read the warnings.
With the setting on, a task that declares Node.js 6, 10 or 16 does not get that runner: the agent runs it with Node.js 24, or Node.js 20 if 24 is not available, and logs that the task "may fail or work unexpectedly". If no newer runner is available, the task fails. It applies to Microsoft-hosted and self-hosted agents and to tasks in container jobs; a self-hosted agent needs version 4.278.0 or later. You can turn the setting off again while you fix a task, but only until November 24. The setting does not exist in Azure DevOps Server.
A task that runs a script with Node.js, such as script: node build.js, is not affected: the removal is about the runner a task declares, not about Node.js in your build.
What to do with each kind of task
- A built-in task (
NuGetCommand@2,AzureCLI@2and the like): move to its latest major version, as Microsoft's FAQ says. - A Marketplace task: look for a newer version of the extension, or ask its publisher. If the extension has not been updated in years, replace it with a built-in task or a script step that does the same thing.
- Your own task: add a
Node24handler totask.json, update its dependencies and test it, following Microsoft's Node.js 24 migration guide. The guide also says to setminimumAgentVersionto 4.265.1, the first agent with the Node24 handler, if the task lists only Node24.
If a task cannot be updated in time
Microsoft lists ways to keep an old runner, mainly for self-hosted agents: install the runner on the agent yourself, add a NodeTaskRunnerInstaller@0 step to the pipelines that need it, or install the vsts-agent package, which still includes Node.js 6 and 10 (the pipelines-agent package does not, and neither includes Node.js 16). Microsoft's page warns that keeping an end-of-life runtime has security and compatibility risks, so these are for buying time only.
Telling it apart
- "A supported task execution handler was not found. The task does not carry an implementation that is compatible with your current operating system": the task has no handler for this operating system at all, typically a Windows-only PowerShell task on a Linux agent. That is not about Node.js versions.
- Other changes that broke pipelines without a change to them: from agent 5.279.0, container jobs no longer get the host Docker socket, and on the Ubuntu 26.04 image paths under /home/vsts fail.
Build validation in IntelliJ IDEA and Rider
Azure DevOps Pull Requests, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists your pull requests in an IDE tool window with their branch policies in plain words, so a build policy that starts failing on November 24 shows up as failed next to the pull request. With Pro, a build that failed or expired has a Run again link that queues it again. The review inbox and the branch policies are free; voting, commenting, completing, running a build policy again and creating pull requests are Pro (US$1 a month, with a 30-day trial).
Get it on JetBrains Marketplace
Azure DevOps and Azure Pipelines are trademarks of Microsoft Corporation; Node.js is a trademark of the OpenJS Foundation; IntelliJ IDEA and Rider are trademarks of JetBrains s.r.o. This page is not affiliated with or endorsed by Microsoft, the OpenJS Foundation or JetBrains.
More: "Cannot connect to the Docker daemon" in container jobs since agent 5.279.0 · build validation: expired builds and why a pull request build did not run · 日本語