Quick start
From a fresh install to a Node 18 project running a Node 22 tool — the core jrt workflow in six steps.
1. Bootstrap the backend
jrt installs runtimes through its own managed copy of mise. This downloads and checksum-verifies it into JRT_HOME. It is needed once per machine.
jrt backend bootstrap2. Install runtimes
Install as many versions as you like; they live side by side and never replace each other.
jrt runtime install node@18
jrt runtime install node@22
jrt runtime list nodeThe same works for python, go, rust, dotnet, java, bun, deno and ruby.
3. Pin a project
jrt pin writes a .jrt.toml at the project root. Commit it — everyone on the team gets the same runtime. jrt exec -- runs any command with the pinned runtime.
cd my-legacy-app
jrt pin node@18 # writes .jrt.toml
jrt current # shows the pins in effect here
jrt exec -- node -v # v18.x
jrt exec -- npm install4. Add a machine tool on its own runtime
Here the project stays on Node 18, but Desktop Commander runs on Node 22. compat set records that Node 22 is known-good for this package, tool add locks latest to an exact version, and why explains the decision.
jrt compat set npm:@wonderwhy-er/desktop-commander --runtime node@22 --versions ">=0.2.0 <0.3.0"
jrt tool add desktop-commander npm:@wonderwhy-er/desktop-commander@latest
jrt why desktop-commander
jrt run desktop-commanderRunning jrt run desktop-commander from inside the Node 18 project still uses Node 22. The project pin is never touched.
5. One-off commands
Need a runtime just once, without pinning anything?
jrt x node@22 -- node -v # run once on a runtime, no pin6. (Optional) Type commands directly
Shims let you drop the jrt exec -- / jrt run prefix. They are opt-in and jrt never edits your PATH on its own.
jrt shim enable
jrt shim add node npm npx
jrt shim path # prints the PATH line for your shellNow node -v prints v18 inside the project, your system Node outside it, and desktop-commander works from anywhere. Details in Transparent shims.