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
.nvmrc
file from that tag - Clone our language server repository
- Use the
rwx/tool-versions
package 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 1.6.733with:34repository: https://github.com/rwx-cloud/language-server.git35github-access-token: ${{ github['rwx-cloud'].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
Related posts
Read more on updates and advice from the RWX engineering team

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.