mise v2026.10.15:默认 24 小时冷却覆盖所有后端,pin 最新版会解析成 no versions found
项目地址:https://github.com/jdx/mise
这个版本把原本只作用于「能报发布日期」那批后端的 24 小时 minimum_release_age 冷却,扩展到了全部后端。对 CI 里习惯 pin 最新版的人来说,这是最直接的破坏点:某个工具当前唯一的版本发布不到 24 小时,解析结果就是 no versions found。
冷却扩到所有后端
之前内置的 24h 冷却只覆盖 aqua、cargo、core、github、npm、pypi 等会上报发布日期的后端;asdf、vfox、conda、dotnet、http:、s3: 完全没有 cutoff。现在每个后端都受冷却约束,行为与 aqua、github 工具保持一致。
三种处理方式:
- 单个工具豁免:把它加进
minimum_release_age_excludes。 - 整体关闭:
minimum_release_age = "0s"。 - 只影响列表来源的选择(见下一节):
MISE_USE_VERSIONS_HOST=0。
同时,配套日期上报的后端变多了,冷却才真正「拦得住」新版本:
- conda 取 channel 的最早 index 时间戳。
- aqua 中从 git tag 取版本的包(
version_source: github_tag,如aws/aws-cli、docker/cli、cockroachdb/cockroach)现在有日期。 - dotnet 用 Microsoft 的 releases index;deno、erlang 用各自的 GitHub releases。
- 每个 python 版本都有日期;更多 ruby 版本有日期(ruby-lang.org、JRuby 用 Maven Central、TruffleRuby 用 GitHub);Rust 的 stable / beta / nightly channel 也有日期。显式指定过去的 cutoff 时,
rust@stable会解析到「足够旧的最新 stable」,beta/nightly 解析到 cutoff 之前的带日期构建。 - dart、flutter、nim、julia、nomad-pack、sentinel、tfc-agent、android-cli、cursor-agent、twg 这些 registry 工具开始上报日期。
拿不到发布日期的版本会打警告
日期未知的版本仍然放行,但 mise install、mise upgrade、mise use 会打印一次点名该版本的警告:
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)
自己写死的精确 pin 不触发;mise env、mise ls、mise outdated、mise ls-remote 从不打印。
版本列表默认走 mise-versions 主机
npm:、pipx:、cargo:、gem:、go:、dotnet:、spm: 以及带 version_list_url 的 http/s3 工具,现在和其他 registry 工具一样从 mise-versions 主机列版本,不再直接访问各自源。
有源重定向时仍直连源,覆盖场景包括:自定义 npm registry 或 npm.shell_out、pypi.registry_url、非默认 GOPROXY、cargo.registry_name、自定义 gem source、dotnet.registry_url、S3 endpoint 覆盖,以及本地 listing 选项。conda 始终从自己的 channel 列。
主机缓存的 TTL 现在跟随工具的 minimum_release_age。要让所有工具都回源列版本,设 MISE_USE_VERSIONS_HOST=0。
模板函数读结构化文件
read_json()、read_yaml()、read_toml() 解析文件后供模板取值,省掉把 package.json 或 Pulumi.yaml 里的版本手抄进 mise.toml:
[tools]
node = "{{ read_json(path='package.json')['volta']['node'] }}"
pulumi = "{{ read_yaml(path='Pulumi.yaml')['requiredPulumiVersion'] }}"
相对路径按配置文件所在目录解析。缺 key 会报错,除非加 | default(value="...")。和 read_file() 一样,这些函数要求配置是 trusted config,在 safe mode、.miserc.toml、OCI dotfile 模板中不可用。
dotnet@lts 与 dotnet@sts
dotnet@lts、dotnet@sts 按 Microsoft 的 release index 解析到当前 LTS 或 STS channel 里的最新 SDK,跳过 preview、go-live 和已 EOL 的 channel。你在 [tool_alias.dotnet.versions] 里定义的 lts 别名仍然优先。只装 runtime 的场景仍需精确版本号。
Windows 的 PowerShell 安装器
每个 release 会发布 install.ps1,并由 mise.run 的 /powershell 和 /pwsh 提供:
irm https://mise.run/pwsh | iex
支持 PowerShell 5.1+,不需要管理员权限。默认安装「至少 24 小时前」的最新 release,设置了 MISE_VERSION 则装指定版本;下载内容用 GitHub Releases 的 SHASUMS256.txt 校验。mise.exe 和 mise-shim.exe 落到 ~\.local\bin,该目录会被加进用户 Path。重复执行即为升级。可用选项:MISE_INSTALL_PATH、MISE_INSTALL_MODIFY_PATH=0、MISE_INSTALL_SHIMS_PATH=1、MISE_INSTALL_FROM_GITHUB=1。
dotfiles:真实符号链接与剪枝
dotfiles.windows_symlinks 默认 false。开启后 symlink 和 symlink-each 在 Windows 上创建真实文件符号链接;创建失败时 apply 直接报错,而不是静默退化成复制。前提是 Windows 开发者模式或提权 shell。把该设置重新关掉后,对仍持有链接的条目执行 mise dot unapply 需要加 --force。
[settings.dotfiles]
windows_symlinks = true
mise bootstrap --prune-dotfiles 会删除已不再部署的 dotfiles,等价于 mise dot apply --prune,所以 mise bootstrap --upgrade --prune-dotfiles 一次跑完。剪枝发生在 dotfiles 阶段末尾,遵守 --dry-run、--yes 和 --skip dotfiles;你手动改过的副本会保留。
其他新增
http:工具可用version_date_expr从version_list_url的响应里映射发布日期;version_date_url换一个 URL 读日期,version_date_next_expr跟进分页列表(仅同 host)。日期支持 RFC 3339、YYYY-MM-DD和 HTTP date。- vfox 插件的
Available或BackendListVersionshook 可为每个版本返回created_at(RFC 3339),纯版本字符串仍然可用。 mise tasks -a是mise tasks --all的短别名。
修复
mise fmt不再破坏多行内联表(TOML 1.1):以前会把注释从表里拽出来、丢掉缩进,现在原样保留。- 某个任务的
dir模板渲染失败时,其他任务的命令仍可执行;此前所有命令都会失败,包括mise tasks validate。现在mise tasks validate把出错任务标记为invalid-directory-template,只有运行该任务才失败。 - aqua 工具能在 macOS universal 归档里找到二进制(如 fastfetch 2.70.0)。
npm:中由allow_builds批准的 lifecycle script,在~/.npmrc设了ignore-scripts=true时也会执行。mise lock在 aube 配置指定了其他默认 lockfile(如pnpm-lock.yaml)时不再失败。- mise 数据目录路径含
..时(例如本地化环境),.7z归档可正常解压。 - Windows release 里的
mise-shim.exe保留版本标签,mise doctor和mise reshim --force不再报它过期;更新后执行一次mise reshim --force即可消除警告。 - Windows 上
symlink-each的提示和 dry-run 预览改为「已复制」,不再说成符号链接。 - 配置了
RUSTUP_DIST_SERVER镜像且 GitHub 不可达时,mise 能列出 stable/beta/nightly channel,rust@stable可走镜像安装。 - Windows 上
http:安装大归档时,杀毒软件扫描解压文件导致的 "Access is denied" 不再直接失败,最终移动最多重试约一分钟。
文档侧新增了 mise.toml playground(带 schema 的编辑器,支持 hover 帮助、补全和错误检查,配置可分享链接);mise.toml 参考改成按主题分组的可搜索键浏览器,几乎所有键都有描述,也会出现在 mise config explain 里。