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
5 times, most recently
from
September 16, 2026 17:47
6e7311c to
5986910
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
from
September 18, 2026 07:31
5986910 to
e80a868
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.
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 (jdx/mise)
v2026.9.11: : macos-app bootstrap packages, task template inheritance for flags and file tasks, and Swift on Linux fixesCompare Source
A new
macos-appbootstrap manager installs.appbundles from a pinned URL and checksum when no Homebrew cask exists, task templates now composeusageflags and can be extended from file tasks, and Swift on Linux picks its distro build from swift.org's release index instead of a hard-coded map that 404'd on arm64 and on newer Fedora, Amazon Linux, and Arch hosts. Install failures also become far more actionable: errors name theminimum_release_agecutoff that hid every version, the child's last stderr line, or the shared libraries a Swift toolchain cannot load.Highlights
"macos-app:<name>"entries in[bootstrap.packages]download, checksum-verify, and install a.appinto/Applicationsusing mise's existing cask pipeline, with stricter ownership rules for apps already at the target.extendsa template now inherits the template'susageflags alongside its own, file tasks can write#MISE extends="...", and a template'svarscan read the values the extending task supplies.Added
bootstrap: The
macos-apppackage manager installs a macOS.appbundle from a vendor or internal download.version,url,sha256, andartifactare all required ("latest"is rejected because mise cannot discover releases behind a plain URL);{{version}}is interpolated intourl, so a release bump is a two-field edit. Only.dmgand.ziparchives containing an app bundle are supported, state is kept in mise's state directory rather than Homebrew's Caskroom, and an app already at the destination that this entry does not own is refused unlessadopt = trueand the contents match.mise bootstrap packages upgradecannot discover new versions for these entries, andprune --manager macos-appis unsupported. Preferbrew-caskwherever a cask exists. (#13279)tasks: A task that names a template with
extendsand declares its ownusagenow gets the template's flags too, listed first in--help. Previously the task's spec replaced the template's entirely, so shared flags had to be copied into every task. Workspace-root task defaults still only fill inusagewhen the task has none. A flag declared in both places is listed twice; declare each flag in one place, or use usage flagsets for replacements. (#13310)tasks: File tasks (including remote HTTP and
git::scripts) can use#MISE extends="<template>"in their header to inherit tools, env, description, aliases, and other fields from a task template; previously the field was warned about and ignored. A task whose command is a script file no longer picks up a template'srun. (#13307)swift: When a Linux install fails its
swift --versioncheck, mise runslddover the toolchain and lists every unresolved shared library (for examplelibform.so.6, libncurses.so.6, libpanel.so.6on an Arch-family host running a ubi9 build), with the tool'sinstall_envapplied so anLD_LIBRARY_PATHremedy is not misreported.docs/lang/swift.mddocuments the workaround. (#13319)Fixed
<platform>-<arch>download directory. (#13293, fixes #13291)ID_LIKEconsulted (Linux Mint gets an Ubuntu build) and unknown distros such as Arch falling back toubi9. Every compromise is announced with a warning, musl hosts and unsupported architectures fail before downloading, andswift.platformstill overrides selection without contacting swift.org. Theswift_platformlockfile option now records the host as detected (e.g.fedora40instead offedora39); mismatched entries are re-resolved on the next lock. (#13297, fixes #13289)install_envvalues are now rendered as templates like other tool options, soLD_LIBRARY_PATH = "{{env.HOME}}/.local/lib/compat"reaches the install subprocess expanded rather than literally.{{version}}is left unchanged. (#13314)minimum_release_age(default24h) hides every candidate, the error names the setting and cutoff, how many releases it hid, the newest one with its release and eligibility dates, and a copy-pasteable exact pin to install it now, instead ofno versions found ... matching date filter. A query that matched nothing is no longer blamed on the filter. (#13308)exit code 127; last stderr: swift: error while loading shared libraries: libncurses.so.6 .... This also reaches the final error block under--quiet, where stderr was previously never shown. (#13315)usagespec now reports the task name and the parser's diagnostic (invalid usage spec for task 'deploy'followed by the reason) instead of a bareInvalid usage config; file tasks render the same diagnostic rather than a Debug dump, and a missing or unreadable script is reported as such rather than as a bad spec. (#13312)varscan now read the vars the extending task supplies, so{{ vars.opt | default(value='none') }}in a template sees the task'soptinstead of always taking the default. Literal vars within a single task are also bound first, sovars = { msg = "hi {{ vars.who }}", who = "world" }works regardless of declaration order. Config-level[vars]are unchanged. (#13322)latestand version-prefix links underinstalls/<tool>/that point at an install no longer eligible for a link (for example a directory left with anincompletemarker by an interrupted install) are now removed on rebuild instead of surviving indefinitely. Configured aliases, hand-made names, and absolute symlinks are left alone. (#13288)1.3.1-3no longer claim thelatest,1, and1.3runtime symlinks or satisfy"latest"/prefix requests over the newest stable install; links an older mise already wrote are cleaned up on the next install. An exact request or theprereleaseoption still selects them. (#13272 by @pataar)mise lock --globalon amise.locksymlinked into a dotfiles repository now keeps native dependency sidecars beside the target lockfile, somise install --lockedworks from a fresh checkout. If you used this layout on 2026.9.7 through 2026.9.10 and see missing sidecars, runmise lock --globalagain to repair the pointers. (#13268 by @nettlesh)lockfile_mode = "generate",mise unusenow removes the tool's entry frommise.lockand its.mise/locks/...sidecar immediately rather than leaving them until the nextmise installormise lock. Merge mode is unchanged. (#13304)conda:packages that have nothing to activate (noactivate.dscripts, no dependency executables, no script entry points) are now plain symlinks instead of shell launchers, so tools likeconda:ripgreporconda:ghno longer prepend the conda prefix to thePATHof every child process and skip the extra shell. Packages that need activation keep their launcher; Windows is unchanged. A relativeMISE_DATA_DIRis also handled. Existing installs keep their current entries until reinstalled withmise install --force conda:<pkg>. (#13305)postinstallhook now receives pre-tools[env]from the config on every backend (http, aqua, github, cargo, npm, core tools), not only for asdf plugins, and a hook that changes an env input is visible to hooks ordered after it. (#13316)version_prefix(taga-a-1.2.3withversion_prefix = "a-", listed asa-1.2.3) can now be installed;prefix + versionis tried first so every listed version round-trips to its tag. If a repo publishes botha-1.2.3anda-a-1.2.3, requestinga-1.2.3now resolves to the doubled tag. (#13317)Changed
jobsconcurrency before the serial install pass, so--jobs/MISE_JOBSnow speed up cask-heavy runs. Placement (mounting, swapping app bundles) remains serial. (#13282 by @waynehoover)Security
fstatat/openat/readlinkat), so a path component swapped mid-check cannot make mise compare against a different tree than the one it will replace. Digests are unchanged, so existing receipts remain valid; large files are now hashed in-process, which can make adoption checks slower. (#13294)Documentation
macos-appdownloads and app ownership. (#13298)[vars]resolve and why a task-local override does not recompute a top-level var that already referenced it, with task templates as the way to defer a fragment. (#13323)flagset,use, andinclude, in both TOML and file tasks. (#13313)New Contributors
Full Changelog: jdx/mise@v2026.9.10...v2026.9.11
💚 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.9.10: : shims.exclude, npm allow_exotic_deps, bulk dotfiles conflict resolution, and Windows Ctrl-C handling for tasksCompare Source
New settings let mise manage a tool without claiming its command names (
shims.exclude) and approve non-registry npm dependencies (allow_exotic_deps),mise dot pullcan decide every sharing conflict at once, and vfox plugin hooks gaincmd.streamplus a workingcmd.exectimeout. On the fix side,mise runnow survives Ctrl-C on Windows instead of orphaningcmd.exe, fish shells launched through shims start much faster with correct PATH order, and several task-resolution, lockfile, and Homebrew cask bugs are corrected.Highlights
settings.shims.excludekeeps names likepythonresolving to the OS while mise still manages the tool;allow_exotic_depsapproves specific npm packages fetched from git or tarball URLs; exactpackslip:pins install during aminimum_release_agecooling window; andmise upgrade --bumpkeeps SemVer build metadata such as+k3s1.mise dot pull --take-remote-all/--keep-local-allresolve all conflicts in one command, paths that cannot be decided are held rather than aborting the pass, and a directory sitting where a tracked file belongs is now reported as exactly that.ns:tasknames no longer duplicates the prefix, and fish startup throughmise exec/shims is no longer quadratic in the number of tools.Added
shims:
settings.shims.exclude(envMISE_SHIMS_EXCLUDE) lists command names mise never creates shims for. The tool stays installed and version-qualified names likepython3.12still resolve through mise, but the excluded name resolves to whatever else is onPATH; existing shims for those names are removed on the nextmise reshim. Note that undermise activatewithout--shimsthe tool'sbindirectory still joinsPATH, and excludingpython3meanspython3 -m venvsilently uses the system interpreter. (#13266)npm:
allow_exotic_depsapproves dependencies that aube'sblockExoticSubdepsgate would otherwise block because they come from a git,file:, or direct tarball URL. List package names to exempt only those (the gate stays on for the rest of the graph), or settrueto exempt the whole graph. Applies to theaubeandaube_cliinstallers. Embedded-aube installs now also warn wheninstall_envis set, since it never reached the in-process installer. (#13231)dotfiles:
mise dot pull --take-remote-alland--keep-local-alldecide every pending conflict at once, with per-path--take-remote/--keep-localnaming exceptions. The two blanket flags are mutually exclusive, and paused-sync and adoption messages now point at them. (#13233)mise dot pull --take-remote-all --keep-local ~/.bashrcbootstrap: Every string value in
[bootstrap.linux.systemd.units]and[bootstrap.macos.launchd.agents]is rendered as a template before the unit file or plist is written, so{{ config_root }}/.envinenvironment_fileresolves to the declaring config's directory. Values without template syntax (including%hand$HOME) pass through untouched,exec()is rejected, and a unit whose template fails is skipped by name without blocking the others.[bootstrap.services]is not yet templated. (#13227)hooks: Each
MISE_INSTALLED_TOOLSentry passed topostinstallhooks now carriesrequested_version(for examplelatest,22, or an alias) alongside the resolvedversion, so a hook can tell a floating request from a pin. The field is always present; existing hooks readingname/versionare unaffected. (#13274)vfox plugins:
cmd.streamruns a command with stdin connected and stdout/stderr streamed to the terminal, for hooks that genuinely need input such as a login or license prompt; it pauses the progress renderer and holds the terminal exclusively while it runs.cmd.execandos.executenow detach stdin unless--rawis set, matching every other subprocess mise spawns, so a plugin that read stdin throughos.executeshould switch tocmd.stream. (#13261)vfox plugins: The
timeoutoption oncmd.exec(andcmd.stream) now works instead of being silently ignored. It takes seconds (fractions allowed); on expiry the spawned shell is killed and the call raises a catchable error. Only the shell mise spawned is killed, so background processes it started may keep running. (#13263)Fixed
mise runno longer kills mise immediately and leaves acmd.exebehind stuck onTerminate batch job (Y/N)?. The first Ctrl-C lets running commands exit and stops scheduling new tasks; a second one takes the remaining process tree down. Tasks ended by the console are reported as interrupted instead of failing with exit code -1073741510. (#13226)teststask withalias = "test"could shadow atesttask in the current directory, depending on alphabetical order. Aliases still resolve wherever no task claims that name. (#13230)mise run '//...:lint'or'*:lint'no longer silently drop file tasks (mise-tasks/lint.sh) when a sibling package has an exact match. The same-package dedup that stopshelloandhello.shrunning twice is preserved. (#13277)update:deps:no<TAB>no longer producesupdate:deps:update:deps:no-cooldown. Reinstall the script withmise completion bash --installif yours predates the prefix-aware wrapper. (#13276)mise execor a shim emitted onefish_add_pathper directory, which made startup quadratic (over 1s with ~80 tools) and reversed mise's PATH order relative to bash. A single batched call restores both. (#13235)--take-remote-all/--keep-local-allno longer aborts the whole pass when one path cannot be decided (a directory on the live side, or unsaved local changes under--keep-local-all). Decisions for the other conflicts are recorded, and the error names the held paths so fixing just those finishes the setup. (#13239, #13242)mise dot conflicts,mise dot status, andmise doctoras exactly that, with advice to move it aside, instead of as a "changed type" conflict that--take-remote/--keep-localcannot resolve. Git or process failures while reading a live file now stop the sync with their own error instead of posing as a conflict. (#13249)mise upgrade --bumppreserves SemVer build metadata when rewriting a pin, so k3s bumps to1.37.0+k3s1rather than a nonexistent1.37.0, and Temurin keeps its+7build number. Coarser pins like1.36still bump to1.37. (#13258)"packslip:github.com/jdx/hk" = "2.0.1") now installs and locks while still inside itsminimum_release_agewindow, as the setting documents. Fuzzy requests such as"2"orlateststill wait out the cutoff. (#13251)MISE_LOCKED=1 mise install <tool>no longer warns about unrelated (often global) tools missing from the lockfile; installing the requested tool or a baremise installstill fails if that tool is not locked. (#13259 by @jamescassell)mise lockno longer fails when awith/exposerequirement is pinned to a release needing a newer Python than the tool itself (e.g.mkdocs1.6.1 withmkdocstrings==1.0.6). The sidecar'srequires-pythonis now intersected across every pinned requirement; unpinned requirements and pins behind an interpreter marker leave the range alone. Existing lockfiles remain valid. (#13252)minimum_release_ageset, the latest release no longer falls back to an older version when the hosted version list lags GitHub. The release date from the/releases/latestresponse mise already fetched is used directly, with no extra requests. (#13228)hk) now list versions from the backend that actually resolves, somise ls-remote hk@1.57andmise latest hk@1.57return1.57.0instead of nothing. Also covers backends promoted byMISE_DISABLE_BACKENDS, platform-scoped entries, and lockfile pins. (#13238)x-ratelimit-remaining: 0orretry-afteris now retried like a 429 underhttp_retries; a 403 with quota remaining is still treated as a refusal. Default backoff (~5s total) will not outlast a long reset, but brief contention no longer fails an install outright. (#13256)mise skills lsandmise skills syncnow warn when a packslip declares a skill the install does not hold, with the reason (skills.fetchoff,packslip.execoff, or a failed download), instead of looking identical to "no skills declared". After an install withskills.auto_syncoff, a one-time hint points atmise skills sync.--jsonoutput is unchanged. (#13275)adoptis now honored for casks named on the command line (mise bootstrap packages apply brew-cask:menuwhere) and for tap-qualified names and aliases likebrew-cask:homebrew/cask/firefox, so existing app bundles are adopted rather than replaced and macOS keeps their Privacy & Security grants. (#13262)depends_on :macosno longer makebootstrap packagestry to fetch a formula namedmacosand abort the whole run with a 404. (#13240 by @waynehoover)appdirandHOMEBREW_PREFIXinterpolation, and casks whose app bundle sits in a nested archive directory (app "nested/Example.app") install asExample.appinstead of being rejected as a relative target; duplicate app targets are rejected before anything is downloaded. (#13138 by @Guria, #13199 and #13200 by @soodoh)Documentation
age-keygen, recovery keys) and warns that passphrase-protected SSH keys and plugin-only recipients cannot decrypt in the background; the setup guide covers adopting onto a machine that already has the files and using non-GitHub Git hosts. (#13232)with,expose, anddependency_prereleasesoptions. (#13222)New Contributors
Full Changelog: jdx/mise@v2026.9.9...v2026.9.10
💚 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.9.9: : Dotfiles false-deletion fix, encryptedmise dot track, semantic uv options for PyPI toolsCompare Source
The dotfiles history watcher no longer records files as deleted when a checkpoint and a sync compose snapshots at the same time,
mise dot track --encryptenrolls a file with encrypted history from its first checkpoint,mise bootstrap --adopt --replace-historydiscards unrelated local history in one shot, andpypi:tools gain lock-awarewith,expose, anddependency_prereleasesoptions. Also fixed:packslip:installs from private GitHub repositories, stale history watchers after upgrading, global npm tools being reinstalled underlockfile = true, and the--separator in activated PowerShell sessions.Added
dotfiles:
mise dot track --encryptwritesencrypt = trueinto the tracked declaration and encrypts the initial baseline checkpoint, for files that must never have plaintext history.[history.encryption].recipientsmust be configured first; if the encrypted baseline cannot be saved, enrollment fails closed and rolls back the declaration without committing history metadata. Run it as a standalone command rather than insidemise dot capture. Enabling encryption on a file that already has plaintext history does not rewrite that history. (#13180 by @jdx)mise dot track ~/.config/app/credentials --encryptbootstrap: Fresh
mise bootstrap --adoptnow compares existing live files against the incoming setup before creating any local history, so identical files adopt the origin's history instead of being rejected as an unrelated root (for example right after the history store was removed). Differences still pause for an explicit decision. For machines that genuinely hold unrelated local history,--replace-historydiscards it and adopts the setup repository's branch in one shot;--dry-runpreviews the local and origin commits, and a failed replacement restores the previous branch and sync state. Ordinary sync never replaces divergent history and there is no persistent force setting. (#13182 by @jdx)pypi: Three new tool options express common uv install behavior without opaque
uvx_args, and unlike free-form arguments they participate in dependency graph locking:withinstalls extra requirements,exposeinstalls extra requirements and links their executables (requires uv 0.8.5 or newer), anddependency_prereleasessets uv's prerelease policy (disallow,allow,if-necessary,explicit). Setting any of them selects uv as the installer.uvx_argsandpipx_argsremain available as version-only escape hatches. The Ansible and Azure CLI registry entries now use these options by default; if you force pipx for one of them, clear the default with an empty list, e.g."pypi:ansible" = { version = "latest", uvx = false, expose = [], pipx_args = "--include-deps" }. (#13181 by @jdx)registry: Added
nubr(npm:@nubjs/runner), the Nub project's TypeScript runner for a file,package.jsonscript, or installed bin on plain Node. (#13191 by @colinhacks)Fixed
history.sync = "sync"and a running watcher, a checkpoint could record a sorted prefix of tracked files as deleted even though they were untouched on disk; those deletions then synced to other machines and removed their copies. Two compositions in one process (the watcher's checkpoint and the sync it started) shared a single scratch git index, and one resetting it mid-flight truncated the other's tree. Each composition now uses its own scratch index, and indexes left by killed processes are swept. Files recorded as falsely deleted are still in history and can be restored from an earlier checkpoint. (#13195 by @jdx)$MISE_STATE_DIR/history/), or started with a differentMISE_STATE_DIRthan the shell, kept running the old process without watching the current store, whilemise bootstrap services applyconsidered the unchanged service converged and skipped it.services applynow restarts ahistory-watchservice whose process is not watching this store, andmise doctorandmise dot statusreport "running but not watching this store" instead of "not running" (service-not-watchinginmise dot status --json). Users already in this state are recovered by runningmise bootstrap services apply. (#13190 by @jdx)lockfile = truein effect, an npm tool pinned in the global config was resolved with a graph-specific install identity that no automatic flow could persist, so everymise exectreated the installed tool as unsatisfied, re-ran an install pass, and warned that it was missing. Global requests now stay version-only unless resolved from an explicitly generated revision 2 global lockfile; opt in withmise lock --global. (#13186 by @jdx)404 Not Foundon the manifest because GitHub only serves private release assets through its API, not thereleases/download/URLs a packslip records. mise now falls back to the API asset endpoint using the same credentials as thegithub:backend (MISE_GITHUB_TOKEN,GITHUB_API_TOKEN, orGITHUB_TOKEN) with no configuration changes; signature, identity, digest, and size verification are unchanged. Tags containing/(such as@biomejs/biome@2.5.2or monorepotool/v1.0.0tags) and#are also resolved correctly now. Non-GitHub hosts and GitHub Enterprise are not covered. (#13188 by @jdx)mise activate pwsh,mise exec -- pnpm --versionfailed withunexpected argument '--version'because PowerShell's parameter binder removes the first bare--before themisewrapper function sees its arguments. The wrapper now recovers the separator from the raw invocation line, fixingmise exec/mise x,mise tasks add,mise dotfiles capture,mise oci run,mise generate git-pre-commit, andmise bootstrap;mise runwas not affected. Open sessions pick up the fix the next timemise activate pwshruns (normally at shell start). The doubledmise exec -- -- cmdworkaround now fails in an activated shell, as it always did without activation, so drop back to a single--. (#13202 by @jdx)dbt-fusioninstall test now expectsdbt <version>, matching whatdbt --versionactually prints. (873c400 by @jdx)Documentation
Full Changelog: jdx/mise@v2026.9.8...v2026.9.9
💚 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.9.8: : Top-levelmise dotcommand, faster brew bootstrap installs, and npm safety-check fixesCompare Source
Dotfile management moves to the top level as
mise dot, Homebrew bootstrap installs run their download, extraction, and linking stages concurrently, and several install paths are corrected: embedded aube reputation gates now report the real reason and honor--yes, PyPI tools fall back to version-only installs when a dependency graph cannot be built, lazy tools no longer triggermissing:warnings, and lockfiles no longer resurrect disabled backends.Added
dotfiles: The full dotfiles command tree is now available as
mise dotfiles, withmise dotas a short alias.mise bootstrap dotfilesremains supported and all three spellings share the same behavior, including bootstrap hooks aroundapply. Generated history-watch services now invokemise dot watch. (#13158 by @jdx)dotfiles: Enabling encryption on a file that was previously saved in plaintext left older commits that blocked sync.
mise dot sync --allow-plaintext-historylets that history reach the origin for one run, and the global-only settingsettings.history.allow_plaintext_history = true(defaultfalse, envMISE_HISTORY_ALLOW_PLAINTEXT_HISTORY) does the same for sync, publish, the history watcher, and incoming history on pull. New saves still follow the file's encryption policy; the history guide also documents how to remove the old commits instead. (#13175 by @jdx)registry: Added
poppler(conda:poppler), providingpdftotext,pdfinfo,pdftoppm,pdftocairo,pdfunite, and the other Poppler PDF utilities. (#13133 by @i-api)Fixed
user aborted mise adderror when stdin is closed or no terminal is attached. Non-interactive installs now report the measured signal (for example 569 weekly downloads against the 1000 threshold) and suggest the mise-native fix,allow_low_downloads = trueon the tool; an explicit "no" reportsuser declined to add <package>. An explicit CLI--yesnow reaches the aube prompt and approves it, including auto-installs throughuse,exec,run,shell, andupgrade; CI mode and a configuredyes = truesetting alone do not approve reputation gates. (#13123 by @jdx)mise installofpypi:/pipx:tools no longer fails when a uv dependency graph cannot represent the package or its configuration, such as a source-only dependency or free-formuvx_args/pipx_args. mise warns and falls back to the version-only install path, reusing an existing version-only installation on later runs.mise lockandmise install --lockedremain strict and still reject unsupported arguments or dependencies without usable wheels. (#13170 by @jdx)lazy = trueare no longer reported asmissing: <tool>when entering a project or running a baremise install, regardless ofstatus.missing_tools; ordinary missing tools are still reported as before. (#13169 by @jdx)disable_backends. When a parentmise.lockpins a shorthand such asyarntoasdf:yarnand a child project disables asdf,mise tool yarn --backendand a fresh childmise locknow select the first enabled recorded backend or fall back to the enabled registry backend (aqua:yarnpkg/berry) instead of the disabled pin. The parent lockfile is left unchanged and explicitly installing a disabled backend still fails. (#13178 by @jdx)Changed
mise bootstrap packages applyinstalls Homebrew packages substantially faster. Formula metadata for each dependency frontier is fetched concurrently, bottles are extracted, relocated, signed, and receipted concurrently, and each job now downloads and prepares its own bottle so prepared bottles are committed as soon as dependency order allows. All stages respect the existingjobslimit with no new settings; Cellar commits and prefix linking stay dependency-ordered,opt/<name>is linked last so an interrupted install cannot look complete, and a failure cancels queued work while cleaning up in-flight staging. On Apple silicon, a fresh install ofbrew:jq brew:tree brew:wget brew:just brew:shellcheckdropped from roughly 6.6s to 4.0s, and dependency resolution forbrew:ffmpegfrom 288ms to 112ms. (#13151, #13152, #13155 by @jdx)Documentation
mise.lockguides now open with quick-start and everyday workflows (mise use node@24 npm:prettier,mise use python@3.14 uv pypi:black,mise lock,mise install --locked) and group dependency-graph locking, sidecar management, and strict-mode details afterward. The lockfile guide clarifies that URL-lock exemptions do not exempt dependency graphs from validation. (#13149 by @jdx)Full Changelog: jdx/mise@v2026.9.7...v2026.9.8
💚 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.9.7: : Lockfile revision 2 with npm and Python dependency graphs, dotfile conflict inspectionCompare Source
This release introduces
mise.lockrevision 2, which records complete transitive dependency graphs for npm tools (via embedded aube) and Python tools (via uv) in native sidecar files, and addsmise bootstrap dotfiles conflictsfor inspecting dotfile sync conflicts before resolving them. It also lets dotfile templates consume bootstrap secrets, stopsminimum_release_agefrom rejecting versions already committed to a lockfile, and closes a security gap inhistory.describe_command.Added
lock: Lockfile revision 2 records the full dependency graph of npm tools installed by embedded aube and of
pypi:tools installed by uv, then replays it with a strict frozen install so two projects on the same top-level version can still receive their own reviewed transitive graph. Graphs live in native sidecar files (uv.lock/aube-lock.yamlplus a manifest) under.mise/locks/<backend-tool>/<version>/, referenced frommise.lockby relative path and SHA-256 digest, so the lockfile itself stays small. Commit the sidecar directory withmise.lock. New lockfiles use revision 2; existing revision 0 and 1 files keep their format until you runmise lock --upgrade.mise lock --bump <tool>refreshes a tool's transitive graph even when its top-level version is unchanged, ordinarymise installvalidates and accepts hand-edited sidecars, andmise install --lockedrejects digest mismatches until you runmise lock. Python graph locking requires uv 0.12.10 or newer and published wheels for the target platform; Git sources, standalone pipx installs, and free-formuvx_args/pipx_argsstay version-only. (#13131, #13146 by @jdx)pypi:
pypi:is now the preferred name for the Python CLI backend;pipx:remains fully supported as an alias with no warnings, and settings accept bothpypi.*andpipx.*names. The two spellings are distinct tool identities (pypi-blackvspipx-blackinstall directories and lock entries), so switching spelling creates a new installation. (#13146 by @jdx)bootstrap:
mise bootstrap dotfiles conflicts [PATH...]shows a read-only comparison of the saved local and fetched remote versions of a conflicted dotfile so you can decide between--take-remoteand--keep-localwith full context. The default output is a unified diff including file-mode changes;--difftoolopens the configured Gitdiff.tool(falling back tomerge.tool) and--tool <name>picks one explicitly. Encrypted contents are decrypted only into private temporary files, and inspection never modifies either side or marks the conflict resolved. Bootstrap secrets are also now resolved from the same composed config maps as dotfile discovery, so root-scoped dotfile templates can use secrets declared by their bootstrap root. (#13144 by @jdx)dotfiles: Dotfile templates (
mode = "template") can reference[bootstrap.secrets]values with{{ secret(name="...") }}, matching managed bootstrap file templates. Dotfiles commands that render templates (add,apply,diff,edit,status,unapply) accept--prompt-secrets; without an available value, rendering fails closed. A fullmise bootstraprun preflights dotfile templates before making changes,mise bootstrap statusreports secrets used only by dotfiles, and textual diffs redact resolved secret values. (#13140 by @jdx)Fixed
mise.lockno longer fails when the locked release is younger thanminimum_release_age. The cutoff still applies when resolving unlocked fuzzy requests and when generating or bumping a lockfile, andnpm:/pypi:still forward it to unpinned transitive dependencies, but a reviewed lock entry now reproduces immediately in CI instead of waiting for the release to cool. (#13128 by @jdx).python-version(or other idiomatic version file) containingsystemselects the system interpreter without printing the mise-specific@systemdeprecation warning, matching the existing.tool-versionsexception. Explicitpython@systemrequests from mise configuration or command arguments still warn. (#13132 by @jdx)mcshorthand usesaqua:minio/mcagain now that the upstream Aqua registry entry is restored, withasdf:mise-plugins/mise-mckept as the fallback. (#13124 by @jdx)Security
history.describe_commandis now global-only. Previously an implicitly trusted project could set it and have a later dotfiles history checkpoint execute the project-controlled command with unencrypted tracked-file diffs. The setting is honored only from system/global configuration orMISE_HISTORY_DESCRIBE_COMMAND; project values are ignored with a warning. (#13134 by @jdx)mise oci buildnow renders dotfile templates with a restricted engine:secret()is rejected and theenvcontext,get_env(),exec(), andread_file()are unavailable, so ambient credentials cannot be baked into a publishable image layer. (#13140 by @jdx)Breaking Changes
mise lock --upgrade. Upgrade collaborators and CI to this release before committing a revision 2mise.lock, and commit the.mise/locks/(or.config/mise/locks/) sidecar directory alongside it. Revision 2--lockedinstalls fail if a recorded graph is missing or its digest does not match. If you gitignoremise.local.lock, also ignore its matching sidecar subdirectory (for example.mise/locks/mise.local/).history.describe_commandin project configuration is ignored. Move it to~/.config/mise/config.tomlor setMISE_HISTORY_DESCRIBE_COMMAND.mise oci builddotfile templates can no longer callsecret(),get_env(),exec(), orread_file()or read theenvcontext.Full Changelog: jdx/mise@v2026.9.6...v2026.9.7
💚 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.9.6: : Project daemons, mise doctor project, and vfox backend tool discoveryCompare Source
This release adds experimental project daemons backed by pitchfork, a
mise doctor projectcommand for project-declared diagnostic checks, and tool discovery from vfox backend plugins inmise search. It also changes the HTTP backend's default install layout so uninstall and prune reclaim disk space, speeds up warmlockfile_mode = "generate"installs and repeated OCI builds, and fixes a batch of nushell, monorepo, lockfile, brew, and Windows bootstrap issues.Highlights
[daemons]declares background processes and PostgreSQL/Redis presets inmise.toml, managed throughmise daemonsand optionally started when you enter the project.[doctor.checks.<name>]lets projects declare their own environment probes formise doctor project.mise search, shell completion, and interactivemise usenow include tools published by installed vfox backend plugins, andsettings.truncate/--no-truncatedisable terminal-width truncation (automatically when a coding agent is detected).shared_extraction = true), warm generate-mode installs skip needless lockfile rewrites, and OCI builds share a local tool-layer cache.Added
daemons: New experimental
[daemons]section andmise daemonscommand family (start,stop,restart,ls,status,logs,tui) manage project background processes with pitchfork. PostgreSQL and Redis presets install the database as a tool (participating in lockfiles), supply connection environment variables and readiness checks, and keep project data across stop/start. Daemons withauto = ["start", "stop"]start when entering the project from an activated Bash, Zsh, or Fish shell and are released when the last shell session leaves. Requiresexperimental = trueand pitchfork 2.25.0 or later; database presets are Unix-only and PostgreSQL uses loopback trust authentication intended for local development. (#13085 by @jdx)doctor:
mise doctor projectruns checks declared in[doctor.checks.<name>]with the project's environment and installed tools, reporting PASS/FAIL/error/skipped per check in text or--json. Checks supportdescription,hint,timeout(default10s),dir,shell, andosselectors, run concurrently under thejobslimit, and exit nonzero when any check fails. Ordinarymise doctordoes not run them, and hints are never executed. A follow-up aligneddirresolution with task conventions (config root for project configs including~/mise.toml,~/expansion), fixed head-of-line blocking when one probe hangs, and keptnohup mise doctor projectalive on SIGHUP. (#13062, #13089 by @jdx)vfox: Tools provided by installed vfox backend plugins now appear in
mise search, shell completion, and interactivemise use, namespaced as<plugin>:<tool>. Plugins can implementBackendListToolsfor a finite catalog and/orBackendSearchToolsfor query-driven discovery in large ecosystems; a prefixed query likenpm:eslintis routed only to that plugin. Results are cached, slow plugins fall back to stale cache, and existing plugins need no changes.mise registryremains registry-only. (#13111 by @jdx)cli: New
settings.truncate(andMISE_TRUNCATE, defaulttrue) controls terminal-width shorteningConfiguration
📅 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.