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
6 times, most recently
from
October 3, 2026 14:35
8db9151 to
e40c39b
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
7 times, most recently
from
October 11, 2026 10:38
5c67a95 to
c3343bb
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
7 times, most recently
from
October 19, 2026 12:03
1cf93e0 to
a4d5400
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
October 27, 2026 12:06
b90a5b0 to
5405978
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
3 times, most recently
from
October 30, 2026 11:49
2d747f7 to
346aaf9
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.25: : Edit and remove tasks from the CLI, andmise watch --onceCompare Source
mise taskscan now add, change and remove tasks in a chosen config file without an editor, andmise watch --oncewaits for one change, runs the tasks and exits. Both suit scripts and coding agents. The release also adds opt-in env caching for configs with redacted values, and fixes concurrent installs, lockfiles in symlinked config dirs, slow reshims and signed macOS app bundles.Added
mise tasks setandmise tasks rm, plus more options formise tasks add. #15213 (@jdx)add,setandrmtake the same--env,--globaland--pathflags asmise use, so you can pick the file they write to.addandsettake new task fields:--env-var,--tools,--usageand--confirm.setchanges only the fields you pass and keeps the rest of the file, comments included.--unset FIELDremoves a field. It fails if the task doesn't exist.rm(aliasremove) deletes a TOML task's table or a file task's script. It asks for confirmation unless you pass--yes, and it refuses tasks inferred frompackage.jsonor defined in included files.--jsonand--dry-run. If more than one loaded file defines a task,setandrmstop and list the files so you can choose one.addorsettrusts the config root it writes to, it now says so on stderr.mise watch --once. mise waits for a change in the watched sources, runs the tasks once withmise run, and exits with their status. It uses the same filters as a normal watch and runs nothing at start, so--postponeis implied. Flags that only control how watchexec reruns the command, such as--restartand--clear, are refused with--once. Ctrl-C exits with 130. SIGTERM while waiting exits without running anything. A signal during the run stops the whole task process tree.mise watchalso now passes--exit-on-errorto watchexec, which stops at the first failed run and exits with its status.--exit-on-errorrequires watchexec 2.5.0 or later. #15212 (@jdx)env_cache_redactedsetting. Withenv_cache = true, mise never caches an environment that contains aredact = truedirective, so a slow_.sourcescript ran again on every prompt. The new opt-inenv_cache_redactedsetting (MISE_ENV_CACHE_REDACTED=1, defaultfalse) lets these environments be cached. Values stay masked in output when they are read from the cache. The tradeoff: the secret values are stored on disk, encrypted with a key that every process started from the activated shell inherits.ageand sops values, plugin results withcacheable = false, redacted[vars], and redacteddefault/requireddirectives are still never cached. WithMISE_DEBUG=1, mise now logs when an environment wasn't cached and which directive prevented it. #15200 (@jdx, @Achder)managed_byin bootstrap package status JSON. Installedbrew-caskpackages now reportmanaged_by("mise","homebrew"or"unknown") inmise bootstrap packages status --jsonandmise bootstrap status --json. Scripts can use it to tell which casks mise will upgrade and which it leaves to Homebrew. #15198 (@jdx, @drewbitt)Registry: added
jouet, which installs from its signed packslip #15201 (@jdx)Changed
mise tasks addnow accepts--force. Re-adding an identical task does nothing. Replacing a task that has a different definition without--forcestill works for now. mise will warn about it starting in 2027.5.0 and refuse it starting in 2028.5.0. Scripts that only run on current mise versions can add--forcenow. #15213 (@jdx)Fixed
mise installprocesses at once could fail with errors like "Python graph installs require an installed interpreter", because one process saw a tool another process was still installing and treated it as complete. Installs and forced reinstalls now mark a version as incomplete before touching its directory. #15196 (@jdx, @theredspoon)~/.config/miseis a symlink into a dotfiles checkout that has aconfig.override.toml, runningmise installinside the checkout no longer makesmise.lockalternate between full and empty. #15197 (@jdx, @ponko2)mise reshim, including the reshim at the end ofmise install, no longer slows down quadratically with the number of tracked configs. On machines with thousands of tracked projects it could take minutes. #15203 (@jdx, @Birzool).appbundles extracted from tarballs made with bsdtar are no longer killed on launch. mise now applies the._*AppleDouble files to the files they belong to and then deletes them, as macOStardoes. #15211 (@jdx, @jpeeler)[bootstrap.repos]entry whoserefis an annotated tag now reportscurrentonce that tag is checked out. Before, it always reporteddiffers, and everyapplychecked the tag out again. #15199 (@jdx)mise dot untrackwith several paths now checks all of them before changing anything. Before, if a later path wasn't tracked, the command failed but had already stopped tracking the earlier paths. #15208 (@jdx, @drewbitt)Full Changelog: jdx/mise@v2026.10.24...v2026.10.25
💚 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.24: : Container daemons, append-position PATH entries, and extra CA certificatesCompare Source
Experimental daemons can now run container images with Docker or Podman, and named preset ports can get their own port per worktree. This release also adds
position = "append"forenv._.path, anextra_ca_certssetting for TLS-inspecting proxies, and aregistry_indexoption for lockingpypi:tools. It fixes several lockfile, PyPI, Homebrew and task issues.Added
Container images as daemons (experimental). A custom daemon with an
imagekey runs throughdocker runorpodman run. It supports ports, readiness checks,depends, the proxy andmise daemons logs, just like other daemons. Every port is published on127.0.0.1only. Containers are named per project and worktree, so two checkouts never clash, and a stale container left behind by a killed run is removed before the next start.runtime = "auto"(the default) usesdockerif it is onPATH, otherwisepodman. You can setMISE_CONTAINER_RUNTIMEto use any Docker-compatible CLI.data_mountbind-mounts a per-checkout data directory, andready_cmdcan use{{ runtime }},{{ container }}and port placeholders. Limitations: mise does not pull or build images or start the Docker/Podman service, only TCP ports are supported, and starting a container daemon on Windows fails. #15182 (@jdx)Per-worktree named ports for daemon presets. Named preset ports such as
http_portoncockroachdbormonitor_portonnatsnow accept{ auto = true, base, stride }, just like the primary port. Each linked worktree adds its slot to the port's ownbase. Before, these ports were either fixed or offset from the preset default. Whenbaseis omitted, it defaults to the preset's port. Integer overrides still work as before. mise now reports a load error if anautonamed port collides with another daemon's port in the same project. #15181 (@jdx)position = "append"forenv._.path. Appended entries go after tool paths and before the inheritedPATH. This lets directories like~/binor~/.cargo/binstop shadowing tools that mise installs. The default is still"prepend". #15158 (@jdx, @Mossop)extra_ca_certssetting.extra_ca_certs(MISE_EXTRA_CA_CERTS) points to a PEM bundle that mise trusts in addition to its usual roots, on every platform. Use it when you're behind a traffic-inspecting proxy such as Socket Firewall. It covers mise's own HTTP requests: downloads, version lookups, GitHub API calls, attestation checks and vfox plugins. Programs that mise runs, such as git and uv, keep using their own certificate settings. You can set it only in the environment or in global config. The path must be absolute or start with~/. If the bundle is unusable, mise warns and keeps its usual roots. #15171 (@jdx, @abjectnotfound)registry_indexforpypi:tools. Setregistry_index = "priority"to search a per-toolregistry_urlbefore PyPI when locking. This works for registries that host only your own packages, such as Gitea/Forgejo, pypiserver or a static index. The tool always comes from the registry, and only packages the registry doesn't have fall back to PyPI. The default,"default", keeps the current behavior: the registry replaces PyPI. #15157 (@jdx)secret()inmerge = "missing"dotfile entries. Tera templates in these entries can now callsecret(). mise asks only for the secrets of keys missing from the target, so you can add a key to a private config later without entering the existing ones again.mise dot statusandmise dot diffnever read or prompt for a secret. Enforcedmerge = trueentries still can't usesecret(). #15168 (@jdx, @thernstig)Danger Swift libraries. The
danger-swiftregistry entry now uses Danger's official installer, solibDangerand the Swift modules are installed with the executable. You still need to install Node and Danger JS separately. #15120 (@Mostafa-Ashraf97)Fixed
mise upgradenow updates every lock entry of a tool that is declared in more than one config file, such asconfig.tomland aconf.dfragment. Before, the old entry stayed in the lockfile andmise outdatedkept offering the same upgrade. #15164 (@jdx, @eliebleton-manomano)http:tools with afile://URL and nochecksuminstall and lock again under the defaultlockfile_mode = "generate". mise now hashes the local file directly. #15180 (@jdx, @hcrosse)mise installno longer exits 1 when a git task include can't be loaded, for example a private repository in CI. It warns and leaves the lockfile unchanged. An explicitmise lockstill fails. #15166 (@jdx)mise locknow locks apypi:tool's dependency graph with the selected Python, even when that Python isn't onPATH. If a per-toolpythonisn't installed yet, uv may download it for resolution only, unlessofflineis set. #15153 (@jdx)minimum_release_ageis set. Dependencies still respect the cutoff. #15159 (@jdx)post_installuses Homebrew'sMachOno longer fail. These steps are skipped with a warning. #15152 (@jdx)install_symlinkwith a relative source, such asbin.install_symlink "foo" => "bar", now resolves against the target directory, as Homebrew does, instead of failing withdifferent prefix. #15173 (@waynehoover)staged_pathcan now access the binary payload. This fixes installs such asbrew-cask:dynatrace-oss/tap/dtctl. #14837 (@azohra)fileis an HTTP URL) with its ownenvno longer fails with exit 127 when it runs as a sub-task or dependency. #15178 (@jdx)turbo.json, which is parsed as JSONC, and inglobal.json, which still rejects trailing commas. Before, a commentedturbo.jsonprinted a warning on every run and its task suggestions were dropped, and a commentedglobal.jsonbroke dotnet version detection. #15141 (@jdx)mise pruneno longer removes tool versions that tasks still need when those tasks come fromtask_config.includesfiles, default task directories, or executable scripts with#MISE tools=.... #15156 (@jdx)latestforgem:tools no longer resolves to a RubyGems prerelease such as4.1.0.beta3. To get prereleases, request one explicitly or setMISE_PRERELEASES=1. #15143 (@dennmart)mise use -g. #15165 (@jdx, @mzagaja)mise upgradeandmise outdatedno longer say "All tools are up to date" when a version lookup fails. They now list the tools they could not check. #15171 (@jdx, @abjectnotfound)Changed
formula.jsonindex, with caching for tap metadata and cask evaluations. In one large setup, warmmise bootstrap packages upgrade --dry-rundropped from about 7.7s to 3.7s, andstatusfrom about 4.0s to 1.5s. The first run on a machine downloads the index once. #15183 (@waynehoover)Deprecated
lockfile_mode = "merge"is deprecated in favor of the defaultgeneratemode. Nothing changes yet. mise will start warning in 2027.4.0, and the mode will be removed in 2027.10.0. To migrate, delete thelockfile_mode = "merge"line (or unsetMISE_LOCKFILE_MODE=merge). #15184 (@jdx)Documentation
New Contributors
Full Changelog: jdx/mise@v2026.10.23...v2026.10.24
💚 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.23: : Dotfile groups can apply edits, INI merges, and fnox-stored dotfilesCompare Source
Dotfile groups can now carry block, line and merge edits,
mergeentries work on INI files, andmode = "fnox"deploys files kept encrypted in fnox. mise secrets also no longer lets a project grant itself keys from your personal fnox config. The rest of the release adds compact-index version listing for gem sources such as GitHub Packages, plus fixes for uninstall, lockfiles, command wrappers, Windows and MSYS2.Added
Edits inside dotfile groups. A
[dotfile_groups.<name>.entries]table can now hold block, line and merge edits alongside whole-file entries. These edits apply only on machines that select the group in[bootstrap] dotfile_groups. Before, edits had to live under[dotfiles], which applies on every machine. Edit entries use the<path>/<id>key form, and a relativesourcestarts at the group root. The edited file must be inside the group's target. Deselecting a group leaves the content its edits already wrote. #15131 (@jdx, @thernstig)Dotfile merges into INI files. A
mergeentry can now set keys in INI files such aspip.conf,tox.iniandsetup.cfg. Changed keys are replaced in place, new keys go into their section, and missing sections are added at the end of the file. Comments, other keys, indentation, CRLF line endings and a BOM are all kept. Targets ending in.iniare detected automatically. For any other file name, setformat = "ini". Parsing follows Python'sconfigparser, and a target that doesn't parse is reported and left unchanged. This change also fixes merges in any format whose target is a symlink to its own source: if the source fails to parse, mise now keeps the link instead of replacing it with a copy. #15135 (@jdx, @Mossop)mode = "fnox"for dotfiles containing secrets. This entry writes the file that fnox stores for the target path, so files like~/.npmrcor~/.kube/configstay out of your dotfiles repository. It requires fnox 1.44.0 or newer onPATH. Files are written with mode0600unlesspermissionssays otherwise.mise dot editrunsfnox edit --file.mise dot diffnever prints the content, and dry runs never call fnox.mise dot unapplyremoves the target only while it still matches what fnox stores, unless you pass--force.mise oci buildskips these entries. One limitation:mise dot rollbackjournals the previous plaintext in the local state directory. Only UTF-8 text files are supported. #15134 (@jdx, @owpac)Gem sources without the JSON versions API. If a gem
sourcereturns 404 forapi/v1/versions/<gem>.json, mise now lists versions from the source's compact index (info/<gem>), the same file Bundler uses. As a result,latest, version prefixes,mise outdatedandmise upgradework for gems from GitHub Packages (rubygems.pkg.github.com/<org>) and similar registries. GitHub Packages doesn't publish release dates, sominimum_release_agecan't filter its versions. A 401 from GitHub Packages now comes with a hint about theread:packagestoken scope. #15122 (@waynehoover)Fixed
mise uninstall ruby 3.4.1no longer removesruby@3.4.12when 3.4.1 isn't installed. A version now matches only when it equals the query or continues it after.,-or+, the same way mise matches versions elsewhere. #15116 (@jdx, @Aqualon)mise lsnow shows lazy tools that haven't been installed as a dimmed(lazy)instead of a red(missing). A baremise upgradeno longer lists them among the tools it resolves.mise ls --jsonstill reports"installed": false, andmise ls --missingstill includes them. #15114 (@jdx)packageManagerentry with a checksum (for examplepnpm@11.7.0+sha512...) no longer forces every later install of that tool onto the npm backend. Installs that an earlier version already pinned recover on their next install. #15124 (@jdx, @foobear)[wrappers]entry now still goes through other wrappers. For example,noderun from a wrappedpnpmnow gets thenodewrapper'sargsandenv. A wrapper is skipped only for its own nested calls, and that skip is tracked in__MISE_ACTIVE_WRAPPERS. #15126 (@jdx)~/.config/mise/conf.d/dotfiles -> ~/dotfiles, no longer fail with "No lockfile URL found". The checkout'smise.lockis now trusted as global config. A projectmise.tomlthat symlinks to your global config still can't vouch for the project's lockfile. #15130 (@jdx, @soodoh)~/.config/miseis a symlink into a dotfiles repository,mise lock --globalwrites npm and Python sidecars tolocks/again instead of.mise/locks/. Existing pointers are rewritten on the next lock. You can delete the old.mise/locks/directory by hand. #15125 (@jdx)cargo,go,gem,pipx, ...) runs a program that isn't onPATH, the error now names it, for example`cargo` not found. Before, it only said "No such file or directory". #15119 (@jdx, @Mossop)mise activatefor bash, zsh and fish now exportsMANPATHin POSIX form, somancan use it. Empty entries are kept somanstill uses its default paths. #15117 (@jdx, @PTechoueyres-mic)mise self-updateretries for about 6 seconds when antivirus briefly locksmise.exe. If replacing the binary fails after the old one has been moved aside, mise copies the new binary into place, so the install directory is never left withoutmise.exe. #15138 (@jdx)Changed
mise dot statusandmise dot syncno longer start one git process per tracked file. In one test with about 860 tracked files, a warmmise dot statusdropped from about 7s to 1.4s. Output is unchanged. #15127 (@waynehoover)mise.tomlexample up front, an updated quickstart, a table of everyday commands, and a section onmise bootstrap. #15136 (@jdx)Security
fnox.tomlin or above$HOME, now counts as yours rather than the project's. If a task'ssecretslist or a{{ secrets.NAME }}reference names such a key, the task fails before any secret is resolved. The error names the file that defines the key.--secrets-allleaves these keys out, whilemise run --secrets NAMEandmise x --secrets NAMEstill pass them because you named them yourself.mise secrets lsandmise tasks validatereport these grants as problems of kindpersonal. To give a key to the project, define it in the project'sfnox.toml. This needs a fnox release that reports where each key is defined. With older fnox, behavior is unchanged. mise secrets is still experimental. #15133 (@jdx)Full Changelog: jdx/mise@v2026.10.22...v2026.10.23
💚 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.22: : Project-scoped uninstall, JSONC dotfile merges, and node@lts moves to Node.js 26Compare Source
You can now uninstall only the tools the current project requests, and new
--no-globaland--projectflags replace the two different meanings--localhad. Dotfiles can merge into JSONC files like VS Code'ssettings.jsonand can seed a file once without overwriting later edits.node@ltsnow resolves to Node.js 26. The rest of the release adds anipv4_onlysetting, JSON output formise vars, and fixes for Windows, lockfiles, pruning and GitHub release listing.Added
mise uninstall --projectandmise ls --project.mise uninstall --projectremoves the installed versions requested by the nearest project's config files:mise.toml,mise.local.toml,conf.dfragments,.tool-versionsand idiomatic version files in that directory. Config in parent directories and global config is not included. It lists each version with the file that requests it and asks before removing anything.--yesskips the prompt, and--dry-runonly shows the list.mise ls --projectlists the same scope. Installs are shared between projects, so another project using the same version will need to reinstall it. #15079, #15081 (@jdx, @httpete-broadcom)--no-globalonls,outdated,upgradeandtasks ls. It selects tools or tasks from all non-global config, including parent directories, and does what--localdid on these commands. #15081 (@jdx)Dotfile merges into JSONC files. A
mergeentry can now edit files that contain comments and trailing commas, such as VS Code'ssettings.json. It keeps the file's comments, indentation and any keys the source doesn't set..jsonctargets are detected automatically. For other files, set the newformatkey (json,jsonc,tomloryaml). A.jsontarget withoutformatis still parsed as strict JSON. Merge sources that fail to parse now report the file path and the parse error. #15077 (@jdx, @TimonLukas)create_if_missingfor dotfiles.copy,templateand inlinecontententries withcreate_if_missing = truewrite the target only when nothing exists there. After that, local edits are left alone and do not count as drift inmise dot statusormise dot diff. If you delete the target, the next apply creates it again. This works for files that are filled in on each machine, such as local tokens. #15080 (@jdx, @thernstig)permissionson dotfilemergeentries. The mode is applied only when the merge creates the file. Files that already exist keep their mode. Merge entries for the same file must not set different modes. #15087 (@jdx, @thernstig)ipv4_onlysetting. Setipv4_only = true(orMISE_IPV4_ONLY=1) for networks where a host fails over IPv6, for exampledl.google.comreturning 404 or Sigstore TUF fetches failing. This applies to mise's own HTTP connections: downloads, version lookups, GitHub API calls, attestation verification and vfox plugins. External programs such asgit,npmand thenpm:backend's package manager still use the system resolver. The default isfalse. #15057 (@jdx, @Alby02)mise vars --jsonand--json-extended. Prints vars as JSON.--json-extendedalso includes the file each value comes from. Redacted values stay[redacted]. #15069 (@jdx, @artemklevtsov)mise shell --unset --all. Removes everyMISE_<TOOL>_VERSIONoverride from the current shell in one command, including ones you exported by hand. #15088 (@jdx, @wfouche)Bootstrap hook descriptions. A hook table can set
description, andmise bootstrapprints it instead of the hook's script. Without a description, mise prints$followed by the command's first line, cut to the terminal width.--verboseand--dry-runstill print the full script. #15106 (@jdx, @owpac)Debian packages from the mise APT repository now include Bash, Zsh and Fish completions. #15074 (@gilesw)
Registry: added an aqua backend for
oxfmt. #15092 (@scop)Changed
node@ltsnow resolves to Node.js 26, which entered Active LTS on 2026-10-28. It used to resolve to 24.lts/lithium(alsolts-lithium) selects the 26.x line. Aliases for older lines, such aslts/krypton, are unchanged. To stay on Node.js 24, pinnode@24ornode@lts/krypton. #15105 (@jdx)system_packages.elevate_with = ""now means "never elevate": package manager commands run as the current user. This helps on hosts without root, such as Termux. Before, an empty value fell back tosudo,run0ordoas. If the setting is unset, mise still picks an elevator fromPATH. #15049 (@jdx, @iliqiliev)Deprecated
--localonls,outdated,upgradeandtasks lsis deprecated in favor of--no-global. It still works and prints no warning for now. Warnings start in 2027.1.0, and the flag is removed in 2027.7.0.settings --localandlock --localare not affected. #15081 (@jdx)Fixed
mise pruneand automatic upgrade pruning used to keep every version of a tool while a process started through a runtime link such asinstalls/claude/latestwas running. They now keep only the version that process is running, so long-running sessions no longer stop old versions from being cleaned up. #15113 (@jdx)mise install pipx:<tool>no longer fails withmissing lockfile entrywhenlockfile_platformslists only the current platform. #15091 (@jdx, @drewbitt)github:be5invis/Iosevka, mise now retries with smaller pages of 30 and then 10 releases instead of failing. #15078 (@jdx)mise version --jsonno longer reports alatestolder than the running version, which happened with fresh or nightly builds because ofminimum_release_age. #15068 (@jdx)mise backends switchno longer fails withNo such file or directorywhen thelocks/directory next to it exists but is empty. Rollback after a failed switch also restores sidecar directories more reliably. #15060 (@zeitlinger)owner/repoform no longer printinvalid aqua toolrepeatedly. A name that no registry defines still fails withpackage not found. #15048 (@jdx, @trothwell).nvmrc -> .node-version, no longer prints anot readingwarning. Links to other files are still not read and still warn. #15058 (@jdx, @owpac)minimum_release_ageor--beforeare now logged at debug level instead of printing one warning per version. #15056 (@jdx, @owpac)GEM_HOMEand the executable path, so gems work when the install directory contains spaces or shell metacharacters. #15055 (@jdx)refthat is empty, isHEAD, or starts with-. This stops option injection into git, and these sources now follow the same rules as plain git repo sources. #14832 (@Huge)Documentation
New Contributors
Full Changelog: jdx/mise@v2026.10.21...v2026.10.22
💚 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.21: : Easier dotfiles setup from a checkout or Stow packages, plusprune --forcefor casksCompare Source
You can now keep mise's global config inside your dotfiles checkout, and deploy Stow-style packages without writing a table for each one. Dotfiles also get new protections for template entries, and
mise bootstrap packages prunecan force-remove casks it cannot prove are unchanged. The rest of the release fixes bugs in monorepos, lockfiles and pypi locking.Added
Bootstrap from a dotfiles checkout with
--config-dir.mise bootstrap --fromaccepts--config-dir <path>. It links mise's config directory (~/.config/mise, or whereverXDG_CONFIG_HOME/MISE_CONFIG_DIRpoint) to that path inside the checkout, then bootstraps from it.config.toml,config.<env>.toml,conf.d/andmiserc.tomlin the repository all act as global config from the first run. After that,git -C ~/.dotfiles pull && mise bootstrapis enough, andmise use -gandmise dot addwrite into the checkout.The path must stay inside the checkout. The existing config directory must be missing, empty, or already that link; mise refuses anything else and leaves it alone.
--dry-runcreates no link. The docs now recommendmise dot track ~/.config/mise, which tracks the whole config directory rather than onlyconfig.toml. Files ending in.local.tomlstay on each machine. #15025 (@jdx, @lhs-12, @Mossop)Stow packages need no
[dotfile_groups]tables. If a name in[bootstrap] dotfile_groupshas no matching table but is a directory underdotfiles.root, mise treats it as a group with the default settings: that directory is deployed into~file by file. A table with the same name still overrides the defaults.mise dot add --group,mise dot unapply --groupand orphan reporting work for these groups too. #15025 (@jdx, @lhs-12, @Mossop)mise bootstrap packages prune --manager brew-cask --force. This removes mise-installed casks that prune skips because it cannot prove they are unchanged, such as self-updating apps, casks with install steps, and casks installed before mise recorded prune metadata. Without--force, prune now lists which casks--forcewould remove. A forced prune removes only what the receipt recorded and only while it is still where mise put it. It still skips casks Homebrew owns, casks without a mise receipt, interrupted installs and shared targets. Use--dry-runto preview. #14985 (@jacobbednarz)mise dot applywarns before overwriting an edited template target. If you edited a renderedtemplatetarget by hand since mise last wrote it,applynow warns that the edit will be overwritten and names the source to move it into.applystill overwrites the file, so unattended runs are not blocked. #15020 (@jdx, @owpac)Registry:
tuios(aqua:Gaurav-Gosain/tuios). #14990 (@Gaurav-Gosain)Fixed
mise dot addon amode = "template"entry now refuses by default. Before, it copied the rendered file over the template source, which deleted the template code and could write secrets pulled in withexec()into your repository in clear text. If you really want to capture the rendered file, pass--force. #15019 (@jdx, @owpac)symlink-eachapply failed, and the suggested--forcereplaced each source file with a link to itself. Apply now replaces the folded link with a real directory of links, without needing--force. #15025 (@jdx, @lhs-12, @Mossop)mise bootstrap --adopt --dry-runnow previews the whole config directory, includingconf.d/,config.<env>.tomland this machine'smiserc.local.toml. Before, it only previewedconfig.toml. #15025 (@jdx, @lhs-12, @Mossop)monorepo.config_roots = [".", "child"], a child with no tool overrides lost the tools it inherits from the root config and fell back to global versions. This brokemise install --monorepo --locked. Each declared root now loads its full config hierarchy. #15023 (@jdx, @swizzlr)mise run //app:taskfrom the monorepo root withMISE_LOCKED=1now looks up idiomatic version files such asapp/.node-versioninapp/mise.lock, not the root lockfile. #15021 (@jdx).nvmrcis a symlink to.node-version, the.node-versionfile is read again. mise still skips.nvmrcwith a warning, but that skip no longer hides.node-version. Before, the directory resolved no Node version (regression in 2026.10.19). #15006 (@jdx, @jjb)mise locknow re-resolves platform entries whose URL points to a different release than the lockedversion. This happens, for example, after Renovate bumps the version inmise.lock. Before,mise lockleft the old URL and checksum, andmise install --lockedthen refused the lockfile. #15010 (@jdx)mise locksweep with no tool arguments no longer aborts when apypi:/pipx:tool setsuvx_argsorpipx_args. That tool gets a warning and a version-only lock entry. Naming the tool explicitly still errors. #15030 (@jdx)pypi:tools,mise locknow checks that the resolved uv dependency graph can actually be installed withuv sync --frozen --no-build. If it can't, for example because a dependency has no wheel for the interpreter, mise warns and keeps a version-only entry. Before, mise wrote a graph that the nextmise installfailed on. #15031 (@jdx)mise doctorno longer lists uninstalledlazy = truetools as problems. The toolset list marks them(lazy), and--jsonadds"lazy": true. #15024 (@jdx)packslip:installs on shared CI runners no longer fail whenraw.githubusercontent.comreturns a 429. mise now asks mise-versions whether a repository publishes a release list, and falls back to GitHub when the mirror is unavailable,use_versions_hostis off, or aurl_replacementsrule applies. #15032 (@jdx)smol-machines/smolvm) installs through aqua again. mise now rewrites the absolute symlinks in its guest root filesystem as relative links inside the install directory. Links that escape the install directory are still rejected. #15015 (@jdx)New Contributors
Full Changelog: jdx/mise@v2026.10.20...v2026.10.21
💚 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.20: : Chocolatey packages, systemd user units, and version_regex for release tagsCompare Source
Bootstrap can now install Windows packages with Chocolatey, manage systemd user units that a package already ships, and register launchd launch events. Release-based backends can filter tags with
version_regex, andmise completionsupports Nushell. The rest of the release fixes lockfile, OCI, dotfiles, shim and Windows bugs.Added
Chocolatey package manager for bootstrap. You can declare
choco:packages in[bootstrap.packages]next towingetandscoop. Chocolatey installs packages machine-wide, which covers tools like Docker Engine and the Visual Studio build tools. It only works on Windows whenchocois onPATH, andchoco:entries are skipped on other platforms.statusworks without elevation, butapplyandupgradeneed an elevated terminal. Mise treats reboot-required exit codes (1641, 3010) as success and prints a warning.state = "absent", import and prune are not supported yet. #14978 (@jdx)Manage existing systemd user units from
[bootstrap.services]. On Linux, an entry withscope = "user"and nocommandorbuiltinnow manages a unit that already exists, such as one installed by a package. Mise runssystemctl --useragainst that unit and does not write adev.mise.*unit.state,enabledandmaskedwork the same way as for system services. Options that define a service, such ascommand,environmentorrestart, are rejected for these entries. Before, this configuration was always an error. Now, if you leave outcommandby mistake, mise reports a missing unit. #14980 (@jdx)launchd launch events. macOS LaunchAgents defined in bootstrap can now set
LaunchEvents, for example to react when a USB device is added or removed. #14992 (@deecewan)**Let Homebrew manage casks that mise installs.
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.