Most projects need a specific version of a few tools - a PHP version, a Node version, maybe more - and juggling separate version managers for each language is its own kind of tax. mise (formerly rtx) unifies it. It's a fast, single tool that manages runtime versions across languages, sets per-project environment variables, and even runs project tasks - replacing a pile of separate managers with one config file per project.
Pin Every Tool in One File
A single mise.toml declares the versions a project needs, and mise makes them active automatically when you enter the directory:
# mise.toml
[tools]
php = '8.4'
node = '24'
[env]
APP_ENV = 'local'
Enter the directory and the right PHP and Node are on your PATH; leave and they're not.
Versions, Env, and Tasks Together
Because mise also handles environment variables and a task runner, it covers a lot of what you'd otherwise split across a version manager, direnv, and a command runner - one tool, one config, consistent across the team.
Rough Edges and Limitations
- Broad scope. Doing versions, env, and tasks means more surface area than a single-purpose tool.
- Migration effort. Moving off existing managers takes a little setup.
- Trust the config. Like direnv, project config can run things - review before trusting.
For anyone tired of a different version manager per language, mise is the consolidation - reproducible tool versions and environments from one file.
Internal link suggestion: link "per-project environment variables" to the direnv post, whose job mise partly absorbs.