This release adds opt-in automatic self-updates, lets remote bootstrap leave a working mise behind on each target, and introduces versioned lockfiles that bind each request to the version it resolved. It also replaces the CLI parser with usage-rs, hardens remote Git task handling, and fixes a wide range of tool-installation, task, and config edge cases.
Highlights
- mise can now keep itself up to date and provision itself onto remote hosts, closing two long-standing gaps in unattended and remote workflows.
- Lockfiles gained an explicit format version so overlapping loose and exact requests can pin distinct versions, with
mise lock --upgradefor safe migration and no surprise drift for existing files. - The CLI parser moved from clap to usage-rs, and remote Git task paths are now contained against traversal, symlink, and Windows path escapes.
Added
-
self-update: New opt-in automatic updates. Enable
auto_update(withauto_update_check_duration, default7d) and mise will update itself before eligible interactive commands, then re-exec your original invocation with the new binary. Updates are throttled and lock-serialized, skipped in CI, offline, non-interactive, and shell-integration contexts, and failures never block the requested command. Package-managed builds are steered toward the official optimized binaries. (#12288 by @jdx)[settings] auto_update = true auto_update_check_duration = "7d"
-
bootstrap: Remote bootstrap can now install a persistent mise on each target instead of tearing it down with the staging directory. Set
install_misein[bootstrap.remote](or per host) or pass--install-mise[=/path]; the same checksum-verified executable that ran the bootstrap is installed, so the host converges on the orchestrating mise version. (#12284 by @jdx)[bootstrap.remote] install_mise = true # installs to ~/.local/bin/mise
-
lock: Lockfiles now carry
lockfile_version = 1and bind each original request to the entry it resolved, so overlapping requests like"1"and"1.0.0"can lock different versions. Existing unversioned lockfiles stay on format 0 during ordinarymise lock/install/upgradeto avoid drift; runmise lock --upgradeto migrate (transactional, rolls back on failure). (#12299 by @jdx) -
node: mise can now act as a Corepack replacement, honoring the
+sha...checksum suffixes inpackageManager/devEngines.packageManagerand verifying the exact npm, pnpm, Yarn, or bun artifact before installing. Adds SHA-224/SHA-384 hashing and a Windows script launcher for Yarn's JS CLI. (#12214 by @jdx) -
prune:
mise prune --dry-runnow explains why each version is prunable, naming either the kept versions and the configs requiring them or the fact that nothing tracked references the tool. (#12304 by @Marukome0743) -
java: Oracle GraalVM "innovation" feature releases are now recognized. (#12189 by @roele)
Fixed
- oci: pipx virtual environments are now relocated when packed into OCI images, rewriting host-absolute shebangs and rebasing venv interpreter links (including aliases like
python/latest) onto the image's Python, so tools no longer dangle at runtime. (#12211 by @jdx) - ruby: glibc precompiled binaries are now skipped on musl Linux, falling back to ruby-build. (#12289 by @risu729)
- bash: activation no longer applies the environment under
--no-hook-env. (#12218 by @JamBalaya56562) - env: any spelling of
PATHnow folds onto a single key on Windows. (#12312 by @JamBalaya56562) - npm: deprecated versions are now filtered during resolution. (#12226 by @risu729)
- aqua: cargo warnings use crate names,
go installwarning paths render correctly, and mise suggests compatible package backends. (#12252, #12251, #12225 by @risu729) - brew: cask artifacts behind flight-created symlinks now resolve correctly. (#12243 by @jdx)
- bootstrap: progress display is suspended while sudo prompts, brew casks are no longer reinstalled on content drift, overlapping dotfile footprints are rejected, and brew cask pkgutil patterns match correctly. (#12244, #12222, #12290, #12297 by @jdx)
- config: dotted
conf.dfragments load unconditionally again, and mise no longer prompts for trust when stdin is not a tty. (#12242 by @jdx, #12268 by @Marukome0743) - lock: the "run
mise lock" hint now points at--globalwhen only global config has tools. (#12260 by @jdx) - ls-remote: JSON prerelease output now distinguishes unknown from stable. (#12265 by @risu729)
- doctor: the new-version warning is now reported in JSON output too. (#12267 by @JamBalaya56562)
- install-script: the pinned binary now defaults under the data dir rather than the cache dir. (#12261 by @Guria)
- set:
mise set --filenow refuses a file it cannot read back. (#12207 by @JamBalaya56562) - sandbox: macOS root path traversal is now allowed. (#12263 by @jrandolf)
- task: several task fixes — Rust cache paths map to the task root (#12235 by @jrandolf), Git task snapshots are preserved (#12000 by @risu729), global task scope precedence is enforced (#12229 by @risu729), silent template overrides are preserved (#12215 by @risu729), pwsh shebang file tasks run on Windows (#12274 by @JamBalaya56562), and file task arguments forward through a
-cshell (#12277 by @JamBalaya56562).
Changed
- cli: The command-line parser, help output, and shell completions moved from clap to usage-rs. Completions and help are now generated from compiled usage metadata rather than an external
usageCLI, andmise completion --installwrites self-contained scripts. This raises the minimum supported Rust version to 1.95. (#12221 by @jdx) - generate:
mise generate bootstrapis renamed tomise generate install-scriptto avoid confusion withmise bootstrap. The old spelling still works as a hidden, deprecated alias (removal scheduled for 2027.9.0). (#12247 by @jdx) - prompts: confirmation prompts now distinguish "could not ask" from an explicit "no". (#12273 by @Marukome0743)
Security
- task: Remote Git task paths are now contained to the checkout root, rejecting
..traversal, Windows absolute/backslash and drive-qualified forms, and intermediate symlink escapes, and refusing non-regular-file targets. This closes escapes that couldchmod +xand execute attacker-chosen files outside the checkout. (#12254 by @risu729)
Deprecated
- config (Alpine): The distro-wide
all_compile = truedefault on Alpine now warns and is scheduled for removal in 2027.8.0; precompiled musl binaries become the default path. Setall_compile = trueexplicitly to keep building from source. (#12287 by @risu729) - config (idiomatic files): Minimum-version floors in
go.mod(go X.Y) andCMakeLists.txt(cmake_minimum_required) now warn when they resolve a version and stop being read in 2026.11.0.toolchain goX.Y.Zis unaffected. Only affects users who opted these tools intoidiomatic_version_file_enable_tools. (#12259 by @jdx)
Documentation
- Clarified brew-cask TCC warnings on bootstrap (#12223 by @jdx),
_.sourcebeing bash-only (#12286 by @risu729) and its cacheable source example (#12278 by @Marukome0743), cross-file hook execution order (#12295 by @jdx), that--systemis shared storage rather than a mise-free install (#12253 by @jdx), which backends lockfile strict mode skips (#12306 by @Marukome0743), that task deps ignores run-array refs (#12285 by @risu729), and thatrawserializes execution (#12307 by @Marukome0743).
Registry
- Added hugo-extended-withdeploy (#12230 by @Perlence), skim (#12239 by @risu729), ticker (#12269 by @i-api), and cloc (#12280 by @szepeviktor).
Performance
- Aqua registry search avoids allocating registry ids (#12231 by @risu729), and install state is loaded per tool instead of scanning every install (#12236 by @jdx).
Breaking Changes
- The CLI parser migration (#12221) raises the minimum supported Rust version to 1.95 for building from source, and
mise completion's--include-bash-completion-lib/--usageflags are now no-ops. Command behavior, flags, and aliases are otherwise preserved.
New Contributors
- @szepeviktor made their first contribution in #12280
- @i-api made their first contribution in #12269
- @jrandolf made their first contribution in #12263
- @Perlence made their first contribution in #12230
Full Changelog: v2026.8.10...v2026.8.11
💚 Sponsor mise
mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.
If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.