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

CI/CD
Jul 9, 2025
Dan Manges
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:

.rwx/cron-node-version.yml
1
on:
2
cron:
3
- key: check-node-version
4
schedule: "0 7 * * 1 America/New_York"
5
init:
6
ref: ${{ event.git.sha }}
7
8
base:
9
os: ubuntu 24.04
10
tag: 1.1
11
12
tasks:
13
- key: get-latest-vscode
14
cache: false
15
run: |
16
LATEST_TAG=$(curl -s https://api.github.com/repos/microsoft/vscode/releases/latest | jq -r .tag_name)
17
echo "Latest tag is $LATEST_TAG"
18
echo "$LATEST_TAG" > $RWX_VALUES/latest-tag
19
20
- key: get-latest-version
21
run: |
22
NVMRC_URL="https://raw.githubusercontent.com/microsoft/vscode/${LATEST_VSCODE_TAG}/.nvmrc"
23
NODE_VERSION=$(curl -s "$NVMRC_URL")
24
25
echo "Latest VS Code release: $LATEST_VSCODE_TAG"
26
echo "Node.js version from .nvmrc: $NODE_VERSION"
27
echo "$NODE_VERSION" > $RWX_VALUES/node-version
28
env:
29
LATEST_VSCODE_TAG: ${{ tasks.get-latest-vscode.values.latest-tag }}
30
31
- key: code
32
call: git/clone 1.6.7
33
with:
34
repository: https://github.com/rwx-cloud/language-server.git
35
github-access-token: ${{ github['rwx-cloud'].token }}
36
ref: ${{ init.ref }}
37
38
- key: tool-versions
39
use: [code]
40
call: rwx/tool-versions 1.0.4
41
42
- key: compare-version
43
run: |
44
echo "VS Code Node version: $VSCODE_NODE_VERSION"
45
echo "Project Node version: $PROJECT_NODE_VERSION"
46
test "$VSCODE_NODE_VERSION" = "$PROJECT_NODE_VERSION"
47
env:
48
VSCODE_NODE_VERSION: ${{ tasks.get-latest-version.values.node-version }}
49
PROJECT_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.

Share this post

Enjoyed this post? Pleas share it on your favorite social network!

Related posts

Read more on updates and advice from the RWX engineering team

See all posts
Fast File Tree Navigation, Powered by WebAssembly
CI/CD

Fast File Tree Navigation, Powered by WebAssembly

We shipped a web-based file tree navigator to see files from a task's output. To make browsing as fast as possible, we implemented it in WebAssembly.

Jul 11, 2025
Read now
Instantly Starting Batch Downloads
CI/CD

Instantly Starting Batch Downloads

We started to build an asynchronous user experience commonly used for batch downloads. RWX is a platform built on performance though, so we made it faster.

Jul 10, 2025
Read now
Node 22.7 Broke Character Encoding
CI/CD

Node 22.7 Broke Character Encoding

Node 22.7.0 introduced bugs with character encoding. As a best practice, pin to specific versions of runtimes in a .tool-versions file.

Jul 8, 2025
Read now