Which Version of Node.js Does VS Code Use to Run Extensions?


The version of your language runtime matters. We've previously run into bugs with function signatures changing in patch versions of Node and character encoding breaking in minor versions of Node
When we built our language server and VS Code extension we wanted to determine the version of Node.js that VS Code uses to run extensions.
Looking at the VS Code Source
VS Code sets the version of Node in an .nvmrc file in their repository.
https://github.com/microsoft/vscode/blob/main/.nvmrc
The version is specified in a few other places in the repository, but it appears that they're all kept in sync.
We made sure we tested our VS Code extension against the exact same version.
We considered whether to test against older versions as well, but decided to only test against the version used by the latest release.
Following VS Code Updates
Of course, we also want to make sure we continue to follow the version when it changes. We decided to track it by using the cron feature of RWX.
We configured our cron failures to post into a Slack channel, so if the version ever changes, we'll see the failed run and can bump the version.
In the RWX run definition we:
- Look up the latest tag of VS Code
- Fetch the
.nvmrcfile from that tag - Clone our language server repository
- Use the
rwx/tool-versionspackage to look up the node version - Compare the VS Code version of Node with the version we're using
1on:2cron:3- key: check-node-version4schedule: "0 7 * * 1 America/New_York"5init:6ref: ${{ event.git.sha }}78base:9os: ubuntu 24.0410tag: 1.11112tasks:13- key: get-latest-vscode14cache: false15run: |16LATEST_TAG=$(curl -s https://api.github.com/repos/microsoft/vscode/releases/latest | jq -r .tag_name)17echo "Latest tag is $LATEST_TAG"18echo "$LATEST_TAG" > $RWX_VALUES/latest-tag1920- key: get-latest-version21run: |22NVMRC_URL="https://raw.githubusercontent.com/microsoft/vscode/${LATEST_VSCODE_TAG}/.nvmrc"23NODE_VERSION=$(curl -s "$NVMRC_URL")2425echo "Latest VS Code release: $LATEST_VSCODE_TAG"26echo "Node.js version from .nvmrc: $NODE_VERSION"27echo "$NODE_VERSION" > $RWX_VALUES/node-version28env:29LATEST_VSCODE_TAG: ${{ tasks.get-latest-vscode.values.latest-tag }}3031- key: code32call: git/clone 2.0.033with:34repository: https://github.com/rwx-cloud/language-server.git35github-token: ${{ github.token }}36ref: ${{ init.ref }}3738- key: tool-versions39use: [code]40call: rwx/tool-versions 1.0.44142- key: compare-version43run: |44echo "VS Code Node version: $VSCODE_NODE_VERSION"45echo "Project Node version: $PROJECT_NODE_VERSION"46test "$VSCODE_NODE_VERSION" = "$PROJECT_NODE_VERSION"47env:48VSCODE_NODE_VERSION: ${{ tasks.get-latest-version.values.node-version }}49PROJECT_NODE_VERSION: ${{ tasks.tool-versions.values.nodejs }}
Run Results
Never miss an update.
Get the latest releases and news about RWX and our ecosystem with our newsletter.
Related posts

May 18, 2026
RWX now supports Codeberg and Forgejo
RWX now supports Codeberg and self-hosted Forgejo repositories, giving teams a reliable CI/CD path outside GitHub.

May 13, 2026
Why the TanStack supply chain attack can't happen on RWX
The TanStack npm compromise hinged on GitHub Actions cache poisoning. RWX's content-based caching and branch-locked vaults make that attack structurally impossible.