Mise en Place
Feature Overview
Section titled “Feature Overview”Mise en Place is a tool that helps you manage your project’s dependencies, environment variables, and tasks in a consistent manner. It allows you to define these aspects in a single configuration file, making it easier to set up and maintain your development environment.
Easily define and manage your project’s dependencies across different package managers.
mise honors the use of its own configuration file and also .tools-version files for compatibility with asdf, and any individual tool’s version file (e.g., .python-version, .node-version, etc.).
Centralize the management of environment variables for your project.
Automatically load environment variables from files like .env and manage virtual environments for languages like Python. It is also possible to have localized environment variable files for different environments (e.g., .env.development, .env.production) or specific to folders.
In conjunction with tools like fnox, mise can also securely manage secrets and sensitive information.
Define and run common tasks to streamline your development workflow.
Create reusable tasks that can be executed with a single command, improving productivity and consistency across your team. The tasks can be defined in the same configuration file as your packages and environment variables and run a single command line or a file with a full script, in any language.
Tasks can also depend on other tasks, allowing you to create complex workflows easily.
Installation
Section titled “Installation”I’m only covering installation methods for Linux, macOS, and Homebrew here. For other installation methods, please refer to the official documentation.
curl https://mise.run | shBy default, mise will be installed to ~/.local/bin (this is simply a suggestion. mise can be installed
anywhere). You can verify the installation by running:
~/.local/bin/mise --version# _ __# ____ ___ (_)_______ ___ ____ ____ / /___ _________# / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \# / / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/# /_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/# /_/ by @jdx# 2026.2.1 macos-arm64 (2026-02-02)~/.local/bin does not need to be in PATH. mise will automatically add its own directory to PATH when
activated.
mise respects MISE_DATA_DIR and XDG_DATA_HOME if you’d like to change these locations.
brew install miseAfter installation, we need to activate mise in our shell. You can do this by adding the following line to your shell configuration file (e.g., .bashrc, .zshrc, etc.):
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrcecho 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrcConfiguration
Section titled “Configuration”There are at least two places where you can define your mise configuration:
- For Global settings:
~/.config/mise/config.toml - For project-specific settings:
mise.toml
mise.toml is the config file for mise. They can be at any of the following file paths (in order of precedence, top overrides configuration of lower paths):
mise.local.toml - used for local config, this should not be committed to source control
mise.toml mise/config.toml .mise/config.toml .config/mise.toml- use this in order to group config files into a common directory.config/mise/config.toml .config/mise/conf.d/*.toml` - all files in this directory will be loaded in alphabetical order
Notes:
- Paths which start with mise can be dotfiles, e.g.: .mise.toml or .mise/config.toml.
Here is an example of a mise.toml file that defines packages, environment variables, and tasks:
[settings]python.uv_venv_auto = true
[tools]d2 = "latest"fnox = "latest""pipx:harlequin" = "latest"pre-commit = "latest"python = "3.14.0"sops = "latest"sqlite = "latest"terraform = "1.14.3"terragrunt = "0.97.2"
[env]_.source = '.env_vars'_.python.venv = { path = "venv", create = true }PROXMOX_VE_API_TOKEN = "$(fnox get PM_USER)=$(fnox get PM_PASS)"
[tasks."ansible:pkg_upgrade"]description = "Upgrade all packages with logging records"alias = "apkgup"dir = "ansible"env = { ANSIBLE_CALLBACKS_ENABLED = "package_update_logger" }usage = '''flag "-l --limit <limit>" help="Limit the hosts to run the playbook on" default="all"'''run = "echo ${PWD}; ansible-playbook playbooks/packages_upgrade_with_logging.yml --limit ${usage_limit?}"Using Mise
Section titled “Using Mise”You don’t need a mise.toml file to use mise. Once mise is installed and activated in your shell, you can start using it right away.
Managing Packages
Section titled “Managing Packages”Adding Packages
Section titled “Adding Packages”To add a package to your project, you can use the mise add command followed by the package name and version. For example, to add Python 3.14.0, Terraform 1.14.3 and the latest SOPS, you would run:
mise add python@3.14.0mise add terraform@1.14.3mise add sops@latestYou can also specify packages from different package managers by prefixing the package name with the manager name. For example, to add the harlequin package using pipx, you would run:
mise add pipx:harlequin@latestTo install the packages defined in your mise.toml file, simply run:
mise installThis command will read the tools section of your configuration file, or the other tools files, and install the specified packages using the appropriate package managers.
Listing and Upgrading Packages
Section titled “Listing and Upgrading Packages”To list the installed packages, you can use:
mise listTo upgrade all installed packages to their latest versions, run:
mise upgradeManaging Environment Variables
Section titled “Managing Environment Variables”You can define environment variables in the env section of your mise.toml file. For example:
[env]DATABASE_URL = "postgres://user:password@localhost:5432/mydb"API_KEY = "your_api_key_here"Mise will automatically load these environment variables when you activate mise in your shell and enter the folder where mise.toml is, or any other below in the tree.
You can also add environment variables using the mise env add command:
mise env add DATABASE_URL "postgres://user:password@localhost:5432/mydb"mise env add API_KEY "your_api_key_here"To list the environment variables currently set by mise, use:
mise env listManaging Tasks
Section titled “Managing Tasks”You can define tasks in the tasks section of your mise.toml file. For example:
[tasks.tfplan]description = "Run Terraform plan"command = "terraform plan"
[tasks.tgplan]description = "Run Terragrunt plan"command = "terragrunt plan"You can also add tasks using the mise task add command:
mise task add tfplan "Run Terraform plan" "terraform plan"mise task add tgplan "Run Terragrunt plan" "terragrunt plan"File Tasks
Section titled “File Tasks”In addition to defining tasks through the configuration, they can also be defined as standalone script files in one of the following directories:
mise-tasks/:task_name.mise-tasks/:task_namemise/tasks/:task_name.mise/tasks/:task_name.config/mise/tasks/:task_name
Note that you can configure directories using the task_config section.
#!/usr/bin/env bash#MISE description="Run Terraform plan"terraform planListing and Running Tasks
Section titled “Listing and Running Tasks”To list the defined tasks, you can use:
mise tasks ls# Name Description# tfplan Run Terraform planTo run a task, use the mise task run command followed by the task name. For example, to run the tfplan task, you would execute:
mise run tfplan