A focused release: more control over how npm-backed tools get installed, smarter mise watch that follows task dependencies, and a fix for a nasty macOS shim recursion that could lock up a shell during mise up --bump.
Added
-
(backend) New
npm_args,pnpm_args,bun_args, andaube_argstool options on the npm backend (#9109) by @risu729. Each one is forwarded to the matching package manager when it's the activesettings.npm.package_manager, mirroring thepipxbackend's style. The args are also recorded in the lockfile and at install time:[tools] "npm:npm" = { version = "latest", aube_args = "--reporter append-only" } "npm:tiny" = { version = "latest", pnpm_args = "--loglevel=warn" }
-
(env) External vfox environment plugins now get
ctx.config_rootin theirMiseEnv/MisePathhooks (#9465) by @hisaac. This matches what built-in directives like_.filealready see, so plugins (e.g.mise-xcode) can resolve user-supplied relative paths against the project root regardless of the shell's cwd.watch_filesreturned from a plugin are now also absolutized againstconfig_rootinstead ofcurrent_dir(). -
(task)
mise watchnow follows the task graph and watches the sources of each chosen task's dependencies as well as its own (#9437) by @43081j. Pass--skip-deps(or setskip_deps) to restore the previous "task sources only" behavior. Explicit--globoverrides still win. -
(release)
scripts/gen-aqua-changelog.shnow diffs the previous tag'sregistry.yamlagainst the current one and emitsNew Packages/Updated Packagessections in the release PR, instead of dumping the aqua-registry release tags rolled into the release (#9471) by @jdx. This restores the pre-#9043 behavior for the merged-registry world.
Fixed
-
(backend) When
_list_remote_versionsreturned an empty list (invalid module path, throttling, etc.) the empty result was cached as if it were authoritative, poisoning both the on-disk cache file and the in-memoryOnceCellfor up to an hour (#9444) by @c22. The cache is now cleared in both places when the list comes back empty, so the next call re-fetches. -
(shims) Fixed an infinite shim recursion on macOS reported in #9462 where
mise up --bumpagainst npm packages would loopmise -> npm shim -> mise -> npm shim -> ...and sometimes crash the session (#9468) by @jdx. The trigger was a case-mismatched$HOMEinPATH(/Users/Olfway/...vs./Users/olfway/...) — the shims-stripping inBackend::dependency_envcompared byte-equal, so on case-insensitive APFS/HFS+ volumes it was a no-op andnpmre-resolved to the mise shim. A newfile::paths_eqdoes case-insensitive compares on macOS/Windows and byte-equal on Linux, and is now used everywhere mise asks "is this PATH entry the shims directory?" — includingpath_env_without_shims,which_no_shims,PathEnvpartitioning,cli::execprogram resolution, and the doctor'sshims_on_pathcheck (which had been silently reportingnofor affected users). -
(task) Under
deny_env = trueon Linux, every env var was being stripped from the child process — including thePATH/HOME/USER/SHELL/TERM/LANGthatfilter_envand the docs say should pass through (#9467) by @jdx, fixing #9466.apply_sandbox()was callingCommand::env_clear()after the task executor populated explicit envs via.envs(filtered_env), wiping both. The Linux branch now snapshots the explicit envs before clearing and re-applies them; macOS already did this. A newpath_testtask ine2e/sandbox/test_sandbox_taskguards against regressions.
New Contributors
Full Changelog: v2026.4.26...v2026.4.27