Back in January I wrote up setting up Rails 8 on macOS using rbenv, my faithful companion of many years. Then I rebuilt my dotfiles and switched to mise, and I haven’t touched rbenv since. So consider this the setup guide as I’d actually write it today: same destination, fewer moving parts.

The pitch in one line: rbenv manages Ruby, nvm manages Node, and mise manages everything, from one config file, with one syntax.

Prerequisites

Apple’s command line tools, and Homebrew for the system libraries Ruby builds against:

xcode-select --install
brew install libyaml

Install mise

curl https://mise.run | sh

Then activate it by adding this to the bottom of ~/.zshrc, and open a new terminal:

eval "$(~/.local/bin/mise activate zsh)"

Ruby

mise use --global [email protected]

which ruby   # a mise shim path, NOT /usr/bin/ruby
ruby -v

That one command installs Ruby and writes it into ~/.config/mise/config.toml as your global default. No rbenv rehash, no separate ruby-build to keep updated, and the config file can live in your dotfiles repo so every machine agrees.

If you’re coming from asdf, it’s the same idea with a plugin step: asdf plugin add ruby, asdf install ruby 4.0.6, asdf set --home ruby 4.0.6. mise even reads .tool-versions files, so existing asdf projects work untouched.

PostgreSQL

Postgres is the one thing I don’t put through mise, for the reasons in the upgrade post: it’s a service, not a per-project language. Homebrew owns it:

brew install postgresql@17
brew services start postgresql@17

Rails

gem install rails
rails -v

New executables just work through mise’s shims, immediately. And since Rails 8 needs no Node, Webpack or Yarn out of the box, this is genuinely the whole toolchain.

A new app

rails new myapp -d postgresql
cd myapp
rails db:create
bin/dev

localhost:3000, Rails welcome page, done.

The per-project trick

Here’s where mise pays rent that rbenv never did. Inside any project:

That writes a .mise.toml into the directory, and cd-ing in switches Ruby automatically. Old projects with a .ruby-version file keep working untouched, mise reads those too. When Ruby 4.1 lands at Christmas, upgrading is: edit the version in your config, mise install, commit. Done on every machine by the next git pull.

Which guide should you follow?

Honestly, either. The rbenv version still works perfectly and rbenv isn’t going anywhere. But if you’re setting up fresh in 2026, or you’re currently juggling rbenv and nvm and whatever manages your other languages, this is the simpler place to land: one tool, one config file, and a setup you can rebuild from your dotfiles with a single command. Ask me how I know.