If you're not using mise
as your version manager, you really should consider it.
It's become my primary way of installing things, only falling back to Homebrew when absolutely necessary.
Combined with chezmoi
this keeps my tooling in sync across every environment I work in.
By default, it links binaries directly in the shell path instead of using shims, but also generates shims if you want to use them - they're kept in ~/.local/share/mise/shims/
.
If you don't want to use the mise
shell integration directly for some reason, it works with direnv
. Here's a sample .envrc
:
use mise
That's literally it.
It can manage the following as core plugins:
node
- Node.jspython
- Pythonruby
- Rubygo
- Gorust
- Rustjava
- Javabun
- Bundeno
- Denoelixir
- Elixirerlang
- Erlangswift
- Swiftzig
- Zig
Other languages are available through other backends. This is not an exhaustive list, just to give you a taste:
clojure
- viaasdf
crystal
- viaasdf
andvfox
dart
- viaasdf
andvfox
elm
- viaubi
andasdf
groovy
- viaasdf
andvfox
haskell
- viaasdf
julia
- viaasdf
kotlin
- viaasdf
andvfox
lua
- viaasdf
nim
- viaasdf
ocaml
- viaasdf
perl
- viaaqua
andasdf
php
- viaasdf
andvfox
purescript
- viaubi
andasdf
r
- viaasdf
scala
- viaasdf
andvfox
solidity
- viaubi
andasdf
It also uses backends to support installation of tools - not just languages - from all kind of sources:
aqua
- Deterministic package manager withcosign
/slsa
validationasdf
- Use anyasdf
plugin withmise
cargo
- Rust tools, will usecargo-binstall
if you have it (you can usemise
to install it, of course)dotnet
- .NET toolsgem
- Ruby toolsgo
- Compile and fetch Go toolsnpm
- Node.js tools, supports usingbun
insteadpipx
- Self contained Python packages, supports usinguvx
insteadspm
- Swift Package Managerubi
- Fetch binaries from GitHub releasesvfox
- Windows-compatible plugin system
It is also a task runner:
mise [task]
- Run the task named[task]
mise run [task]
- Run the task named[task]
- useful if your task name clashes with amise
subcommand
It can integrate itself with stuff nicely:
mise generate bootstrap
- Generate a script to download and execute misemise generate config
- Generate amise.toml
file for your projectmise generate devcontainer
- Generate a devcontainer configuration to execute misemise generate git-pre-commit
- Generate a git pre-commit hook for your projectmise generate github-action
- Generate a GitHub Action workflow filemise generate task-docs
- Generate documentation for tasks in a projectmise generate task-stubs
- Generate shims to run mise tasks
Finally, a pretty cool feature - import your tools from other version managers. You can even continue to use them:
mise sync node
- Symlinks all Node.js tool versions from external tools (like nvm) into misemise sync python
- Symlinks all Python tool versions from external tools (like pyenv) into misemise sync ruby
- Symlinks all Ruby tool versions from external tools (like rbenv) into mise