v2026.8.11

jdx/misev2026.8.11Aug 23, 2026by mise-en-dev

AI Summary

This release adds opt-in automatic self-updates, lets remote bootstrap leave a working mise behind on each target, and introduces versioned lockfiles. It also replaces the CLI parser with usage-rs.

Key Highlights

  • Opt-in automatic self-updates via `auto_update` setting.
  • Remote bootstrap can now install a persistent mise on each target.
  • Lockfiles now carry an explicit format version to bind requests to resolved versions.
  • CLI parser moved from clap to usage-rs.

Breaking Changes

  • CLI parser migration to usage-rs raises minimum Rust version to 1.95.
  • Deprecated `mise generate bootstrap` alias (removal scheduled for 2027.9.0).

New Features

  • Automatic self-update configuration
  • Remote bootstrap mise installation
  • Lockfile versioning with `lockfile_version = 1`
  • Corepack replacement functionality
  • Improved `mise prune --dry-run` explanations

Full Release Notes

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 --upgrade` for 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` (with `auto_update_check_duration`, default `7d`) 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](https://github.com/jdx/mise/pull/12288) by @jdx)

  ```toml
  [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_mise` in `[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](https://github.com/jdx/mise/pull/12284) by @jdx)

  ```toml
  [bootstrap.remote]
  install_mise = true  # installs to ~/.local/bin/mise
  ```
- **lock:** Lockfiles now carry `lockfile_version = 1` and 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 ordinary `mise lock`/`install`/`upgrade` to avoid drift; run `mise lock --upgrade` to migrate (transactional, rolls back on failure). ([#12299](https://github.com/jdx/mise/pull/12299) by @jdx)
- **node:** mise can now act as a Corepack replacement, honoring the `+sha...` checksum suffixes in `packageManager` / `devEngines.packageManager` and 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](https://github.com/jdx/mise/pull/12214) by @jdx)
- **prune:** `mise prune --dry-run` now 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](https://github.com/jdx/mise/pull/12304) by @Marukome0743)
- **java:** Oracle GraalVM "innovation" feature releases are now recognized. ([#12189](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/12211) by @jdx)
- **ruby:** glibc precompiled binaries are now skipped on musl Linux, falling back to ruby-build. ([#12289](https://github.com/jdx/mise/pull/12289) by @risu729)
- **bash:** activation no longer applies the environment under `--no-hook-env`. ([#12218](https://github.com/jdx/mise/pull/12218) by @JamBalaya56562)
- **env:** any spelling of `PATH` now folds onto a single key on Windows. ([#12312](https://github.com/jdx/mise/pull/12312) by @JamBalaya56562)
- **npm:** deprecated versions are now filtered during resolution. ([#12226](https://github.com/jdx/mise/pull/12226) by @risu729)
- **aqua:** cargo warnings use crate names, `go install` warning paths render correctly, and mise suggests compatible package backends. ([#12252](https://github.com/jdx/mise/pull/12252), [#12251](https://github.com/jdx/mise/pull/12251), [#12225](https://github.com/jdx/mise/pull/12225) by @risu729)
- **brew:** cask artifacts behind flight-created symlinks now resolve correctly. ([#12243](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/12244), [#12222](https://github.com/jdx/mise/pull/12222), [#12290](https://github.com/jdx/mise/pull/12290), [#12297](https://github.com/jdx/mise/pull/12297) by @jdx)
- **config:** dotted `conf.d` fragments load unconditionally again, and mise no longer prompts for trust when stdin is not a tty. ([#12242](https://github.com/jdx/mise/pull/12242) by @jdx, [#12268](https://github.com/jdx/mise/pull/12268) by @Marukome0743)
- **lock:** the "run `mise lock`" hint now points at `--global` when only global config has tools. ([#12260](https://github.com/jdx/mise/pull/12260) by @jdx)
- **ls-remote:** JSON prerelease output now distinguishes unknown from stable. ([#12265](https://github.com/jdx/mise/pull/12265) by @risu729)
- **doctor:** the new-version warning is now reported in JSON output too. ([#12267](https://github.com/jdx/mise/pull/12267) by @JamBalaya56562)
- **install-script:** the pinned binary now defaults under the data dir rather than the cache dir. ([#12261](https://github.com/jdx/mise/pull/12261) by @Guria)
- **set:** `mise set --file` now refuses a file it cannot read back. ([#12207](https://github.com/jdx/mise/pull/12207) by @JamBalaya56562)
- **sandbox:** macOS root path traversal is now allowed. ([#12263](https://github.com/jdx/mise/pull/12263) by @jrandolf)
- **task:** several task fixes — Rust cache paths map to the task root ([#12235](https://github.com/jdx/mise/pull/12235) by @jrandolf), Git task snapshots are preserved ([#12000](https://github.com/jdx/mise/pull/12000) by @risu729), global task scope precedence is enforced ([#12229](https://github.com/jdx/mise/pull/12229) by @risu729), silent template overrides are preserved ([#12215](https://github.com/jdx/mise/pull/12215) by @risu729), pwsh shebang file tasks run on Windows ([#12274](https://github.com/jdx/mise/pull/12274) by @JamBalaya56562), and file task arguments forward through a `-c` shell ([#12277](https://github.com/jdx/mise/pull/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 `usage` CLI, and `mise completion --install` writes self-contained scripts. This raises the minimum supported Rust version to 1.95. ([#12221](https://github.com/jdx/mise/pull/12221) by @jdx)
- **generate:** `mise generate bootstrap` is renamed to `mise generate install-script` to avoid confusion with `mise bootstrap`. The old spelling still works as a hidden, deprecated alias (removal scheduled for 2027.9.0). ([#12247](https://github.com/jdx/mise/pull/12247) by @jdx)
- **prompts:** confirmation prompts now distinguish "could not ask" from an explicit "no". ([#12273](https://github.com/jdx/mise/pull/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 could `chmod +x` and execute attacker-chosen files outside the checkout. ([#12254](https://github.com/jdx/mise/pull/12254) by @risu729)

## Deprecated
- **config (Alpine):** The distro-wide `all_compile = true` default on Alpine now warns and is scheduled for removal in 2027.8.0; precompiled musl binaries become the default path. Set `all_compile = true` explicitly to keep building from source. ([#12287](https://github.com/jdx/mise/pull/12287) by @risu729)
- **config (idiomatic files):** Minimum-version floors in `go.mod` (`go X.Y`) and `CMakeLists.txt` (`cmake_minimum_required`) now warn when they resolve a version and stop being read in 2026.11.0. `toolchain goX.Y.Z` is unaffected. Only affects users who opted these tools into `idiomatic_version_file_enable_tools`. ([#12259](https://github.com/jdx/mise/pull/12259) by @jdx)

## Documentation
- Clarified brew-cask TCC warnings on bootstrap ([#12223](https://github.com/jdx/mise/pull/12223) by @jdx), `_.source` being bash-only ([#12286](https://github.com/jdx/mise/pull/12286) by @risu729) and its cacheable source example ([#12278](https://github.com/jdx/mise/pull/12278) by @Marukome0743), cross-file hook execution order ([#12295](https://github.com/jdx/mise/pull/12295) by @jdx), that `--system` is shared storage rather than a mise-free install ([#12253](https://github.com/jdx/mise/pull/12253) by @jdx), which backends lockfile strict mode skips ([#12306](https://github.com/jdx/mise/pull/12306) by @Marukome0743), that task deps ignores run-array refs ([#12285](https://github.com/jdx/mise/pull/12285) by @risu729), and that `raw` serializes execution ([#12307](https://github.com/jdx/mise/pull/12307) by @Marukome0743).

## Registry
- Added hugo-extended-withdeploy ([#12230](https://github.com/jdx/mise/pull/12230) by @Perlence), skim ([#12239](https://github.com/jdx/mise/pull/12239) by @risu729), ticker ([#12269](https://github.com/jdx/mise/pull/12269) by @i-api), and cloc ([#12280](https://github.com/jdx/mise/pull/12280) by @szepeviktor).

## Performance
- Aqua registry search avoids allocating registry ids ([#12231](https://github.com/jdx/mise/pull/12231) by @risu729), and install state is loaded per tool instead of scanning every install ([#12236](https://github.com/jdx/mise/pull/12236) by @jdx).

## Breaking Changes
- The CLI parser migration ([#12221](https://github.com/jdx/mise/pull/12221)) raises the minimum supported Rust version to 1.95 for building from source, and `mise completion`'s `--include-bash-completion-lib` / `--usage` flags are now no-ops. Command behavior, flags, and aliases are otherwise preserved.

## New Contributors
- @szepeviktor made their first contribution in [#12280](https://github.com/jdx/mise/pull/12280)
- @i-api made their first contribution in [#12269](https://github.com/jdx/mise/pull/12269)
- @jrandolf made their first contribution in [#12263](https://github.com/jdx/mise/pull/12263)
- @Perlence made their first contribution in [#12230](https://github.com/jdx/mise/pull/12230)

**Full Changelog**: https://github.com/jdx/mise/compare/v2026.8.10...v2026.8.11

## 💚 Sponsor mise

mise is maintained by [@jdx](https://github.com/jdx), an open source developer for [**entire.io**](https://entire.io), the title sponsor of the [jdx.dev](https://jdx.dev) open source tools. Development is funded by sponsors.

If mise saves you or your team time, please consider sponsoring at [jdx.dev](https://jdx.dev/sponsors.html). Individual and company sponsorships keep mise fast, free, and independent.