# Mise Configuration
Personal [mise](https://mise.jdx.dev/) setup — a polyglot runtime version manager (successor to `asdf`, faster, written in Rust). Manages Go, Node, Rust, Python versions per-directory, plus tasks and environment variables.
Config file (Arch): `~/.config/mise/config.toml`
> [!warning] Raw notes
> These are living, personal config notes — raw, frequently out-of-date, and sometimes half-baked. They reflect my setup at some point in time, not a maintained tutorial. Verify against upstream docs before copying. Reach out if something looks broken.
> [!info] What is mise?
> `mise` (formerly `rtx`) is a runtime version manager that replaces `asdf`, `nvm`, `pyenv`, `rbenv`, and similar tools with a single binary. It reads `.mise.toml` (or `.tool-versions`) files to pin tool versions per-directory and activates them automatically when you `cd` into a project. Global config lives at `~/.config/mise/config.toml`.
## Key Settings
| Setting | Value | Why |
|---------|-------|-----|
| Go | `latest` | Always on current stable release |
| Node | `25.8.0` | Pinned — avoids surprise major bumps |
| Rust | `latest` | Stable channel, latest |
| Python | `latest` | General scripting |
| `auto_install` | `true` | Installs missing tools automatically on `cd` |
## Config File (Arch Linux)
The global config at `~/.config/mise/config.toml`:
```toml
[tools]
go = "latest"
node = "25.8.0"
rust = "latest"
python = "latest"
[settings]
auto_install = true
```
### Why these versions?
- **Go `latest`**: Go has a strong compatibility guarantee and a predictable release cadence. Staying on latest means getting performance improvements and new stdlib features without breakage risk.
- **Node `25.8.0` (pinned)**: Node major versions can ship breaking changes in tooling (npm, corepack). Pinning avoids surprise upgrades mid-project; update deliberately.
- **Rust `latest`**: The stable channel is conservative — `latest` here means current stable, not nightly.
- **`auto_install = true`**: When you `cd` into a directory with a `.mise.toml` that pins a version you don't have, mise installs it automatically. No manual `mise install` needed.
> [!tip] Per-project overrides
> Create a `.mise.toml` at the project root to pin a different version for that project only:
> ```toml
> [tools]
> go = "1.22.4"
> node = "20.11.0"
> ```
> mise activates the nearest `.mise.toml` walking up the directory tree.
## Common Commands
| Command | Description |
|---------|-------------|
| `mise list` | Show all installed tool versions |
| `mise current` | Show active versions in current directory |
| `mise install` | Install all tools defined in current `.mise.toml` |
| `mise use
[email protected]` | Pin a version in the current directory's config |
| `mise use -g go@latest` | Update global config |
| `mise upgrade` | Upgrade all `latest`-pinned tools |
| `mise exec -- <cmd>` | Run a command with mise tools in PATH |
| `mise env` | Print shell exports for current tools |
| `mise tasks` | List available tasks (if configured) |
## Shell Integration
mise hooks into the shell via `eval "$(mise activate zsh)"` in `.zshrc`. This:
- Prepends mise shims to `$PATH`
- Activates the correct tool version on every `cd`
- Makes `mise exec` transparent — `go`, `node`, `python` etc. resolve to the right version automatically
> [!note] macOS setup
> On macOS, mise is installed via Homebrew (`brew install mise`). The Arch config above (`platform/arch`) is the canonical source; macOS may use a separate profile or rely on Homebrew's own tool management for some tools. Check `mise current` to see what's active.
## Notes
The global config lives only in the Arch Linux dotfiles profile (`configuration/platform/arch/`). No macOS-specific mise config exists in the dotfiles — macOS may rely on Homebrew or a separate local config not tracked here.
## Links
- [mise docs](https://mise.jdx.dev/)
- [mise GitHub](https://github.com/jdx/mise)
- [.mise.toml reference](https://mise.jdx.dev/configuration.html)
- [mise tasks](https://mise.jdx.dev/tasks/)