A patch release that adds a global libc preference and pre-release opt-in for github:/aqua: backends, alongside fixes for Node musl downloads, read-only system installs, and mise prune network hangs.
Added
-
(backend) Per-tool
prerelease = trueopt-in for thegithub:andaqua:backends (#9329) by @jakedgy. When set, GitHub releases flaggedprerelease: trueshow up inmise ls-remote,latestresolves against the full list including pre-releases, and fuzzy queries like1.2can match pre-release tags. Default behavior is unchanged; draft releases are still excluded.[tools] "github:myorg/mytool" = { version = "latest", prerelease = true } "aqua:owner/tool" = { version = "latest", prerelease = true }
-
(backend) Global
libcsetting for selecting Linux precompiled binary variants (#9404) by @jdx. Acceptsmusl,glibc, orgnuand threads throughPlatform::current()/PlatformTargetso generic GitHub asset matching, aqua registry replacements (e.g.unknown-linux-gnu↔unknown-linux-musl), Bun, Python precompiled builds, Node, and vfoxenvTypeall honor the preference.export MISE_LIBC=musl
Fixed
-
(install) Stop rewriting healthy runtime symlinks (#9410) by @jdx. The rebuild path was unconditionally
remove_all+ recreating everylatest -> X.Y.Zsymlink, which became a hard failure under the common Docker pattern where root populates/usr/local/share/mise/installs/at build time and a non-root user runsmise installat runtime. Healthy symlinks now take a no-op path; the read-only system dir is no longer touched. If a write is genuinely required and can't happen, the install fails loudly instead of silently leaving a stalelatest. -
(node) Route musl tarball URLs to
unofficial-builds.nodejs.org(#9409) by @jdx. After #9404 Node started appending-muslto filenames but kept routing throughnodejs.org/dist/(which doesn't host them), causing 404s and lockfiles where the URL had a-muslsuffix while the checksum was still pinned to the glibc tarball. The tarball URL and matchingSHASUMS256.txtnow come from the same host, and a customnode.mirror_urlstill passes through unchanged. Lockfile merging is also hardened to drop stalechecksum/size/url_apiwhen URLs disagree. -
(prune) Skip remote version resolution for tracked configs (#9406) by @jdx.
mise prunewas hitting npm, the Go proxy, and the GitHub API to resolve tracked-config tool versions, which could hang on slow or failing registries. Since prune only protects installed versions from deletion, anofflineflag is now threaded throughResolveOptionsfor prune.mise upgradeis unchanged and still queries fresh remote data. Closes #9405. -
(backend) Allow unresolved
latestopt-in (#9401) by @jdx.latestnow falls back to an unresolved selector only when a backend's unfiltered remote version list is empty and the backend opts in viaunresolved_latest_version().pipxopts in for git-backed requests; backends that require concrete versions continue to fail rather than create literallatest/installs. Ifminimum_release_agefilters all candidates out, mise still reports no matching version. -
(schema) Allow array values in tool
additionalProperties(#9400) by @JP-Ellis. Configs likerust = { version = "1.77", components = ["rustfmt", "clippy"] }are no longer flagged as invalid by linters such as tombi.
Registry
New Contributors
Full Changelog: v2026.4.22...v2026.4.23