github jdx/mise v2026.10.15
v2026.10.15: Default minimum_release_age covers every backend, plus a PowerShell installer

4 hours ago

The default 24-hour minimum_release_age now applies to every backend. Many more backends report release dates, so the cooldown can actually hold new versions back, and mise warns when it installs a version it couldn't date. This release also adds a PowerShell installer for Windows, read_json/read_yaml/read_toml template functions, dotnet@lts/dotnet@sts, and new dotfiles options.

Changed

  • The default minimum_release_age applies to every backend. The built-in 24h cooldown used to cover only backends that reported release dates (aqua, cargo, core, github, npm, pypi and others). asdf, vfox, conda, dotnet, http: and s3: tools had no cutoff at all. Now every backend gets the cooldown. A tool whose only version is less than 24h old now resolves to "no versions found", as aqua and github tools already did. To opt a tool out, add it to minimum_release_age_excludes. To turn the cooldown off, set minimum_release_age = "0s". #14701 (@jdx)

  • mise warns when it can't check a version's release date. A version with no known date still passes the cutoff, but mise install, mise upgrade and mise use now print a one-time warning naming the version. Exact pins you wrote yourself don't trigger it. mise env, mise ls, mise outdated and mise ls-remote never print it. #14694 (@jdx)

    WARN  asdf:tiny@3.1.0 has no release date, so the ... cutoff cannot be checked and it is allowed (exclude it with minimum_release_age_excludes to silence this)
    
  • More backends report release dates, so the cooldown applies to them:

    • conda versions use the channel's earliest index timestamp. #14693
    • aqua packages that take versions from git tags (version_source: github_tag, such as aws/aws-cli, docker/cli and cockroachdb/cockroach) are now dated. #14691
    • dotnet dates come from Microsoft's releases index. deno and erlang dates come from their GitHub releases. #14692
    • Every python version now has a date, and so do many more ruby versions (from ruby-lang.org, Maven Central for JRuby, and GitHub for TruffleRuby). Rust's stable, beta and nightly channels are dated too. With an explicit past cutoff, rust@stable resolves to the newest stable release that is old enough, and beta/nightly resolve to a dated build from before the cutoff. #14697
    • The dart, flutter, nim, julia, nomad-pack, sentinel, tfc-agent, android-cli, cursor-agent and twg registry tools now report dates. #14698

    All by @jdx.

  • Version lists for more backends come from the mise-versions host. npm:, pipx:, cargo:, gem:, go:, dotnet: and spm: tools now list versions from mise-versions, like other registry tools, instead of going to their own source. So do http/s3 tools with a version_list_url. If you redirect a source, mise still lists from that source directly. That covers a custom npm registry or npm.shell_out, pypi.registry_url, a non-default GOPROXY, cargo.registry_name, a custom gem source, dotnet.registry_url, S3 endpoint overrides, and local listing options. conda always lists from its channel. The host cache TTL now follows the tool's minimum_release_age. To list everything from the source, set MISE_USE_VERSIONS_HOST=0. #14700 (@jdx)

