A round of correctness and performance fixes: vfox-managed tools no longer prompt your password manager on every shell hook, mise upgrade stops double-printing its summary, mise settings get finally distinguishes typos from unset values, and conda installs that pulled in adwaita-icon-theme are unstuck. Plus a security pass that hardens version-string parsing against shell injection.
Fixed
-
(vfox) GitHub tokens are now resolved lazily inside Lua plugins. Previously,
mise hook-env,mise activate,mise completion, and evenmise --helpwould callgithub.credential_commandfor every installed vfox tool — potentially unlocking a password manager on every prompt. The resolver is now only invoked when a Lua plugin actually issues an HTTP request to a GitHub API URL, e.g. during an install (#9816) by @jdx. Fixes #9797. -
(upgrade)
mise upgrade(andmise up) no longer prints the installed-tools block twice when an upgrade also needs to uninstall an older version. The shared progress-job registry is now cleared after each phase so the subsequent uninstall renders cleanly (#9779) by @jdx. Fixes #9774. -
(settings)
mise settings getdistinguishes between a known setting that hasn't been set and a typo:$ mise settings get python.compile mise ERROR Setting [python.compile] is not set $ mise settings get not.a.real.setting mise ERROR Unknown setting: not.a.real.settingPreviously both returned
Unknown setting, sinceOption<T>fields skipped by TOML serialization were indistinguishable from missing keys (#9818) by @jdx. -
(backend) Several backends (
aqua,github/gitlab/forgejo,http,s3,ubi,vfox,conda, Windowsnpm) reportedbin-pathspointing at the concrete resolved install dir (e.g.installs/tiny/1.0.0/...) instead of the stable runtime symlink for the requested label (e.g.installs/tiny/latest/...). A newruntime_path_for_install_pathhelper remaps backend-discovered absolute paths onto the runtime path while leaving explicit relativebin_pathvalues alone (#9606) by @risu729. -
(conda)
mise use -g imagemagick(and other tools pulling inadwaita-icon-theme) failed withconda solve failed: encountered duplicate records for adwaita-icon-theme-40.1.1-.... rattler-solve detects duplicates byDistArchiveIdentifierrather than URL, so when conda-forge served the same archive under multiple CDN URLs, the existing URL-based dedup wasn't enough. Dedup now usesr.identifier, the exact key the solver uses (#9831) by @jdx. Fixes #9829.
Added
- (github)
github.credential_commandnow runs through the configured default inline shell (instead of hardcodedsh -c) and is invoked withMISE_CREDENTIAL_HOSTandMISE_CREDENTIAL_PROVIDERin the environment. The deprecated$1/${1}hostname positional argument continues to work for sh-compatible shells (ash,bash,dash,ksh,sh,zsh); a deprecation warning lands in2026.11.0and removal is planned for2027.11.0(#9664) by @risu729.
Performance
-
(aqua) The baked aqua standard-registry package and alias lookup tables are now generated as static
phf::Maps at build time viaphf_codegen, instead of lazy runtimeHashMaps. Warmed lookup is comparable, but first-use no longer allocates ~115 KiB of heap or builds a 2,179-entry bucket table (#9763) by @risu729. -
(task) When
task.source_freshness_hash_contents = true, mise now caches each source file's blake3 hash keyed by(size, mtime_secs, mtime_nanos)— git's stat-info trick — in a per-task file underSTATE/task-sources/. Unchanged files are skipped on subsequent runs; entries for files removed fromsourcesare pruned automatically (#9819) by @jdx. See discussion #9802.
Security
- Reject shell metacharacters in version strings at the
ToolRequestboundary (#9814) by @jdx.ToolRequest::newnow validatesversion,prefix,ref/*,sub-*, andpath:requests, rejecting$, backticks, quotes,\, control chars, and..traversal. This single change neutralizes the CRITICAL RCE class flagged againstvfox-ag,vfox-bfs,vfox-bpkg,vfox-chezscheme,vfox-redis,vfox-yarn, and shell-injection findings onclickhouse,leiningen,pipenv,poetry,azure-functions-core-tools,carthage, andandroid-sdk, since no Lua hook can observe a hostilectx.version/ctx.rootPath. Real-world strings like1.2.3-beta,lts/hydrogen,3.12.0a1, andnightlycontinue to validate. The PR also tightensworkflow_dispatchinput validation in the COPR, PPA, npm-publish, and Docker workflows.
Registry
- Replace unsupported
exe = ...options across ~30 GitHub/GitLab registry entries (astro,babashka,coursier,glab,odin,openbao,purescript, and many more) (#9587) by @risu729. Two entries gained real config to fix Linux installs:soliditynow usesbin = "solc"so the installed binary matches the upstreamsolc-static-linuxasset.sourcerynow usesformat = "tar.gz"because the upstream Linux asset is gzip-compressed despite its.tar.xzfilename.
- Update
pitoearendil-works/pi(#9792) by @garysassano.
Documentation
Full Changelog: v2026.5.6...v2026.5.7
💚 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.