A patch release focused on smoothing rough edges in tasks (sandbox path resolution, dependency templates, a new --name-only listing) and fixing a handful of upgrade/ls-remote pitfalls.
Added
-
(task) New
--name-onlyflag onmise tasks ls(andmise tasks) prints one task name per line — no headers, no padding, no description column (#9435) by @jdx. It composes with--all,--global/--local,--hidden,--sort/--sort-order, and uses a broken-pipe-tolerant writer so dropping it intofzfJust Works:mise run "$(mise tasks ls --name-only --all | fzf)"Conflicts with
--json,--extended, and--usage.
Fixed
-
(task) Dependency templates can now branch on
usagevalues inside Tera statement tags, not just output expressions, and boolean/array flags are passed through with their real types instead of stringified (#9424) by @jdx. So this finally does what it looks like:[tasks.lint] usage = 'flag "--run-post" default=#false' depends_post = [''' {%- if usage.run_post -%} postlint:** {%- else -%} noop {%- endif -%} '''] run = 'echo "lint ran"'
-
(task) Tasks that define
usagewith subcommands but no top-level args/flags now correctly populateusage.cmdfor dependency templates, fixing a regression from #9424 where the early-return path skipped subcommand handling (#9431) by @jdx. The fix also de-duplicatesmake_usage_ctxbetween the script parser and the dep renderer so they can't drift again. -
(task) Sandbox
allow_read/allow_writepaths declared on a task are now resolved against the task's effective working directory rather than the shell'spwd(#9428) by @jdx. Previously,dir = "../bar"plusallow_read = ["."]opened up the caller's directory while the task itself ran inbar/and got blocked. CLI overrides likemise run --allow-read=…still resolve against shell cwd. Closes #9423. -
(lockfile)
mise upgradenow updates the global lockfile (~/.config/mise/mise.lock) when bumping a fuzzy version such aslatest(#9442) by @jdx. The grouping pass was excluding global config files entirely, and fuzzy requests could re-resolve through the stale lockfile entry mid-update. Newly installed versions are now overlaid before lockfiles are rewritten, so a globaldummy = "latest"upgrading from1.0.0to2.0.0actually pins2.0.0. -
(aqua) When
list_releases_including_prereleasesreturned an empty list (paginated/cached edge case, throttling, or a repo that genuinely has no releases), aqua fell back tolist_tagsand pulled in every git tag in the repo (#9443) by @jdx. For monorepos that tag sub-crates, that meant ripgrep'sgrep-regex-0.1.1and friends ended up in the sharedmise-versionssnapshot, soripgrep = "latest"resolved to a tag with no matching release asset and 404'd on install. Empty release lists now propagate as empty version lists; packages that legitimately use tags as their version source still opt in viaversion_source = "github_tag". Theremote_versionscache filename is also reverted toremote_versions.msgpack.zto avoid needlessly invalidating existing caches —VersionInfoalready deserializes forward-compatibly. (Server-sidemise-versionssnapshots will need to be regenerated with this fix.) -
(ls-remote)
mise ls-remote --jsonno longer emits"rolling":false,"prerelease":falseon every entry (#9439) by @jdx. Dummy output is now[{"version":"1.0.0"},{"version":"1.1.0"},{"version":"2.0.0"}]. Backends that legitimately set either flag (rust nightly/beta/stable, github/aqua pre-releases) still emit the field; cached entries written by older builds continue to deserialize. -
(docs) The docs site no longer flickers between light/dark themes on initial load (#9427) by @vhespanha. VitePress's anti-flicker inline script is now marked
data-cfasync="false"so Cloudflare's Rocket Loader stops deferring it. Fixes #9393. -
(Dockerfile)
copr-cliis now installed viadnfinstead of pip, fixingModuleNotFoundError: No module named 'rich'in the publish-copr workflow (#9421) by @bestagi.
New Contributors
- @vhespanha made their first contribution in #9427
- @bestagi made their first contribution in #9421
Full Changelog: v2026.4.24...v2026.4.25