Added

  • PowerShell installer for Windows. It's published with each release as install.ps1 and served from mise.run at /powershell and /pwsh, so you pipe it into iex with irm. It works on PowerShell 5.1+ and doesn't need admin rights. It installs the newest release that is at least 24h old, or MISE_VERSION if set. The download is verified against SHASUMS256.txt from GitHub Releases. mise.exe and mise-shim.exe go into ~\.local\bin, and that directory is added to your user Path. Re-running it upgrades an existing install. Options include MISE_INSTALL_PATH, MISE_INSTALL_MODIFY_PATH=0, MISE_INSTALL_SHIMS_PATH=1 and MISE_INSTALL_FROM_GITHUB=1. See the "Installing mise" docs for the full command. #14660 (@jdx, @lhs-12)

  • read_json(), read_yaml() and read_toml() template functions parse a file so a template can use a value from it. This saves copying a version from package.json or Pulumi.yaml into mise.toml by hand. Relative paths resolve from the config file's directory. A missing key is an error unless you add | default(value="..."). Like read_file(), these functions need a trusted config, and they don't work in safe mode, .miserc.toml or OCI dotfile templates. #14705 (@jdx, @edahlseng)

    [tools]
    node = "{{ read_json(path='package.json')['volta']['node'] }}"
    pulumi = "{{ read_yaml(path='Pulumi.yaml')['requiredPulumiVersion'] }}"
  • dotnet@lts and dotnet@sts resolve to the newest SDK in the current LTS or STS channel, using Microsoft's release index. Preview, go-live and end-of-life channels are skipped. A lts alias you define in [tool_alias.dotnet.versions] still takes precedence. Runtime-only installs still need an exact version. #14683 (@jdx)

  • mise bootstrap --prune-dotfiles removes dotfiles that are no longer deployed, the same way mise dot apply --prune does, so mise bootstrap --upgrade --prune-dotfiles handles everything in one run. The prune runs at the end of the dotfiles phase. It respects --dry-run, --yes and --skip dotfiles. Copies you edited are left in place. #14681 (@jdx, @thernstig)

  • dotfiles.windows_symlinks (default false) makes symlink and symlink-each create real file symlinks on Windows. With it on, apply fails if Windows refuses to create a link, instead of silently copying. To create symlinks, Windows needs Developer Mode or an elevated shell. If you turn the setting back off, mise dot unapply needs --force on entries that still hold links. #14682 (@jdx)

    [settings.dotfiles]
    windows_symlinks = true
  • http: tools can report release dates with the new version_date_expr option. It maps versions to dates from the version_list_url response. Use version_date_url to read the dates from a different URL, and version_date_next_expr to follow paged listings (same host only). Dates can be RFC 3339, YYYY-MM-DD or HTTP dates. #14696 (@jdx)

  • vfox plugins can report release dates. An Available or BackendListVersions hook can return created_at (RFC 3339) for each version. Plain version strings still work. #14695 (@jdx)

  • mise tasks -a is a short alias for mise tasks --all. #14674 (@williamsjokvist)

Fixed

  • mise fmt no longer breaks multiline inline tables (TOML 1.1). It used to pull comments out of the table and drop indentation. Now it leaves these tables exactly as written. #14670 (@jdx, @ponko2)
  • If one task's dir template fails to render, other task commands keep working. Before, every command failed, including mise tasks validate. Now mise tasks validate reports the broken task as invalid-directory-template, and only running that task fails. #14680 (@jdx)
  • aqua tools now find their binaries in macOS universal archives, such as fastfetch 2.70.0. #14665 (@jdx)
  • npm: lifecycle scripts approved by allow_builds now run even when ~/.npmrc sets ignore-scripts=true. #14661 (@jdx)
  • npm: mise lock no longer fails when your aube config sets a different default lockfile, such as pnpm-lock.yaml. #14659 (@jdx)
  • .7z tool archives now extract when mise's data directory path contains .., for example in a localized mise setup. #14657 (@jdx, @sevenc-nanashi)
  • The mise-shim.exe in the Windows release now keeps its version tag, so mise doctor and mise reshim --force stop reporting it as outdated. The warning goes away after you update and run mise reshim --force. #14656 (@jdx)
  • On Windows, symlink-each dotfiles messages and dry-run previews now say the files were copied rather than symlinked. #14654 (@jdx, @lhs-12)
  • Rust: with a RUSTUP_DIST_SERVER mirror configured and GitHub unreachable, mise now lists the stable, beta and nightly channels instead of failing, so rust@stable installs through the mirror. #14662 (@jdx)
  • On Windows, http: installs of large archives no longer fail with "Access is denied" while antivirus is scanning the extracted files. mise now retries the final move for up to about a minute. #14703 (@jdx)

Documentation

  • New mise.toml playground: a schema-aware editor with hover help, completion and error checking. You can share a config as a link. Every mise.toml example in the docs now shows hover help on its keys. #14673, #14686 (@jdx)
  • The mise.toml reference is now a searchable key explorer grouped by topic. Each key shows its type, default and a real example. Nearly every key now has a description, and these also appear in mise config explain. #14687, #14690, #14688 (@jdx)
  • The fnox secrets page now covers setup, CI and migration. The dotnet page explains how private feeds authenticate. #14675, #14679 (@jdx)

Full Changelog: v2026.10.14...v2026.10.15

💚 Sponsor mise

mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.

If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.

Don't miss a new mise release

NewReleases is sending notifications on new releases.