docs/shell-aliases.md
mise can manage shell aliases that are set dynamically when you enter a directory and unset when you leave, similar to how environment variables work.
Shell aliases are defined in mise.toml under the [shell_alias] section:
[shell_alias]
ll = "ls -la"
la = "ls -A"
gs = "git status"
gc = "git commit"
When you enter a directory with this configuration, these aliases will be automatically set in your shell. When you leave the directory (and the new directory doesn't have the same aliases), they will be unset.
Shell aliases are currently supported in:
alias/unalias commandsalias/unalias commandsalias/functions -e commandsOther shells (nushell, elvish, xonsh, powershell) do not currently support shell aliases.
Shell aliases work similarly to environment variables managed by mise:
cd into a directory with [shell_alias] config, the aliases are set$ cd ~/myproject
# mise sets: alias ll='ls -la'
$ ll
# Runs: ls -la
$ cd ~
# mise runs: unalias ll
Like other mise config, shell aliases from parent directories are available in child directories. A child directory can override a parent's alias:
# ~/projects/mise.toml
[shell_alias]
build = "make build"
# ~/projects/myapp/mise.toml
[shell_alias]
build = "npm run build" # Overrides parent
Alias values support templates, allowing dynamic values:
[shell_alias]
proj = "cd {{config_root}}"
node_version = "echo {{exec(command='node --version')}}"
Define shortcuts that only make sense within a specific project:
[shell_alias]
dev = "npm run dev"
test = "npm test"
build = "npm run build"
deploy = "./scripts/deploy.sh"
Create aliases that wrap tools with project-specific defaults:
[shell_alias]
docker-compose = "docker compose -f docker-compose.dev.yml"
terraform = "terraform -chdir=./infrastructure"
[shell_alias]
src = "cd {{config_root}}/src"
tests = "cd {{config_root}}/tests"
docs = "cd {{config_root}}/docs"
mise activate is running. They are not available inside TOML task run blocks or file tasks, since tasks run in non-interactive subshells. Use the underlying command directly in tasks, or add wrapper scripts to your PATH via env._.path.mise has two different alias features that serve different purposes:
| Feature | Purpose | Config Key |
|---|---|---|
| Shell Aliases | Define shell command shortcuts (alias ll='ls -la') | [shell_alias] |
| Tool Aliases | Define version aliases for tools (node@lts → 20.x) | [tool_alias] |
See Tool Aliases for documentation on aliasing tool versions.