mise-en-place

notes:
Release list
2026.5.1: Aqua cosign and a reshim rescue
RECENT
2026.5.0: Conda graduates, smarter pres, and Windows POSIX tasks
RECENT
2026.4.28: Remote tasks pinned by commit SHA
RECENT
2026.4.27: npm install args, smarter watch, and a macOS shim recursion fix
RECENT
2026.4.25: Sharper task tooling and lockfile fixes
2026.4.24: Resilient downloads and global pre- opt-in
2026.4.23: Pre-s, libc preference, and a Node musl fix
2026.4.21: untrust command and prune lockfile fixes
2026.4.22: Repaired latest resolution and clearer deps output
2026.4.20: Lockfile cleanup and path: fixes
2026.4.19: OCI images, aqua templates, and more resilient installs
2026.4.18: Deps management, aube support, and vfox plugin dependencies
2026.4.17: install_before fixes, lockfile repair, and new registry tools
2026.4.16: Tera templates in inline tasks, raw_args passthrough, and runtime symlink paths
2026.4.15: Windows path separator fix and improved GitHub token detection
2026.4.13: Remote cache, Go install_before, and task tool objects
2026.4.14: Fix GitHub attestation verification for some tools
2026.4.12: OS/arch filtering, task confirmation defaults, and npm supply chain improvements
2026.4.11: Task dependency templates and npm semver range support
2026.4.10: Fix spurious warnings from postinstall hooks running tasks
Release notes:

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-only flag on mise tasks ls (and mise 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 into fzf Just Works:

    mise run "$(mise tasks ls --name-only --all | fzf)"
    

    Conflicts with --json, --extended, and --usage.

Fixed

  • (task) Dependency templates can now branch on usage values 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 usage with subcommands but no top-level args/flags now correctly populate usage.cmd for dependency templates, fixing a regression from #9424 where the early-return path skipped subcommand handling (#9431) by @jdx. The fix also de-duplicates make_usage_ctx between the script parser and the dep renderer so they can't drift again.

  • (task) Sandbox allow_read / allow_write paths declared on a task are now resolved against the task's effective working directory rather than the shell's pwd (#9428) by @jdx. Previously, dir = "../bar" plus allow_read = ["."] opened up the caller's directory while the task itself ran in bar/ and got blocked. CLI overrides like mise run --allow-read=… still resolve against shell cwd. Closes #9423.

  • (lockfile) mise upgrade now updates the global lockfile (~/.config/mise/mise.lock) when bumping a fuzzy version such as latest (#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 global dummy = "latest" upgrading from 1.0.0 to 2.0.0 actually pins 2.0.0.

  • (aqua) When list_releases_including_prereleases returned an empty list (paginated/cached edge case, throttling, or a repo that genuinely has no releases), aqua fell back to list_tags and pulled in every git tag in the repo (#9443) by @jdx. For monorepos that tag sub-crates, that meant ripgrep's grep-regex-0.1.1 and friends ended up in the shared mise-versions snapshot, so ripgrep = "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 via version_source = "github_tag". The remote_versions cache filename is also reverted to remote_versions.msgpack.z to avoid needlessly invalidating existing caches — VersionInfo already deserializes forward-compatibly. (Server-side mise-versions snapshots will need to be regenerated with this fix.)

  • (ls-remote) mise ls-remote --json no longer emits "rolling":false,"prerelease":false on 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-cli is now installed via dnf instead of pip, fixing ModuleNotFoundError: 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: https://github.com/jdx/mise/compare/v2026.4.24...v2026.4.25

Copyright © 2023 - All right reserved by Yadoc SAS