Skip to content
New: mise run, the theme song and music video

mise-en-place

Development tools, environments, and tasks

mise is pronounced “meez”

Define your tool versions, environment variables, and project commands in mise.toml. mise installs the tools and makes the configuration available in your shell, editor, and CI.

curl https://mise.run | sh

macOS & Linux Installing on Windows?

mise.tomlExample configuration

# Tool versions for this project

[tools]
node = "24"
python = "3.13"
terraform = "1.13"

Illustrative output ~/my-project

$ mise install
✓ node, python, terraform installed
Tool versions ready for this project.
Explore tools
Project configuration in mise.toml
  • Open source & MIT licensed
  • macOS, Linux & Windows
  • Single CLI

Showreel

  1. mise, at 0:00: One mise.toml per project: tools, env vars, and tasks. With mise activate, cd in, and its tools and env vars load. mise run ci runs the tasks in that environment.
  2. Dev tools, at 0:42: No jq? mise use jq installs it and adds it to mise.toml. 1,000+ tools by short name, from node to terraform. npm: installs npm CLIs per project, even without a package.json. Other backends install from PyPI, crates.io, GitHub, and Go.
  3. Versions, at 1:50: cd switches node to the version each project's mise.toml sets. hk's signed packslip releases carry completions and agent skills. Upgrade hk, and Tab completes the new version's flags. mise skills sync links that version's skills for your agent.
  4. Environments, at 2:50: Leave, and mise restores the environment. .env files load too, with _.file. Mark a .env file redact = true: task output shows [redacted].
  5. Tasks, at 3:30: ci depends on lint, test, build. They can run in parallel. Each output line is labeled with its task. With sources and outputs, up-to-date work is skipped. Scripts in mise-tasks/ are tasks. #USAGE adds args and --help. Bad input stops the task before it runs. Tasks can declare the daemons they need, like postgres. mise run db starts Postgres and waits until it's ready.
  6. Dotfiles, at 4:48: mise dot track keeps a history. A watcher saves each edit. mise dot rollback restores an earlier version.
  7. Everywhere, at 5:28: mise.toml asks for 24. mise.lock records 24.21.0. Commit both. CI and other machines can use the same versions.
  8. A new machine, at 5:52: mise bootstrap --adopt restores your dotfiles and mise config. Then it starts the watcher and installs your global tools. On a fresh clone, mise run ci installs what mise.lock pins. Then its tasks run with the project's env vars.
  9. Install mise, at 6:54.
A 7:16 tour of mise, from a first mise use to setting up a new machine. Every terminal line was recorded in a real shell with a released mise, and the captions are on screen, so it works with the sound off. Get started

Switch between project environments

Activate mise in your shell once. From then on, entering a project puts its installed tool versions on your PATH and loads its environment variables. Leave the project and mise restores the environment for your new directory.

  • Shell hooks for bash, zsh, fish, nushell, PowerShell, and more
  • Shims for editors and scripts that never source your shell rc
  • mise exec and mise-action for Docker and CI
Active shell~/work/api
Node
22
APP_ENV
api
Choose a project to see its environment. Shell activation and installed tool versions are required.
Declare your setupmise.toml[bootstrap.packages]
[bootstrap.repos]
[dotfiles]
[bootstrap.services]
mise bootstrap
Packagesbrew · apt · scoop · winget
RepositoriesProject checkouts
DotfilesLink · copy · template
ServicesBackground processes
mise bootstrap plan previews declarative resource changes before you apply them.

Set up a machine with mise bootstrap

Declare the packages, repositories, dotfiles, and services your machine needs, then apply them with mise bootstrap. Preview declarative resource changes with mise bootstrap plan. Add shell activation and platform-specific settings to keep machine setup alongside your tools.

  • Packages through brew, apt, dnf, pacman, apk, mas, scoop, and winget
  • Dotfiles as symlinks, copies, or templates, plus single-line edits
  • Remote hosts over SSH with mise bootstrap remote
mise bootstrap --from git@github.com:you/dotfiles.git

Read the bootstrap guide

— Related project

Share Cargo builds with Mr Boxington

Give every Cargo checkout one shared, self-pruning compilation cache, locally and in CI.

mr-boxington.jdx.dev

Run your first project task

  1. Step 1

    Install mise

    On macOS or Linux, use the installer below. See Windows and package manager instructions for other options.

    $ curl https://mise.run | sh
    $ ~/.local/bin/mise --version
  2. Step 2

    Activate your shell

    For zsh, add this line and restart your shell. Follow the activation guide for other shells. You can also skip activation and use ~/.local/bin/mise exec or ~/.local/bin/mise run.

    $ echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
    # Restart your shell before continuing.
  3. Step 3

    Add tools

    From your project directory, mise use installs a tool and saves its version request in mise.toml.

    $ mkdir mise-example
    $ cd mise-example
    $ mise use node@24
  4. Step 4

    Add env vars and tasks

    Save a task alongside its environment, then run it. Commit mise.toml to share the setup. See the complete example to print both the tool version and environment.

    $ mise set NODE_ENV=development
    $ mise tasks add hello -- node -p process.env.NODE_ENV
    $ mise run hello
    development

— Ready when you are

Allez. Prep your station.

curl https://mise.run | sh
MIT LicenseCopyright © 2026jdx.dev