Releases: jdx/mise
v2026.2.17: Freshly Prepared
A moderate release with a handful of bug fixes and a new feature for the prepare system.
Highlights
-
Prepare: auto-touch stale outputs — When tools like
uv syncskip work because dependencies are already satisfied, output files don't get updated, causing mise to consider them stale on the next run. Prepare providers now automatically touch output files after a successful command, keeping staleness checks accurate. This is controlled by a newtouch_outputsconfig option (defaults to true). #8243 by @halms -
Settings reorganization:
task_*→task.*— Nine flattask_*settings have been consolidated into a nestedtask.*namespace (e.g.,task_output→task.output). The old names still work with no breaking changes — deprecation warnings won't appear until2026.8.0. #8239
Bug Fixes
-
Postinstall hooks now use correct bin paths — Per-tool postinstall hooks were hardcoding
$install_path/binonPATH, which broke backends like aqua where binaries live in non-standard subdirectories. Hooks now use each backend's actual binary paths. #8234 -
mise usewrites to the correct config file — When bothconfig.tomlandconfig.local.tomlexist,mise usewas incorrectly writing toconfig.local.toml. It now properly targetsconfig.toml. #8240 -
Legacy
.mise.backendinstalls no longer block auto-migration — Legacy backend files were defaulting toexplicit_backend = true, which prevented auto-migration to updated registry backends. They now default to non-explicit, allowing tools likeglabto resolve correctly through the current registry. #8245 by @jean-humann
📦 Aqua Registry Updates
Updated Packages (1)
v2026.2.16: MCP Gets Its Hands Dirty
This release brings MCP task execution support, better Node.js flavor guidance, and a solid round of bug fixes across several backends.
Highlights
- MCP
run_tasktool — You can now execute mise tasks directly through the MCP interface. The newrun_tasktool runs tasks via subprocess with full stdout/stderr capture, timeout support, and hardened execution. Aninstall_toolstub is also included for future expansion. #8179 by @joaommartins - Node flavor suggestions — When a Node.js version isn't found in the configured mirror, mise now suggests setting
node.flavorto help you get to the right download faster. #8206 by @risu729 - Registry stack overflow fix — The registry
BTreeMapis now built directly on the heap, eliminating a stack overflow that could occur with large registries. #8214 by @risu729
Bug Fixes
- Java version sorting — Shorthand Java versions (e.g.,
21,17) now sort correctly. #8197 by @roele - Node env var migration — Node-related environment variables have been properly migrated to the settings system. #8200 by @risu729
- Registry overrides in shims — Registry overrides are now correctly applied when running tools through shims. #8199 by @risu729
- Rust outdated duplication — Fixed
mise outdatedshowing Rust versions twice. #8209 by @roele - GitHub aliased backend resolution — Version lookups no longer break for tools aliased to a different backend than the registry default. #8221
- GitHub attestation output — Attestation verification success is now shown in progress output. #8230
- Cargo binstall setting migration —
MISE_CARGO_BINSTALL_ONLYhas been migrated to the settings system. #8202 by @risu729
New Tools
v2026.2.15: Streaming in Order
This release brings a nice quality-of-life improvement to task execution along with a solid batch of bug fixes across several subsystems.
Highlights
-
Real-time streaming for keep-order tasks — The
keep_ordertask output mode now streams the active task's output in real-time instead of buffering everything until completion. Other parallel tasks buffer quietly and flush in definition order as they finish, so you get live feedback without sacrificing deterministic output ordering. #8164 -
npm backend performance —
npm viewis now called only once per package lookup instead of multiple times, speeding up npm-based tool resolution. Thanks @risu729! #8181
Bug Fixes
- Recursive shim execution on Windows —
mise execnow strips the shims directory from PATH during executable lookup, preventing infinite recursion when shims call back intomise x. #8189 - PATH reordering after activation —
hook-envnow preserves any PATH reordering done aftermise activate(e.g., by~/.zlogin), instead of silently reverting to the original order. #8190 - Cross-platform lockfile resolution — The aqua backend now correctly resolves lockfile artifacts for the target platform instead of leaking host-specific overrides into
mise lock --platform. Thanks @mackwic! #8183 - Version alias lockfile lookup — Version aliases (like
lts) are now resolved before lockfile lookup, so locked versions are matched correctly. #8194 - Task source freshness checks — Freshness checks now work correctly with dynamic task directories. Thanks @rooperuu! #8169
- Global tasks in monorepos — Global tasks are now properly resolved when running from a monorepo root. #8192
- Wildcard glob matching —
test:*no longer incorrectly matches the parenttesttask. #8165 - task_config.includes paths — Include paths in task config are now resolved relative to the config root, not the working directory. #8193
- Upgrade safety —
mise upgradenow skips untrusted tracked configs instead of failing. #8195 - helm-diff registry entry — Fixed the archive binary name for helm-diff. Thanks @jean-humann! #8173
New Contributors
Welcome @jean-humann, @mackwic, and @rooperuu!
📦 Aqua Registry Updates
New Packages (2)
v2026.2.14
A feature-focused release adding vfox plugin env redaction, Deno devEngines support, and a new Rust default_host setting.
Highlights
-
Vfox env var redaction — Vfox plugins can now request that specific environment variables be redacted from logs and debug output by returning a
redactfield inMiseEnvResult. Useful for plugins that inject secrets or tokens. #8166 -
Deno devEngines.runtime support — Mise now reads the
devEngines.runtimefield frompackage.jsonto auto-detect the desired Deno version, matching the same convention already supported for Node. Thanks @risu729! #8144 -
default_hostsetting for Rust — A newrust.default_hostsetting lets you override the Rust target triple used during installation, useful for cross-compilation setups. Thanks @aacebedo! #8154 -
Aqua
github_contentpackage support — The aqua backend now supports packages hosted via GitHub content downloads (not just releases). Thanks @risu729! #8147
Bug Fixes
mise editwhitespace — TOML values edited viamise editno longer retain extra formatting whitespace. #8162--lockedfor python/ubi — The--lockedflag now works correctly with python and ubi backends. #8163- npm update notifier — The npm update notifier is now suppressed during
npm install, preventing spurious output. Thanks @risu729! #8152 - Asset matcher vsix penalty —
.vsixfiles are now deprioritized in asset matching, preventing incorrect downloads. Thanks @risu729! #8151 - JSON schema updates — Added missing
task_templates,extends, andtimeoutfields to the mise.json schema. Thanks @risu729! #8145
New Contributors
Welcome @joaommartins! #8133
Note: This release has no attached binary assets. The v2026.2.14 tag was created successfully but the GitHub Actions workflow that publishes release artifacts did not trigger for the tag push. The binaries for this version are functionally identical to v2026.2.15 minus the additional fixes in that release. Use v2026.2.15 instead.
v2026.2.13: Fix GitHub attestation verification failures
This release partially mitigates GitHub attestation verification failures that were causing tool installations to fail (e.g., gh, and other aqua-backed tools with attestations enabled). See #8142 for details.
What happened
GitHub silently changed their attestations API to externalize bundle storage to Azure Blob Storage (tmaproduction.blob.core.windows.net) using Snappy compression, rather than returning bundles inline as JSON. The gh CLI had already been updated to handle this (cli/cli#10185), but third-party tools like mise were not yet aware of the new format, causing "error decoding response body" failures.
What this release does
Bumps sigstore-verification to 0.2, which splits the reqwest dependency version from mise's (0.13 vs 0.12). This avoids Cargo feature unification that was causing mise's gzip feature to be applied to attestation requests, interfering with the Snappy-compressed responses.
Note: A full fix with proper Snappy decompression support and auth token scoping landed in sigstore-verification v0.2.1 (#22, #23) — expect a follow-up mise release with that bump.
If you are still hitting issues, set settings.aqua.github_attestations = false as a workaround.
Dependency Updates
- Bumped
sigstore-verificationto 0.2 (e8897c9)
📦 Aqua Registry Updates
New Packages (1)
Updated Packages (1)
v2026.2.12
A small release adding a new Java configuration option.
Highlights
java.shorthand_vendorsetting — A new setting that lets you configure which vendor is used when specifying shorthand Java versions (e.g.,21instead oftemurin-21). Thanks @roele! #8134
Note: This release has no attached binary assets. The v2026.2.12 tag was created but the GitHub Actions workflow that publishes release artifacts did not trigger for the tag push. Use v2026.2.13 or later instead.
v2026.2.11: Templates Level Up
A small release with a nice quality-of-life improvement for tera template users and a bug fix for file watching.
Highlights
- Array access for multi-version tools in tera templates — If you have multiple versions of a tool installed, you can now access them individually in tera templates via
tools.<name>[0].path,tools.<name>[1].path, etc. Single-version tools continue to work as before withtools.<name>.path. #8129
Bug Fixes
- hook-env now watches files used in tera templates — Files referenced by template functions like
read_file(),hash_file(),file_size(), andlast_modified()are now properly tracked byhook-env. Previously, changes to these files wouldn't trigger an environment refresh until you changed directories. #8122
New Tools
- mutagen — thanks @tony-sol! #8125
- communique #8126
v2026.2.10: Shims, Stdin, and Smarter Offline
This release brings several quality-of-life features alongside a solid round of bug fixes.
Highlights
-
Shims as PATH fallback during activation — When
not_found_auto_installis enabled (the default), mise now adds the shims directory to your PATH as a fallback. This fixes a subtle issue where subshells or child processes could miss uninstalled tools or pick up the wrong system version instead of the mise-managed one. Thanks @ctaintor for this contribution! #8106 -
toolsvariable in Tera templates — You can now reference{{ tools.node.version }}and{{ tools.node.path }}directly in env templates and task templates (withtools = true), eliminating the need forexec(command='node --version')workarounds. #8108 — Template docs -
mise set --stdinfor multiline values — Need to set an SSH key, certificate, or other multiline value as an environment variable?mise set --stdin MY_KEYnow reads from stdin until EOF. #8110
Bug Fixes
MISE_OFFLINEnow works correctly — Previously, offline mode could hang or error out instead of gracefully falling back to local data. This is now fixed, andoffline/prefer_offlineare proper settings configurable inmise.toml. #8109- Upgrade symlink cleanup — Fixed an issue where
mise upgradecould leave behind invalid symlinks when uninstalling old versions, thanks @roele. #8099 #8101 - Conda dependency resolution — Improved patchelf handling and dependency version pinning for complex conda packages on Linux. #8087
- SLSA provenance for Docker Buildx — Tools like
github:docker/buildxthat ship in-toto statements without sigstore signatures no longer fail verification, thanks @gerhard. #8094 - Vfox plugin auto-installation — Fixed a clean-setup failure where vfox-backed env modules would error with "Plugin directory not found" before the plugin was installed, thanks @pose. #8035
- GitHub
latestversion prefix — Thevprefix is no longer incorrectly added when resolving "latest" for GitHub release backends. #8105 - GitLab tool options — Tool options from config are now correctly resolved for aliased GitLab tools. #8084
- Flutter version resolution — Fixed version resolution by using
version_expr. #8081 - Tuist on Linux — Registry now includes Linux support for tuist, thanks @fortmarek. #8102
Registry
- Added conda backends for mysql, ffmpeg, ghc, vim, and several other previously asdf-only tools. #8080 #8083
- Added podman-tui, thanks @tony-sol. #8098
New Contributors
Welcome @ctaintor, @rileychh, @fortmarek, @pose, and @gerhard — thanks for your first contributions!
📦 Aqua Registry Updates
New Packages (2)
Updated Packages (1)
v2026.2.9: Ruby Plays Nice with Legacy Linux
This release brings a quality-of-life improvement for Ruby users on older Linux distributions, plus a couple of important bug fixes.
Highlights
Automatic Ruby variant selection for older glibc systems (#8069)
If you're running Linux with glibc older than 2.35 (common on RHEL 7, Amazon Linux 2, CentOS 7, or older Debian/Ubuntu versions), mise will now automatically download the no-YJIT precompiled Ruby variant instead of failing with cryptic errors. This means precompiled Ruby "just works" on a much wider range of Linux systems without any manual configuration. Systems with glibc 2.35+ (Ubuntu 22.04+, Debian 12+, Fedora 36+) continue to get the standard YJIT-enabled builds as before.
Bug Fixes
-
Windows shim updates with self-update (#8075) —
mise self-updateon Windows now properly updatesmise-shim.exealongsidemise.exe. Previously, users had to manually download the shim from GitHub releases after updating. -
Fixed
cargo install mise(#8077) — Bumped thexxdependency to 2.5 to fix an issue where Cargo was selecting an incompatible older version, causing installation failures. Thanks @erickt for the fix and welcome to mise!
Documentation
- Ruby precompiled binaries are no longer marked as experimental (#8073) — they're stable and ready for production use.
📦 Aqua Registry Updates
Updated Packages (1)
v2026.2.8: Hooks Get Their Act Together
This release focuses on hooks—fixing 12 community-reported issues that were making them unreliable. There are also some nice quality-of-life improvements for Node.js and Ruby users.
Highlights
Hooks overhaul — A comprehensive fix for the hooks system addressing a dozen issues reported by the community. Global hooks now actually work, hook execution order is corrected (leave fires before enter), infinite loops in fish shell are fixed, and postinstall hooks can now find all installed tools. #8058
Node version detection from package.json — mise now reads tool versions directly from package.json using the devEngines and packageManager fields. This means your Node, Bun, pnpm, yarn, and npm versions can be auto-detected without a separate .tool-versions or mise.toml file. Semver ranges are simplified automatically (>=18.0.0 → 18). #8059
Precompiled Ruby goes stable — You can now use precompiled Ruby binaries by setting ruby.compile=false without needing experimental=true. This will become the default in 2026.8.0. If you haven't tried it, precompiled Ruby installs in seconds instead of minutes. #8052
New Features
--dry-run-codeflag — Added toinstall,upgrade,prune,uninstall, andusecommands. Behaves like--dry-runbut exits with code 1 when there's work to do, enabling patterns likeif ! mise install --dry-run-code -q; then mise install; fi#8063
Bug Fixes
- MISE_ARCH override — The bun and erlang plugins now respect
MISE_ARCHat runtime, which is useful for Windows ARM64 users running x64 binaries under emulation #8062 - key=value format —
mise settings set,mise settings add,mise config set, andmise shell-alias setnow acceptkey=valueas a single argument #8053
Registry
Dependencies
- Upgraded to TOML 1.1 support via toml 0.9 and toml_edit 0.24 #8057