A focused release that adds a default shorthand for env vars, brings .7z archive support to Unix, and cleans up several long-standing PATH and shim edge cases on Linux, macOS, Windows, and WSL.
Added
-
env: New
{ default = "fallback" }shorthand for[env](and config/task[vars]). The default applies only when the variable is unset or empty; existing non-empty values from the process env or earlier config are preserved. Mixingdefaultwithvalue,required, oragenow fails with a clear message (#10441 by @jdx).[env] EDITOR = { default = "vim" } # only used if $EDITOR is unset/empty PORT = { default = "3000" }
-
backend:
.7zarchives now extract on Unix as well as Windows, andstrip_componentsprobing works cross-platform. Migrated from the unmaintainedsevenz-rusttosevenz-rust2, and tightened extraction to reject directory traversal and absolute paths (#10434 by @risu729).
Fixed
- env: When
env_shell_expandis enabled,${VAR:-default}now follows POSIX semantics: empty strings are treated as missing (fallback applies),${VAR-default}only substitutes when the variable is unset, and fallback text is recursively expanded (e.g.${NONEXISTENT:-$OTHER}). Braced parsing is also stricter — unterminated${…stays literal and}inside$(…)no longer closes the brace (#10445 by @jdx, fixes #10444). - env:
mise x/run/envnow strip mise-managed install directories from the inherited PATH when composing the child environment. Stale entries carried in from a frozen env snapshot (IDE terminals, CI wrappers, AI-agent harnesses) no longer sit ahead of the freshly injected bin dir, so subshells,#!/usr/bin/envshebangs, and package-manager workers all resolve the requested tool version (#10422 by @JamBalaya56562, addresses #10345). - vfox: Plugin install hooks that shell out via Lua
os.executenow run under the same sanitizedmise_envascmd.exec. Combined with new resolution oftools = trueenv values during install, this fixes setups like gcloud depending on python where a singlemise installpreviously leftCLOUDSDK_PYTHONpointing at a nonexistent path (#10432 by @JamBalaya56562, fixes #10282). - shims: Windows extensionless bash shims now detect WSL (
WSL_DISTRO_NAME/WSL_INTEROP/WSLInterop), drop their own dir from PATH, andexecthe tool directly. This breaks the infinitemise xloop that happened when the Windows shims dir was exposed at/mnt/c/...inside WSL, and gives a clean<tool>: not foundwhen no Linux tool is installed.file-mode shims are now also flagged version-stale so a normal reshim regenerates them on upgrade (#10421 by @JamBalaya56562, addresses #10299). - file:
make_symlinkon Unix now creates the link at a unique temp name in the destination dir and atomicallyrename(2)s it into place. This eliminates the noisyfailed to ln -sf … File exists (os error 17)warnings that surfaced when several mise processes (shellhook-env, direnv, editor integrations) raced on the same tracked-config link, e.g. when spawning a new git worktree (#10414 by @JamBalaya56562, fixes #10292). - task: On Windows, script-task lookup now prefers Windows-native variants (e.g.
.ps1) over their extensionless siblings, and extensionless takeover only applies when the match is unambiguous and stays within the same config family (#10443 by @jdx).
Changed
- deps: Replaced the unmaintained
number_prefix(RUSTSEC-2025-0119) and stalehumansizecrates withbytesize. Size strings in generatedtool-stubcomments andmise cache pruneoutput now use nativebytesizeIEC formatting — e.g.821.69 KiBbecomes821.7 KiBand2.15 MiBbecomes2.2 MiB(#10438 by @risu729).
Full Changelog: v2026.6.9...v2026.6.10
💚 Sponsor mise
mise is built by @jdx under en.dev — an independent studio making developer tooling (mise, aube, and more). Development is funded by sponsors.
If mise saves you or your team time, please consider sponsoring at en.dev. Individual and company sponsorships keep mise fast, free, and independent.