Runtime-aware CLI router
Your project keeps its runtime.
Your tools get theirs.
jrt separates project runtimes from machine-tool runtimes. Pin a legacy repo to Node 18 and still run a CLI that needs Node 22 — without switching versions, breaking lockfiles, or touching PATH by hand.

$ jrt pin node@18 pinned runtimes in ~/legacy-app/.jrt.toml $ jrt exec -- node -v v18.20.8 $ jrt compat set npm:@wonderwhy-er/desktop-commander --runtime node@22 $ jrt tool add dc npm:@wonderwhy-er/desktop-commander@latest registered dc -> npm:@wonderwhy-er/desktop-commander@0.2.50 runtime: node@22 (known-good compatibility override (local-user)) $ jrt run dc
The problem version managers don’t solve
nvm, pyenv and friends choose one active runtime per shell. That works until the project you are in is pinned to an old runtime and the tool you need was built for a new one. You end up switching versions back and forth, or installing tools globally against whichever runtime happened to be active.
jrt resolves two things independently: the project runtime from .jrt.toml, and each tool’s runtime from its own compatibility metadata. Both run side by side, isolated, on the same machine.
Built for real machines, not demos
Project pins
A .jrt.toml at the repo root pins node, python, go, rust, dotnet, java, bun, deno or ruby. Every command inside the project uses exactly that runtime.
Tools on their own runtime
Global CLIs run on the runtime they actually support, not whatever the current project happens to pin. A Node 18 repo can still use a Node 22 tool.
Locked, reproducible
“latest” is resolved once to an exact version and locked. The same alias runs the same package on the same runtime until you update it.
Transparent shims
Opt in and just type node or black. jrt routes to the project pin, the tool registry, or falls through to your system command.
Offline & crash-safe
JRT_OFFLINE=1 refuses the network but keeps installed tools working. Atomic writes, PID-aware locks and doctor --fix recover from interrupted runs.
Signed compatibility
Known-good runtime evidence ships as ed25519-signed bundles with rollback protection. Your local rules always win.
Nine ecosystems, one command
Install tools from any of these sources with jrt tool add <alias> <source>.
npm:pypi:go:cargo:nuget:maven:bun:deno:gem:Install in one line
The installer verifies the SHA-256 checksum before placing jrt in ~/.jrt/bin.
irm https://runtime.jervis.cloud/install.ps1 | iexReady to stop juggling versions?
Five minutes from install to your first isolated tool.