Repository navigation
chore(deps): update dependency jdx/mise to v2026 - #220
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
July 30, 2026 03:03
b069281 to
4210d96
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
August 5, 2026 03:26
7255dd3 to
18a73a9
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
3 times, most recently
from
August 12, 2026 20:16
2752ba1 to
661a5bf
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
August 20, 2026 23:10
6445a85 to
c5325ef
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
August 26, 2026 03:48
9dd559c to
fac6f2e
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
September 3, 2026 00:28
61548e9 to
844f10e
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
September 11, 2026 04:03
b504efd to
25c7628
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
3 times, most recently
from
September 20, 2026 15:11
e80a868 to
39250db
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
September 30, 2026 23:27
592af37 to
fb21bcb
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
October 9, 2026 02:53
f1ad039 to
6922c36
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
October 15, 2026 12:37
0aa2b64 to
c858e85
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
7 times, most recently
from
October 23, 2026 18:04
97dbd7b to
51e9bec
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
from
October 24, 2026 22:11
51e9bec to
6cb4b31
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
Test plan: CI should pass with updated dependencies. No review required: this is an automated dependency update PR.
Release Notes
jdx/mise
v2026.10.19: : Security hardening across trust, installs and provenance; lockfiles now rebuilt completely by defaultCompare Source
Most of this release closes ways an untrusted repository, download host or mirror could run code, leak credentials or get around verification. Some of these fixes make mise stricter, so check Breaking Changes before you upgrade. Also in this release:
lockfile_mode = "generate"is now the default,mise lspsends semantic highlighting, and there is a new{{ mise_config_dir }}template variable.Highlights
Added
{{ mise_config_dir }}template variable. It resolves to the config directory mise itself uses:MISE_CONFIG_DIR, or elsexdg_config_home+/mise. It is available whereverxdg_config_homeis: config templates,.miserc.tomland settings paths. This is useful for dotfiles variants that link intoconf.d. #14886 (@jdx, @ponko2)Semantic highlighting in
mise lsp. Editors can now color task names, tools, env vars,[vars]keys,_.directives,{{ }}/{% %}/{# #}template delimiters and deprecated keys inmise.toml. To turn it off, pass{"semanticTokens": false}ininitializationOptions. #14918 (@jdx)extract_max_ratiosetting (global only). It caps how far an archive may expand during extraction. See Security below. #14915 (@jdx)github.enterprise_hostssetting (global only,MISE_GITHUB_ENTERPRISE_HOSTS). It lists the GitHub Enterprise hosts that receive the GitHub token on/api/v3URLs over https. #14913 (@jdx)New vfox attestation fields
slsa_source_repositoryandslsa_source_tag. Plugins can use them to pin the repository and tag that SLSA provenance must come from. #14904, #14924 (@jdx)Changed
lockfile_mode = "generate"is now the default. Installs now rebuildmise.lockfrom the current requests, reuse unchanged entries and also lock the other platforms. A lockfile committed from one machine therefore no longer failsmise install --lockedon another platform because of missing entries. Neither mode creates a lockfile (usemise lockorlockfile = true), and the lockfile format is unchanged. To keep the previous behavior, setlockfile_mode = "merge"orMISE_LOCKFILE_MODE=merge. #14893 (@jdx)Security
Trust and safe mode
Several actions no longer count as consent to trust a project: printing
mise run --help/mise watch --help, running a shim, a hook startingmise run, an MCP call, ormise set/unset/tasks addsaving config. Config writes now ask before they trust an untrusted sibling config. A task counts as trusted only if every config that adds to it is trusted. The MCP server refuses untrusted file tasks, task names that look like file paths, and inline tool options. #14903 (@jdx)Trust now stays with the files you trusted. A forged git worktree, a symlink to your global config, a clone named
.mise, or a project.miserc.tomlcan no longer borrow trust or hide global config. In paranoid mode, idiomatic version files, each local task file and project-named aqua registries need trust of their own. Remote git includes pinned to a commit SHA must check out exactly that commit. #14902 (@jdx)Safe mode (
MISE_SAFE=1) now also blocks:[deps],path:versions and spminstall_command;envand filesystem helpers in project templates.In every mode, a project
.miserc.tomlgets a restricted, size-limited template language, andbin_pathmust stay inside the tool's install directory. #14900 (@jdx)Pressing TAB no longer runs untrusted task code. The dynamic completers (
complete run=,complete delegate=,choices run=,mount) only run for trusted config. mise's own completers quote typed words, and control characters are removed from candidates. Quoting for fish and PowerShell is also fixed. #14898 (@jdx)Hook commands are now rendered once, when they load. Before, a directory name containing
{{ exec(...) }}could run code from acdhook. A project'senter,leaveandwatch_fileshooks now start in the project root.mise use,mise upgrade --bumpand every other writer refuse to write a version containing template syntax, and a rewritten option keeps its{{ env.X }}template instead of the rendered secret. #14897 (@jdx)cd-ing into a hostile repository can no longer hang or crashhook-envor make mise print files from outside the repo. Causes this covers include configs linked to devices, symlink mazes in task directories, non-UTF-8 paths, oversized files, glob characters in paths, and version files that link to another file. #14916 (@jdx)Install verification
A checksum pinned in
mise.lockis now enforced for erlang, npm, spm and http instead of being replaced or skipped. If Node'sSHASUMS256.txt.sigis missing, the install fails. bun and deno check the publisher's sha256 when there is no lock entry. A locked node or spm artifact that returns 404 no longer silently falls back to a source build. #14899 (@jdx)SLSA, attestation and signed-checksum checks now fail closed:
slsa_signer_*pins require provenance;mise lockruns the cosign, minisign and SLSA checks that aqua recipes declare;attestations_since.#14908 (@jdx)
The SLSA signing run must come from the workflow's repository or the tool's own repository. Attestations must name the requested repository. Public-good bundles without a Rekor entry are rejected. #14904 (@jdx)
SLSA provenance built from a different tag is now rejected, so a mirror can't serve an older release's genuine artifact and provenance as a newer version. #14924 (@jdx)
packslip signer pins are checked by repository ID, including
workflowpins. Backdated GitLabreleased_atdates and bundles with no transparency-log time can no longer get aroundminimum_release_age. #14912 (@jdx)Paths, subprocesses and resource limits
Release asset names must be plain file names. Archives from the github, http, aqua, cargo-binstall, packslip and vfox backends may not contain symlinks that point outside the install directory. #14895 (@jdx)
Resolved versions, plugin names and task stub names are checked before they become paths or URL segments. A remote version containing
.., quotes,$or a leading-now fails as an invalid tool version. #14901 (@jdx)Git lookups, build tools (ruby-build, python-build,
cargo install,gem install) and npm now run outside the project directory, so the repo's.git/configand other project files can't change what they do. Untrusted values are kept out of their command-line arguments. In safe mode, asdfexec-envis refused. #14896 (@jdx)Committed symlinks around lockfiles, tool stubs and the remote task cache can no longer make mise read, write or delete files outside the repo. An untrusted lockfile still pins versions and checksums, but it can no longer switch a tool's backend, add inline options or supply download URLs. #14906 (@jdx)
The task sandbox has fewer escapes:
--allow-writerefuses project symlinks that lead outside the project;--deny-netalso blocks other socket families, io_uring and x32 syscalls;allow_writeblocks all writes instead of turning the sandbox off;/usr/bin/sandbox-exec;#14911 (@jdx)
HTTP response bodies are capped at 128 MiB, and slow bodies are bounded by
http_download_timeout. Downloads are saved exactly as sent. Archive extraction stops once the output exceeds both 256 MiB and 100 times the download size (extract_max_ratio). #14915 (@jdx)Credentials
api_url, not to any host that serves/api/v3. Release caches are keyed by the exact repository. A download that fails its pinned checksum is not kept. A project can no longer mark a taskglobal. In safe mode, remote task files from project config are not fetched. #14913 (@jdx)mise.lock,Refererheaders, logs and error messages. Age keys and Forgejo tokens are redacted inmise doctor,mise settingsandmise tool. Shebang task scripts are readable only by their owner, and multi-line secrets are redacted in task output. #14917 (@jdx)Fixed
uv_venv_autocould fork-bomb the machine when uv probed mise's python shims while creating a venv. mise now skips venv creation when it is started from inside that venv creation. #14927 (@jdx)minimum_release_ageset,mise upgradeno longer downgrades tools that use date versions with leading zeros (for example2026.10.21to2026.08.19). #14923 (@jdx)extendsa task template now use the template'susagespec, so its flags show in-hand are accepted. #14888 (@jdx)mise tasks add --filenow quotes and escapes#MISEheader values. Before,--dirand values containing quotes produced invalid TOML that broke the nextmise run. #14925 (@xucian)mise uninstallcan now remove installs whose directories deny their owner write access, such as read-only0555runtime trees. #14883 (@HengYangDS)pypi:tool with a privategit+ssh://github.com source now lists versions throughgit ls-remoteover SSH when GitHub can't see the repository. #14905 (@jdx, @owpac)Breaking Changes
Most setups need no changes. Check these cases:
mise.lockingeneratemode. To keep the old behavior, setlockfile_mode = "merge".mise set/unset/tasks addin a directory with an untrusted sibling config now ask for trust, or fail without a terminal. A project that has only amise-tasks/directory needsmise trust .before its dynamic task completions work. In paranoid mode, runmise trust <file>once for each existing task file.git worktree repairbefore it shares trust again. A remote include pinned to an annotated tag's object ID must pin the commit SHA instead. Your own~/.miserc.tomlcan no longer ignore the global config..miserc.toml: templates that readenvor use loops or functions other thanarch(),os(),os_family(),libc(),avx2()andnum_cpus()are no longer rendered. Move them to the global.miserc.toml.defaultnow fail to render. Projects that point at a private forge or a netrc-protected server can no longer list versions there..sigfiles, and early releases without one (for example 4.0.0 and 5.12.0), neednode.gpg_verify = false.github:tool that setsslsa_signer_identitybut builds from a branch instead of a tag no longer verifies. A lock entry that has a checksum but no provenance installs on the checksum alone; re-runmise lockor setlocked_verify_provenance.mise packslip forget <tool>.http:tools, aqua packages and remote tasks on/api/v3URLs no longer get the GitHub token automatically. Add the host togithub.enterprise_hostsin global config, or setapi_url.mise lockrefuses URLs whose query has a credential-like parameter. Useheadersor netrc instead. Tools installed under a directory name that contained credentials are reinstalled under a clean name.--deny-write/allow_writesandboxes no longer start on Linux before 6.2. Programs that need io_uring no longer run under--deny-net. To allow writes through a project symlink that points outside the project, name its target instead.extract_max_ratio, or0to turn the check off.enter,leaveandwatch_fileshooks now start in the project root. Use$MISE_PROJECT_ROOTif a hook needs the root explicitly.MISE_OVERRIDE_*_FILENAMESentries are matched as literal file names;.tool-versionsor idiomatic version file that links to a file with a different name is skipped;go.reporesolves from$HOME;OWNER/REPOpassed tobootstrap --adoptthat matches a local path is an error (write./OWNER/REPOfor the local path).New Contributors
Full Changelog: jdx/mise@v2026.10.18...v2026.10.19
💚 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.
v2026.10.18: : mise lsp: a language server for mise.tomlCompare Source
mise now includes a language server,
mise lsp, which gives editors diagnostics, completion, hover, navigation and quick fixes formise.toml. Doctor checks can depend on other checks, andmise dot history purgeerases a tracked file from dotfiles history. This release also fixes many lockfile, prune, Windows and dotfiles issues.Added
mise lsp, a language server for mise config files. It runs over stdin/stdout, so any editor with an LSP client can use it (Neovim, Helix, Emacs, Zed, VS Code, ...). It uses the schema and formatter of the installed mise, so its answers match your version. #14744, #14808, #14811, #14812 (@jdx)dependscycles as errors.depends,depends_post,wait_for,run = [{ task = ... }]andextends, and tool names from the registry under[tools]. Hover shows the description and backends of a tool, or the description and command of a task.env_pathto the key that replaces it. Formatting gives the same output asmise fmt.mise.toml,mise.<env>.toml,conf.d/*.toml, ...) and ignoresCargo.toml,pyproject.tomland other TOML files, so you can attach it to the TOML filetype. Configs are parsed but never rendered, and it makes no network requests, so opening an untrusted file runs nothing. Clients can turn offformatting,hover,completion,definition,referencesorrenamewithinitializationOptions.Doctor checks can depend on other checks. Add
depends(a single name or a list) to a check in[doctor.checks.*]. If a dependency fails, errors, is skipped or is blocked, the dependent check is reported asblocked, and its command and hint are skipped. Ablockedresult does not change the exit code on its own. An unknown dependency name or a cycle is reported as a config error, and then no checks run. #14773 (@jdx)mise dot history purge <path>removes a tracked path from local dotfiles history. Use it after tracking a secret by mistake. Checkpoints that changed only that path are removed. All other checkpoints keep their numeric IDs, messages and dates, sohistory,rollbackandundokeep working. Use--dry-runto preview and--yesto skip the prompt.--backupkeeps the old history underrefs/mise/purge-backup/, and--keep-objectsskips pruning. The command refuses if any version of the path is already reachable from the origin, because mise never force-pushes. #14831 (@jdx)A dotfiles variant's
targetcan be a template, so one shared config can link into locations that differ between machines. Only the varianttargetis rendered. Templates get the standard config context (env,xdg_config_home,config_root, ...), butexec()andvarsare not available. The rendered path must be absolute or start with~/. #14856 (@jdx, @ponko2)mise upgrade --bump --pinwrites resolved versions to config. Requests such aslatestor20become the exact version, for example24.14.0, even if the tool was already up to date. With thepinsetting (MISE_PIN=1), a plainmise upgrade --bumpnow does the same.--dry-runshows what would change. #14791 (@jdx)[bootstrap.hooks]tables acceptrun_windows, as tasks and[hooks]already do. On Windows it is used instead ofrun. A table with onlyrun_windowsdoes nothing on other platforms. #14851 (@jdx)Registry:
goose-agent(aqua:aaif-goose/goose), the Goose AI agent CLI. The installed binary is still namedgoose. #14822 (@kwsantiago)Changed
pinnow also affects a plainmise upgrade --bump. If you havepinenabled, your nextmise upgrade --bumprewrites non-exact requests such as"22"to exact versions such as"22.1.0". Withoutpin, requests keep their precision as before. #14791 (@jdx)mise unuse tool@versiononly prunes the version you named. It used to prune every unused version of the tool. If the named version is kept, mise now explains why, for examplenode@24.20.0 is kept: required by ~/proj/mise.toml.mise unuse nodewithout a version still prunes all unused versions of node. #14863 (@jdx, @Strepto)Fixed
Lockfiles
python = "3.12"),mise use,mise up -l,mise lock pipx:...andmise lock pythonnow keep both that Python and the project's Python inmise.lock. Before, one entry was dropped andmise install --lockedfailed. #14794 (@jdx, @AllDmeat)mise install tool@latestno longer fails with "lockfile contains multiple resolutions" when nested configs pin different versions. The nearest lockfile now decides. #14818 (@jdx).config/mise.toml, the shared lockfile is now written to.config/mise.lockinstead of<root>/mise.lock. #14860 (@jdx, @fxsalazar)mise lockforpipx:andpypi:tools now accepts PyPI simple indexes that respond with a PEP 691+htmlcontent type, such as Azure Artifacts. #14852 (@jdx, @alexanderlinne)Install, upgrade and prune
[hooks].postinstallnow runs with the version that was just installed. Before, duringmise upgradeof a fuzzy request such aslatest, itsPATHpointed at the old version. #14853 (@jdx, @sam9191)mise pruneno longer aborts with "points to an unknown mise Python installation" when a pypi/pipx tool's receipt reaches mise's Python through a minor-version link such aspython/3.14. #14857, #14874 (@jdx, @chancez)MISE_OVERRIDE_TOOL_VERSIONS_FILENAMESset, tracked.tool-versionsfiles are still loaded. Before,mise prunecould remove versions that those projects still used. #14779 (@jdx)java = "latest"now selects the newest installed build when two installed versions differ only after+(for example+7and+101). #14876 (@jdx, @javabrett)gem:installs andbundle installno longer fail whenmiseis not onPATH. This applies to Rubies installed with this release or later. #14850 (@jdx, @fxsalazar)mise outdatedormise upabout skipping a version that is past theminimum_release_agecutoff when that version is already installed. #14835 (@jdx, @alx-xo)Requirementclasses no longer breakmise bootstrap packages apply. mise does not enforce these requirements and logs a warning about them. #14807 (@jdx)mise oci buildimages that includerustnow contain a workingcargoandrustc, withCARGO_HOMEandRUSTUP_HOMEset, so containers no longer download the toolchain again on first use. The build now fails if rust comes from a rustup that mise does not manage. #14854 (@jdx, @eiswind)Network and backends
SSL_CERT_FILEpoints to a missing file). Roots that do load are not changed. #14817 (@jdx).netrchas credentials forgithub.com. The reachability check no longer sends those credentials, which had caused a fallback to the rate-limited API. #14786 (@jdx)github:tools for which mise-versions returned an empty release list (such asgithub:caarlos0/svu) now fall back to paged listing, so their versions are found. #14877 (@jdx)401 Unauthorizederrors when installinggitlab:tools from public projects. #14873 (@jdx, @chung1905)Windows
pipx:tools whose console script names end in.py(for examplepipx:clang-format) now install. #14825 (@jdx)run_windows = []now skips the task on Windows instead of runningrun. #14859 (@jdx)Tasks, bootstrap and generate
mise tasks listnow works as an alias formise tasks ls. If you have a task namedlist, that task still runs. #14878 (@jdx, @mcstafford-git)mise bootstrapno longer fails when a namespaced task such assystem:bootstrapexists but no task is named exactlybootstrap. #14858 (@jdx)mise generate install-script --writeandmise generate task-stubsnow write files that end with a newline. Existing stubs regenerate as before. #14819 (@itochan)curl https://mise.run | shno longer fails when~/.config/curlrcsetswrite-out. #14830 (@jdx)Dotfiles
mode = "track"entry declared in aconfig.<env>.tomlstays tracked on machines that don't select that env. Before, those machines published a removal of the entry. #14815 (@jdx)[dotfile_groups.<name>.entries], so strict validators such as Tombi accept valid entries and report unknown keys. #14810 (@jdx)Other
Performance
trusted_config_pathsafter the cheaper trust rules and resolves each entry at most once per process. This speeds uphook-envwhen entries are on slow mounts such as autofs/homeon macOS. #14875 (@jdx)Documentation
add --no-apply,dot diffandexcludedo. #14829, #14862 (@jdx)New Contributors
Full Changelog: jdx/mise@v2026.10.17...v2026.10.18
💚 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.
v2026.10.17: : Shell names in bootstrap login_shell, templated doctor checks, and a per-plugin vfox cache directoryCompare Source
bootstrap.user.login_shellnow accepts a shell name such asfishinstead of a full path.[doctor.checks]can use templates, and vfox backend plugins get their own cache directory. This release also fixes PATH handling in zsh setups that deduplicate PATH, stale task cache hits, a pipx interpreter mix-up on macOS, and removes trust in the compromised eMudhra CA certificates.It also includes the changes prepared for 2026.10.16, which was tagged but never published: relative and templated
write_targetspaths, version aliases from vfox backend plugins, keyring passwords for private PyPI indexes,vfox-backend:packslip plugin sources, and a change to wherefind_upstarts (see Changed and Upgrading).Added
[bootstrap.user].login_shellaccepts a shell name. A config shared across machines no longer needs to know where each system installs the shell. mise looks up the name when it checks or applies the setting, which happens afterbootstrap.packageshas installed the shell. It searchesPATHfirst (never the mise shims directory), then common package-manager locations:/opt/homebrew/bin,/usr/local/bin,/home/linuxbrew/.linuxbrew/bin,~/.linuxbrew/bin,/usr/binand/bin. If no executable is found,mise bootstrap user applyfails without changing/etc/shellsor the account, andstatusreportsnot installed.mise bootstrap user statusshows the path it found, and--jsonoutput has a newresolvedfield. Absolute paths work as before. #14770 (@jdx)Doctor checks support templates.
run,descriptionandhintin[doctor.checks.*]are rendered with the template context of the config file that declares them, the same way hooks are. A check can now use a value from[vars]instead of hard-coding it.diris not rendered. If a template fails, only that check reportsERRORand the other checks still run. Text that already contains{{or{%in these fields is now parsed as a template. #14771 (@jdx)vfox plugins get
RUNTIME.cacheDirPath. This is a cache directory for each plugin at$MISE_CACHE_DIR/plugins/<plugin-name>. mise creates it before running any hook, and every hook of the plugin sees the same path. UnlikepluginDirPath, it is kept when the plugin is reinstalled.mise cache cleardeletes it, so plugins must handle it being missing. It isnilwhen no cache directory is available. #14776 (@jdx)settings.write_targetsaccepts relative and templated paths. Before, only absolute or~/paths worked, so dotfiles shared between machines with differentMISE_CONFIG_DIRorXDG_CONFIG_HOMEhad to hardcode the config directory. Templates are now rendered, and a relative result is joined to theconfig_rootof the settings file that declares it. For a global file that is$HOME, so the portable spelling uses the file's own directory. The resolved path must still be a global config file that mise loads. If a template fails to render, mise warns, andmise use --globalfails with "must resolve to an absolute path" instead of writing to the default file. #14742 (@jdx)vfox backend plugins can report version aliases.
BackendListVersionscan return analiasestable, so a registry's moving names resolve to real versions. Before,"mise-ghcup:ghc" = "recommended"passed the literal string to the plugin, installed intoinstalls/.../recommended, never followed the tag when it moved, and showedrecommendedinmise lsand the lockfile. Nowghc@recommendedresolves to9.10.3, installs into9.10.3/, and the lockfile records9.10.3. Aliases you define in config still win. They are cached like the version list, and an expired cache still answers offline. Older mise versions ignore thealiasesfield, so plugins can adopt it right away. #14732 (@jdx, @cprecioso)mise lockand version listing work with a PyPI index that uses a keyring. With an index such as Azure Artifacts andartifacts-keyring,mise installworked because uv read the password from its keyring provider, but mise's own requests sent no credentials and failed with401 Unauthorized. Set the newpypi.keyring_provider(disabledby default, orsubprocess; env varMISE_PYPI_KEYRING_PROVIDER) and give the registry URL a username without a password. mise then runskeyring get <url> <username>, as uv does, and sends the result as HTTP Basic credentials when it lists versions and whenmise lockreads a release'srequires-python. The password is never written to the lockfile or the version cache. Thekeyringexecutable must be onPATH. If it is missing or has no entry, mise sends the request without credentials. #14733 (@jdx)vfox-backend:works as a prefix for packslip plugin sources. A vfox backend plugin can be installed from a signed packslip archive, both from the CLI and in[plugins]. Before,mise plugins install vfox-backend:foo 'packslip:owner/repo#1.0.0'failed withpackslip plugin sources require the vfox plugin type. An explicitasdf:orpackage:prefix is still rejected, and the error now says "vfox or vfox-backend". The archive still declaresextensions.mise.plugin = "vfox". #14727 (@jdx)mise plugins install vfox-backend:my-backend 'packslip:your-org/my-backend#1.0.0'mise bootstrap packages listis now an alias forstatus, alongsidels. #14709 (@himkt)Changed
find_upinenv._.filestarts at the config root. Every other relative path in a config resolves against the config root, butfind_upstarted at the current directory. A relativefind_uppath now starts at the config root and walks up through its parents, which suits a monorepo whose root.envapplies to every package. An absolute path starts at its own directory. A global config that wants to search from wherever mise runs can usecwd. Theenv_filesetting still discovers dotenv files up from the current directory and is unchanged. See Upgrading. #14734 (@jdx, @thernstig)allow_buildsapproves only the packages it lists. With the embedded aube installer,allow_builds = ["re2"]also ran the install scripts of every package on aube's bundled trusted-dependencies list, such asdtrace-provider. For a package list, mise now turns that default list off, so only the packages you name build.allow_builds = trueand the default with no option are unchanged. This updates the embedded aube to 2.8.0. #14731 (@jdx)Fixed
exec()in[env]values, and other commands mise runs with the pre-activation environment, can now find commands in a_.pathdirectory that was already onPATHbefore activation, even if the shell deduplicatesPATH(for example zsh withtypeset -U path PATH). #14772 (@jdx)task.source_freshness_hash_contents = true, a task now re-runs when a source file is changed to content of the same size and its old mtime is restored (for example byrsync -a,cp -portouch -r). On Unix, mise now also compares the file's ctime. Cache entries written by older versions are rehashed once. #14778 (@jdx)pipx:installs no longer fail whenaqua:aws/aws-cliis in the toolset. Because macOS filesystems ignore case by default, mise's lookup forpythonmatched aws-cli's executablePythonshared library and passed it to uv as the interpreter. This lookup now requires the exact case. #14769 (@jdx)webpki-root-certs1.0.10,rustls-webpki0.103.16). Builds that use the OS trust store are fixed by OS updates instead. #14781 (@jdx)[bootstrap.compose]project no longer reports drift on every run when a service uses aservice:reference such asnetwork_mode: service:vpn. Compose hashes the reference as written but stamps the container with the hash of the resolvedcontainer:<id>, so the two never matched. mise now pins these references (network_mode,ipc,pid,volumes_from) to the running container before it asks compose for the hash. This needs an explicitfileslist in the project's config. Projects without one hash as before. #14729 (@jdx).ziparchives returned byPreInstall. Before, entries such asbin/npm -> ../lib/node_modules/npm/bin/npm-cli.jsbecame regular files holding the link target, and the tool failed withNo such file or directory. Links that resolve outside the install directory are still rejected. Thehttp:backend and tarballs were not affected. #14730 (@jdx)[daemons.<name>] task = "worker"now finds a file task such as.mise/tasks/worker.sh, asmise run workerdoes. Before, it failed withdaemon srv runs unknown task "worker"unless you wroteworker.sh. #14741 (@jdx)mise self-updateno longer replaces the wingetmise-shim.exelink with a copy. It updates the realmise-shim.exenext to the realmise.exe. Before,mise reshimkept warning that the shim was older than mise. #14737 (@jdx)[dotfiles]entry turned off with onlyenabled = falseno longer printsno recognized operation (block, source, or line), ignoring entryon every command. Other tables with no recognized operation, such as a misspelledline, still warn. #14726 (@jdx, @ponko2)Upgrading
find_upin a global config: a relativefind_upentry inenv._.fileused to search from the current directory. It now searches from the config root, which is~for a global config, so it no longer finds project files. To keep the old behavior, put{{cwd}}/in front of the path.find_upwas added in 2026.10.12.Documentation
permissionsdoes not inherit the group'smode, so it deploys nothing. Removingmodefrom an entry that used to deploy a file leaves that file orphaned, and--prunedeletes it. To deploy a file and set its permissions, use{ mode = "copy", permissions = "0600" }. #14768 (@jdx)New Contributors
Full Changelog: jdx/mise@v2026.10.15...v2026.10.17
💚 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.
v2026.10.15: : Default minimum_release_age covers every backend, plus a PowerShell installerCompare Source
The default 24-hour
minimum_release_agenow 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_tomltemplate functions,dotnet@lts/dotnet@sts, and new dotfiles options.Changed
The default
minimum_release_ageapplies 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:ands3: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 tominimum_release_age_excludes. To turn the cooldown off, setminimum_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 upgradeandmise usenow print a one-time warning naming the version. Exact pins you wrote yourself don't trigger it.mise env,mise ls,mise outdatedandmise ls-remotenever print it. #14694 (@jdx)More backends report release dates, so the cooldown applies to them:
version_source: github_tag, such asaws/aws-cli,docker/cliandcockroachdb/cockroach) are now dated. #14691stable,betaandnightlychannels are dated too. With an explicit past cutoff,rust@stableresolves to the newest stable release that is old enough, andbeta/nightlyresolve to a dated build from before the cutoff. #14697All by @jdx.
Version lists for more backends come from the mise-versions host.
npm:,pipx:,cargo:,gem:,go:,dotnet:andspm:tools now list versions from mise-versions, like other registry tools, instead of going to their own source. So do http/s3 tools with aversion_list_url. If you redirect a source, mise still lists from that source directly. That covers a custom npm registry ornpm.shell_out,pypi.registry_url, a non-defaultGOPROXY,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'sminimum_release_age. To list everything from the source, setMISE_USE_VERSIONS_HOST=0. #14700 (@jdx)Added
PowerShell installer for Windows. It's published with each release as
install.ps1and served from mise.run at/powershelland/pwsh, so you pipe it intoiexwithirm. It works on PowerShell 5.1+ and doesn't need admin rights. It installs the newest release that is at least 24h old, orMISE_VERSIONif set. The download is verified againstSHASUMS256.txtfrom GitHub Releases.mise.exeandmise-shim.exego into~\.local\bin, and that directory is added to your userPath. Re-running it upgrades an existing install. Options includeMISE_INSTALL_PATH,MISE_INSTALL_MODIFY_PATH=0,MISE_INSTALL_SHIMS_PATH=1andMISE_INSTALL_FROM_GITHUB=1. See the "Installing mise" docs for the full command. #14660 (@jdx, @lhs-12)read_json(),read_yaml()andread_toml()template functions parse a file so a template can use a value from it. This saves copying a version frompackage.jsonorPulumi.yamlintomise.tomlby hand. Relative paths resolve from the config file's directory. A missing key is an error unless you add| default(value="..."). Likeread_file(), these functions need a trusted config, and they don't work in safe mode,.miserc.tomlor OCI dotfile templates. #14705 (@jdx, @edahlseng)dotnet@ltsanddotnet@stsresolve 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. Altsalias you define in[tool_alias.dotnet.versions]still takes precedence. Runtime-only installs still need an exact version. #14683 (@jdx)mise bootstrap --prune-dotfilesremoves dotfiles that are no longer deployed, the same waymise dot apply --prunedoes, somise bootstrap --upgrade --prune-dotfileshandles everything in one run. The prune runs at the end of the dotfiles phase. It respects--dry-run,--yesand--skip dotfiles. Copies you edited are left in place. [#14681](https://Configuration
📅 Schedule: (in timezone America/Los_Angeles)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.