This release closes a security gap where .tool-versions files with Tera templates could execute arbitrary commands without a trust check, adds checksum verification for precompiled Python downloads, and ships over 15 bug fixes across tasks, lockfiles, the Rust plugin, bootstrap scripts, and more.
Highlights
- Security: trust check for
.tool-versionsTera templates --.tool-versionsfiles were processed through Tera'srender_str()with theexec()function available, allowing arbitrary command execution without any trust verification. A malicious.tool-versionsin a cloned repo could silently execute code when a user with mise shell activationcd'd into the directory. Template syntax in.tool-versionsnow requiresmise trustfirst; plain files continue to work without trust. - Python checksum verification for precompiled binaries -- Precompiled Python downloads from
astral-sh/python-build-standaloneare now verified against lockfile checksums at install time, matching the behavior of other core plugins. - Python freethreaded build exclusion -- Freethreaded Python builds (e.g. Python 3.14+) are now excluded from precompiled selection by default, fixing "missing lib directory" errors. Set
python.precompiled_flavorexplicitly if you want freethreaded builds. mise doctorPATH ordering check --mise doctornow warns when non-mise directories appear before mise-managed tool paths in PATH, helping diagnose tool shadowing issues.
Security
- Require trust check for
.tool-versionsTera templates -- When template syntax ({{,{%,{#) is detected in a.tool-versionsfile, mise now requiresmise trustbefore processing it. Plain.tool-versionsfiles without templates are unaffected. #8675 by @jdx
Added
mise doctordetects PATH ordering issues -- When mise is activated (not shims-only),mise doctornow checks whether non-mise directories appear before mise-managed tool paths in PATH and lists the specific offending entries. #8585 by @jdx- New registry tools:
Fixed
- Python: verify checksums for precompiled binary downloads -- Precompiled Python downloads are now checked against lockfile checksums between HTTP download and tarball extraction, preventing corrupted or tampered downloads from being silently accepted. #8593 by @malept
- Python: exclude freethreaded builds from precompiled selection -- Freethreaded Python builds (e.g.
cpython-3.14.3-freethreaded) uselib/python3.14t/instead oflib/python3.14/, causing installation failures. These are now filtered out by default unlesspython.precompiled_flavoris explicitly set to a freethreaded variant. #8672 by @jdx - Config: resolve trust hash collision for same-name directories -- In paranoid mode, configs sharing the same parent directory leaf name (e.g.
/projectA/infra/mise.tomland/projectB/infra/mise.toml) would map to a single hash file, silently breaking trust verification. The filename extension is now appended instead of replaced. Previously trusted configs may need a one-timemise trustafter upgrading. #8628 by @tdragon - Lockfile: resolve symlinks when updating -- If a lockfile is a symlink, mise now updates the target file instead of replacing the symlink with a regular file. #8589 by @chancez
- Rust: resolve relative CARGO_HOME/RUSTUP_HOME to absolute paths -- When
CARGO_HOMEorRUSTUP_HOMEis set to a relative path (e.g..cargovia[env]), the paths are now resolved to absolute before use, preventing broken PATH entries likeundefined/binafter changing directories. #8604 by @simonepri - Bootstrap: preserve argv[0] for shim dispatch --
mise generate bootstrapnow emitsexec -a "$0"instead of plainexec, preserving the original invocation name so that shim symlinks (e.g.claude -> mise) dispatch correctly. #8521 by @tak848 - Installer: normalize current version before comparison -- The standalone installer now strips the
vprefix fromMISE_CURRENT_VERSIONbefore comparisons, so embedded checksums and the current-release CDN path are used correctly. #8649 by @tak848 - Tasks: global file tasks not properly marked as such -- #8618 by @roele
- Tasks: handle broken pipe in
mise tasks ls-- Piping task output (e.g.mise tasks ls | head) no longer panics with EPIPE. #8608 by @vmaleze - Tasks: correctly resolve
_defaultfiles with extensions --test/_default.shis now correctly loaded as thetesttask instead oftest:_default. #8646 by @youta1119 - Tasks: fix argument completion with flags in zsh -- Completing task arguments after flags (e.g.
mise run build -- -c <TAB>) no longer produces errors. #8601 by @KevSlashNull - Git: use "origin" as remote name -- Cloned registries now consistently use "origin" as the remote name, fixing fetch failures in some configurations. #8626 by @bentinata
- Shared tools: fix failing rebuild of runtime symlinks -- Installing tools with
--systemno longer fails when rebuilding runtime symlinks due to incorrect install path resolution. #8647 by @roele - Flutter: fix version_expr Tera parser collision -- Added spaces around the current element operator in Flutter's
version_exprto prevent Tera parser errors. #8616 by @roele
Changed
- Removed hidden
--prefixand--interleaveflags frommise run-- These flags were hidden in December 2024 when--outputwas introduced as their replacement. Their short forms (-p,-i) could silently consume flags intended for tasks. Use--output prefixor--output interleaveinstead. #8669 by @nkakouros
Breaking Changes
.tool-versionswith Tera templates now require trust -- If you have.tool-versionsfiles using template syntax ({{,{%,{#), you will need to runmise trustin those directories. Plain.tool-versionsfiles are unaffected. #8675- Trust hash files regenerated -- Due to the hash collision fix, previously trusted configs in paranoid mode may need a one-time
mise trustafter upgrading. #8628 --prefix/-pand--interleave/-iremoved frommise run-- Use--output prefixor--output interleaveinstead (available since December 2024). #8669
New Contributors
- @nkakouros made their first contribution in #8669
- @jianglu made their first contribution in #8667
- @tak848 made their first contribution in #8521
- @bentinata made their first contribution in #8626
- @tdragon made their first contribution in #8628
- @nygmaaa made their first contribution in #8642
- @youta1119 made their first contribution in #8646
- @chancez made their first contribution in #8589
- @dector made their first contribution in #8635
Full Changelog: v2026.3.9...v2026.3.10