Skip to content

chore(deps): update dependency jdx/mise to v2026 - #220

Open
renovate[bot] wants to merge 1 commit into
scipfrom
renovate/jdx-mise-2026.x
Open

renovate[bot] wants to merge 1 commit into
scipfrom
renovate/jdx-mise-2026.x

Conversation

@renovate

@renovate renovate Bot commented Jul 20, 2026 •

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update New value References Sourcegraph
jdx/mise uses-with major 2026.10.2 source code search for "jdx/mise"

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.10.2: : Experimental spinel backend, typed tool options in the schema, and daemon presets on Windows

Compare Source

This release adds an experimental spinel: backend for compiling Ruby CLIs to native binaries. The mise.toml schema now checks each backend's own tool options, and daemon presets work on Windows. It also includes fixes for shell activation with untrusted configs, task timeouts and Windows quoting.

Added
  • Experimental spinel: backend. It builds a Ruby command-line tool from a GitHub repository into a native executable using Spinel, Matz's Ruby AOT compiler. Versions come from git tags through git ls-remote, so listing them doesn't call the GitHub API. Available options: entrypoint, bin, tag_prefix, source_ref and spinel. You need the spinel compiler on PATH (mise doesn't install it yet) and mise settings experimental=true. It works on macOS and Linux only, and it may be removed later if it becomes a maintenance burden. Based on nateberkopec/mise-backend-spinel. #​13922

    [tools."spinel:tobi/try"]
    version = "1.10.1"
    entrypoint = "try.rb"
    bin = "try"
    tag_prefix = "v"
  • Typed tool options in the JSON schema. Editors that use schema/mise.json now validate and autocomplete options for each backend, based on the tool's prefix. This covers github, gitlab, forgejo, ubi, http, s3, aqua, cargo, npm, pypi/pipx, gem, go, conda, spm, packslip and spinel. It also covers core-tool options for python, java, rust and dotnet, per-platform overrides (platforms.<os>-<arch>) and [tasks.*.tools] tables. For example, a numeric asset_pattern or java release_type = "stable" is now flagged. Boolean options accept true/false, "true"/"false" and 1/0, the same values mise accepts. lazy_bins accepts a single string. The deprecated experimental_monorepo_root key is allowed again. Runtime behavior is unchanged, but your editor may now flag mistakes in existing configs. #​13924

  • Daemon presets on Windows. mise daemons start no longer refuses preset daemons on Windows. Every preset except redis, which has no Windows build, now runs under pitchfork's default cmd /C shell. For PostgreSQL to stop cleanly, you need pitchfork 2.29.0 or later. PostgreSQL also won't start from an elevated prompt. Windows reserves some port ranges for Hyper-V and WSL, so a preset's default port can be blocked. If it is, set a different one with ports. #​13929 by @​JamBalaya56562

    [daemons.db]
    preset = "postgres"
    version = "18"
    options = { database = "app" }
  • Install mise with packslip. The installation guide now covers installing mise's signed release without running an install script. packslip verifies the Sigstore signature and the archive digest. mise self-update works with this install method. #​13710

    packslip install github.com/jdx/mise --pin ps1_nlhmwtfeufglxv5myvwvronk7a
Fixed
Config and activation
  • An untrusted project config no longer breaks shell activation. Before, mise hook-env failed completely, so tools and env from your trusted global config were not applied either. Now it skips the untrusted file, prints the usual one-time warning and loads everything else. Explicit commands such as mise run and mise x still error on untrusted configs. #​13919
  • A failed settings reload is reported as an error instead of crashing. Commands such as mise install, mise use, mise upgrade and mise ls-remote --prerelease reload settings partway through. Before, a failed reload aborted mise with SIGABRT and a core dump. Now mise prints failed to reload settings with the cause and keeps using the previous settings. #​13925
  • --no-config and MISE_NO_CONFIG=1 now skip .miserc.toml discovery. Before, a malformed project, global or system miserc broke commands like mise --no-config version. #​13926 by @​donbeave
Tasks
  • A timed-out task fails even if it exits cleanly. On Unix, a task that caught SIGTERM and exited 0 after its timeout was reported as successful. Now mise run reports timed out and exits non-zero. #​13930 by @​Marukome0743
  • Timed-out tasks on Windows can clean up. When a task hits its timeout, mise now sends it Ctrl+C and gives it 5 seconds before ending its process tree, the way Unix uses SIGTERM followed by SIGKILL. For example, PowerShell finally blocks now run. Only the timed-out task gets the Ctrl+C. The whole-run mise run --timeout still stops tasks immediately on Windows. #​13889 by @​JamBalaya56562
Windows
  • mise exec -- cmd /c keeps double quotes. Before, mise exec -- cmd /c 'echo "a b"' printed \"a b\". Pitchfork daemons with mise = true whose run contained a quote, such as a quoted program path with a space, also failed to start. mise now passes a single quoted command after /c or /k to cmd unchanged. #​13887 by @​JamBalaya56562
  • Task daemons with init steps start under cmd.exe. Before, they failed with 'exec' is not recognized. On Windows, mise now builds the command with cmd quoting and escaping. Write init steps as cmd commands. #​13928 by @​JamBalaya56562
Other
  • packslip follows repositories that moved to a new owner. mise now treats a transfer like a rename, matching on repository ID with a one-time warning. It still refuses a different repository that reuses a deleted repository's name. Refusal messages now tell you which records to clear: mise packslip forget, the tool's mise.lock entries, or both. Existing pins and lockfile entries still load. #​13710
  • mise dot save and history sync work after a tracked directory is replaced by a symlink. Before, they failed while reading older checkpoints. #​13931
Registry
  • helmfile (1.8.1 and later) and dagu (2.18.0 and later) now install from signed packslip manifests. Older versions still install through aqua:. To list them, run mise ls-remote aqua:helmfile/helmfile or mise ls-remote aqua:dagucloud/dagu. #​13933
  • New aqua packages: goccy/tobari, ymmt2005/pbschema-lens.

Full Changelog: jdx/mise@v2026.10.1...v2026.10.2

💚 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.1: : Task timeout and Ctrl-C fixes, Windows daemon and shim fixes

Compare Source

This release is mostly bug fixes. mise run now stops tasks properly when --timeout expires or you press Ctrl-C. Task daemons and native shims work better on Windows. core:rust now follows mise.lock and picks up new stable and beta toolchains. Lockfile, GitHub asset selection, Homebrew cask and plugin update problems are also fixed.

Fixed
Tasks
  • mise run --timeout now stops the tasks it was running. Before, mise printed the timeout error and exited, but the task processes could keep running in the background. Now the whole-run timeout (--timeout or the task.timeout setting) stops tasks the same way a per-task timeout does. On Unix, mise sends SIGTERM and then SIGKILL after 5 seconds. On Windows, it runs taskkill /F /T. Tasks with raw = true are not stopped by the whole-run timeout. #​13876 by @​Marukome0743
  • A single Ctrl-C lets tasks shut down cleanly. Before, one Ctrl-C could make mise exit right away while tasks were still cleaning up. This happened in three cases: a task that runs mise run itself got SIGINT twice; a tool like docker compose up treated the duplicate SIGINT as a force-quit; and a task that exits non-zero on SIGINT caused mise to send SIGTERM to its sibling tasks. Now mise waits for tasks to finish and then exits with status 130. A second Ctrl-C still force-quits. #​13904
  • Tab completion for the :task shorthand. In a monorepo, mise run :<TAB> now suggests tasks from the current config root, and task flags complete after the shorthand. #​13882 by @​pikeas
Daemons
  • Task daemons start on Windows. A daemon declared with task = failed under cmd /C with 'exec' is not recognized. mise now registers it as an argv command that pitchfork starts without a shell, so args reach the task exactly as written on every platform. This needs pitchfork 2.28.0 or later. With an older pitchfork, mise shows an error that tells you to upgrade, for example with mise use pitchfork@latest. Task daemons that use init still run through a shell, so they still don't work under cmd /C. #​13714 by @​JamBalaya56562

  • Daemon run commands can use [env] and [vars]. Before, a template such as {{ vars.test_var }} failed with Variable 'vars' is not defined. mise x now renders the command when the daemon starts, using the project's [env], [vars] and mise template filters. Pitchfork's own variables, such as {{ name }}, still work. This applies only to run and requires a pitchfork release newer than 2.29.0. #​13894

    [vars]
    greeting = "it's"
    
    [daemons.hello]
    run = "exec echo {{ vars.greeting | quote }} from {{ name }}"
Windows shims
  • No more endless process chains from duplicate shim copies. If two copies of mise-shim.exe were on PATH (for example, one from winget's Links directory), they could keep calling each other through mise x. Running mise-shim by its own name now exits with an error. If mise x resolves a tool to another shim copy, mise stops after one step and names the PATH directory to remove. #​13681 by @​JamBalaya56562
  • Node IPC works through the node.exe shim. A Node parent that spawned the shim with an 'ipc' stdio entry used to wait forever. JSON IPC messages and disconnects now pass through the shim. Passing socket or server handles over the channel is still not supported. #​13903
Rust
  • mise upgrade rust updates stable and beta. mise didn't recognize rustup 1.29's new update available: text. Even when it detected an update, the upgrade skipped the toolchain as already installed. mise now reads both spellings, counts only updates for the toolchain it manages, and updates the toolchain in place. If the update fails, the old toolchain stays usable. #​13898
  • core:rust follows mise.lock. mise mistook rustup's symlinks for mise linked versions, so it ignored the lockfile and installed the newest version even with locked = true. #​13915
Backends, lockfiles and bootstrap
  • GitHub auto-detection no longer installs metadata files. SBOMs, signatures, checksums and other sidecar files with platform names, such as *.tar.gz.sbom.json, could be chosen as the tool and saved to mise.lock. Automatic selection now skips them. Explicit url and asset_pattern options are unchanged. #​13908
  • mise lock removes outdated duplicate entries. After you changed a tool option, for example by adding uvx = false to a pipx: tool, mise lock --upgrade could leave the old unbound entry next to the new bound one. Unfiltered mise lock runs now remove the old entry, unless it has platform data (checksum or URL) that the new entry doesn't have. #​13909
  • Aqua registry cache errors after upgrading. Compiled registry caches from earlier versions could load but then fail when a package was resolved. mise now ignores those caches and rebuilds them. #​13884
  • Packslip installs retry missing skills. If the binary installed but a declared skill couldn't be fetched, mise still marked the install as complete. Now the install fails with an error. The next mise install fetches only the missing skills and doesn't reinstall the tool. #​13885
  • Pkg-based brew-cask packages are no longer reinstalled on every run. Casks such as google-drive list package IDs for several architectures, and mise expected every one of them to be installed. Receipts now store only the patterns that match on your machine. Casks recorded by earlier versions are reinstalled once to write a corrected receipt. #​13893
  • mise plugins update works when the remote isn't named origin. This happens, for example, when git's clone.defaultRemoteName is set to something else. mise uses origin if it exists and otherwise uses the first remote. #​13914
Changed
  • mise skills sync, the table output of mise skills ls, and other human-facing messages now show paths under your home directory with ~. This includes output from mise deps install, task source lines, mise completion --install and daemon messages. --json output and script-oriented commands still print full paths. #​13910

Full Changelog: jdx/mise@vfox-v2026.10.0...v2026.10.1

💚 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.0: : Stricter signer checks for cosign and GitHub attestations, trust for inline options in .tool-versions

Compare Source

This release tightens supply-chain verification. Keyless cosign bundles must now match a pinned signer identity, and GitHub attestation workflow checks no longer accept partial matches. It also closes a .tool-versions trust gap that could leak GITHUB_TOKEN, adds a per-cask appdir option for Homebrew casks, and fixes problems with locked SLSA installs, musl hosts and mise backends switch.

Security
  • Inline tool options in .tool-versions now require trust. This is the .tool-versions version of the mise.toml fix in 2026.9.18. An untrusted project could ship a github: entry with inline options, such as [api_url=...], pointing at another host. Commands such as mise ls, env, current, outdated and latest would then send your GITHUB_TOKEN to that host without asking for trust. Any entry whose tool name contains [ now requires trust, the same as Tera templates. Plain lines like node 20.0.0 still load without trust, and a [ inside a comment is ignored. Run mise trust for projects you rely on. MISE_SAFE=1 still skips trust checks. (GHSA-wcqh-j26q-g44x) #​13869
  • Keyless cosign verification now checks who signed. Before, the aqua backend only checked that a bundle chained to Sigstore's Fulcio CA. Any GitHub Actions workflow in any repository can get such a certificate, so a bundle signed by the wrong workflow would still pass. mise now applies the registry's --certificate-identity[-regexp], --certificate-oidc-issuer[-regexp] and --certificate-github-workflow-{repository,ref,name,trigger,sha} options to the signing certificate. It does this for both current and legacy bundles. Keyless verification now requires a pinned identity, and an unknown or empty --certificate-* option is an error. Key-based verification (--key) is unchanged. Registry patterns that use RE2 \Q…\E quoted literals, such as the one for vfox, are supported. #​13875, #​13879
  • GitHub attestation signer workflow matching is anchored. The expected signer_workflow must now match the end of the certificate's workflow path as whole path segments. Before, it was a substring match against the whole identity, so a longer workflow file name such as release.yml.evil.yml, or a ref that contained the expected path, would pass. An empty signer_workflow now fails verification. Both the bare form (.github/workflows/release.yml) and the repository-qualified form (owner/repo/.github/workflows/release.yml) still work. #​13877
Added
  • Per-cask app directories. A brew-cask: bootstrap package can set its own appdir. This overrides the global MISE_BREW_CASK_OPT_APPDIR setting, expands ~/, and also applies to the cask's dependencies. #​13865

    [bootstrap.packages]
    "brew-cask:1password" = { appdir = "/Applications" }

    The setting only applies to installs and upgrades: apps that are already installed are not moved. A first install into a new appdir won't replace an existing app it doesn't own unless you set adopt = true. Other package managers ignore appdir and print a warning.

  • slsa_signer_identity and slsa_signer_issuer options for aqua tools. These work the same as in the github backend. They let mise lock verify and record SLSA provenance for packages whose registry entry has no signer, such as aqua:google/osv-scanner. You must set both options to non-empty strings, and together they override any signer in the registry, including version overrides. #​13856

  • Registry: cloudflare-cf, Cloudflare's cf CLI, which is in beta and installs from npm:cf. It provides the cf and cloudflare binaries. Pin a beta version for now, such as mise use cloudflare-cf@1.0.0-beta.10. An unpinned install currently resolves to an unrelated old 0.x release. #​13871

  • Docs: a new Releases page (under About in the docs) shows a timeline of release sizes, the issues each release resolved, and expandable release notes. #​13855

Fixed
  • Locked SLSA installs work again without a registry signer. Since 2026.9.17, a lockfile that recorded a checksum and SLSA provenance failed with "Aqua registry metadata has no signer_identity and signer_issuer" for tools such as aqua:google/osv-scanner and aqua:fluxcd/flux2. A lock entry with a checksum and recorded provenance is now trusted for SLSA too: the install only checks the artifact digest, as it already did for other provenance types. locked_verify_provenance or paranoid mode still re-verify and still require a signer. #​13856
  • aqua on musl hosts. On Alpine and other musl hosts, an aqua tool whose registry entry only names a glibc build (such as zizmor) failed with "no asset found: ...-unknown-linux-musl...". mise now installs the asset the registry names. The binary still needs glibc or gcompat to run. mise lock for linux-x64-musl records the same asset. #​13857
  • mise backends switch handles stale lock entries. Sometimes mise install warned that a tool was locked to a replaced backend, for example asdf:clojure instead of vfox:jdx/vfox-clojure, but mise backends switch then reported there was nothing to switch. This happened when the config's version no longer matched the lock entry. The command now switches those entries too. Entries at a version the config no longer resolves to are relocked at the config's version and reported as replacing stale <tool>@<version>. #​13859
  • Ctrl-C exits with status 130. Interrupting mise install, upgrade, exec and similar commands used to exit with 1, the same as an ordinary failure. They now exit with 130 (128 + SIGINT), matching mise run, so shells and scripts can tell when a user interrupted. A repeated Ctrl-C during mise run also exits with 130. This applies on Unix and Windows. #​13862
  • Declining a trust prompt skips the config for that run. Before, declining still failed the current command with "not trusted". #​13868
  • The one-time startup migration for stale latest runtime directories has been removed. It was due to expire in this release and would have blocked normal installs. mise install still repairs a stale latest directory, but passive commands such as mise ls no longer touch it. #​13868
  • Stale dotfile history watchers are diagnosed. A history watcher started on an older mise can fail every capture with an unknown-field error for newer settings such as exclude. mise doctor and mise dot status now report that the watcher is outdated and tell you to run mise bootstrap services apply, which restarts it. #​13864
  • Java: the missing-metadata error now names the target platform, for example no metadata found for version zulu-8 on windows-arm64. #​13873 (@​jsiu93)
Breaking Changes
  • --from-git removed from mise bootstrap. mise bootstrap --from-git and mise bootstrap remote --from-git now fail with an unexpected-argument error. Use --adopt, which has been the documented flag since 2026.9.3: #​13872

    mise bootstrap --adopt git@github.com:me/dotfiles.git
  • vfox tool plugins that use keyless cosign must pin an identity. If a PreInstall attestation sets cosign_sig_or_bundle_path without cosign_public_key_path, it must also set cosign_certificate_identity or cosign_certificate_identity_regexp. You can also set cosign_certificate_oidc_issuer. Without an identity, the attestation is rejected. Registry entries that already work with the aqua CLI are not affected. #​13875

  • Alpine/musl: if a registry entry names a gnu asset but the release also ships a musl build, mise now installs the gnu build. Before, it switched to musl. Set libc = "musl" on that tool to keep the musl build. #​13857

  • Exit code on Ctrl-C: scripts that checked for exit status 1 after an interrupt should now check for 130. #​13862

New Contributors

Full Changelog: jdx/mise@vfox-v2026.9.20...v2026.10.0

💚 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.18: : Remote config includes, OCI task catalogs, and a trust fix for inline tool options

Compare Source

mise.toml can now include a shared config file from a git repository or OCI registry, and task_config.includes accepts OCI artifacts. The release also closes a trust bypass that could send GITHUB_TOKEN to an attacker-controlled host, adds gem registry sources, and fixes several daemon and dotfiles problems.

Security

  • Inline tool options now require trust. Before this change, a mise.toml in an untrusted directory could hide options in a tool key, for example a github: tool key with [api_url=...] pointing at another host. mise loaded the file without trust because the value was a plain version string. Commands such as mise ls, env, current, outdated, upgrade --dry-run and latest then sent GITHUB_TOKEN to that api_url. Now any tool key that contains [ requires trust, the same as { ... } option tables already did. Plain keys like node or "cargo:eza" still load without trust. If you use inline options in a project you haven't trusted yet, run mise trust. MISE_SAFE=1 still skips trust checks entirely. #​13849

Added

  • Include shared config from git or OCI. Organizations can keep tool versions, env and hooks in one place and pull them into every repo: #​13843

    include = [
      "git::<repo-url>//mise.toml?ref=main",
      "oci::ghcr.io/myorg/platform-config@sha256:0f1e2d3c...",
    ]
    
    [tools]
    node = "22"   # the file's own entries override the included ones

    A git:: include points at a .toml file in a repository. An oci:: include points at an artifact with a mise.toml at its root. The included file is merged beneath the file that includes it, and a later include overrides an earlier one. It uses that file's trust, config root and lockfile. A fragment may contain [tools], [tool_alias], [env], [vars], [hooks], [alias], [shell_alias], [plugins], [wrappers] and min_version. Anything else is an error, including nested include, [settings], tasks, [dotfiles] and [daemons].

    • An untrusted config never fetches, and safe mode never fetches for project config.
    • Paranoid mode requires a full commit sha or an OCI digest.
    • Fragments are cached in MISE_CACHE_DIR/config-includes. Pinned refs are never fetched again. Branches and tags are refreshed after fetch_remote_versions_cache expires, and only by commands that check remote versions, such as install, up and use. If a refresh fails, the cached copy is used with a warning.
  • OCI task catalogs. task_config.includes accepts oci:: references, in addition to git::. The artifact is pulled, verified against its digests, cached in MISE_CACHE_DIR/remote-oci-tasks-cache, and loaded like a local task directory. Credentials come from docker login/podman login. Artifacts with symlinks or special files are rejected. Signatures are not verified, so pin @sha256: if you need the contents to stay the same. #​13820

    [task_config]
    includes = ["oci::ghcr.io/myorg/shared-tasks:1.0.0"]
    oras push ghcr.io/myorg/shared-tasks:1.0.0 build.toml scripts/deploy
  • mise bootstrap --from accepts ?ref= to select a branch, tag or commit, for example mise bootstrap --from 'git::<repo-url>?ref=v1'. The git:: prefix is optional. With --update, mise resolves the ref on origin again and fast-forwards branches. A ref that was deleted upstream is an error. #​13822

  • Install a gem from a specific registry. The new source option sends version lookup and install for one gem to that registry, and leaves the machine's gem sources unchanged. Credentials in the URL are redacted from logs and install metadata. #​13391 (@​waynehoover)

    [tools]
    "gem:internal-tool" = { version = "latest", source = "<registry-url>" }

    A GitHub Packages source (the rubygems.pkg.github.com host) without credentials now uses the GitHub token mise already resolves. The token needs read:packages. GitHub Packages has no versions API, so you must pin an exact version there. #​13832 (@​waynehoover)

  • mise lock --sidecars lists the native dependency sidecar directories (aube for npm, uv for Python) that must be committed along with mise.lock. It doesn't resolve, install or write anything. It marks missing sidecars, follows symlinked lockfiles, and supports --json for tools such as Renovate. #​13819

  • Daemon presets export their named ports as environment variables, for example CRDB_HTTP_PORT for a cockroachdb daemon named crdb, or AUTHZ_HTTP_PORT and AUTHZ_METRICS_PORT for a spicedb daemon named authz. The values include worktree offsets from port = "auto" and any ports.* overrides, so you can use them in [env] without working out the port yourself. #​13835

  • proxy_idle_timeout for daemons is now documented, typed in the JSON schema and validated. Set a duration such as "30m" to stop a proxy-started daemon, and then its dependencies, after that long without traffic. Set it to false to opt out. mise rejects true, bare numbers and values that don't look like durations, and names the daemon in the error. This requires pitchfork 2.27.0. #​13830, #​13836

  • Registry: added lstk, the CLI that replaces LocalStack's old one. Installing localstack now warns that it is deprecated and suggests mise use lstk. Registry entries can now set a deprecated message. #​13817

Fixed

  • mise generate install-script no longer panics with or without --version. The generated wrapper now passes its pinned version to the installer. Before, a wrapper named for one release could install and keep running an older one. Without --version, the pin is the release mise self-update would pick. #​13816
  • mise oci build, push and run no longer fail on a required env var when the project's [oci.env] gives it a value. You can now use a placeholder for a secret that only exists at runtime. Other commands still require the variable. #​13821
  • mise lock now prints a warning with the cause when it skips a tool, for example a GitHub rate limit, instead of only counting it as skipped. You get one warning per tool. #​13831
  • Daemons:
    • mise daemons start|stop|restart --all now works and applies to every daemon in the current project. Before, pitchfork rejected the command. --all can't be combined with daemon names or --group. #​13827
    • The first mise daemons start or restart now installs the preset's tool. Before, it failed with a false "requires ... but [tools] selects ..." error. Only the tools of the requested daemons and their dependencies are installed. #​13837
    • URLs printed for projects without an explicit [daemons_settings] namespace now route through pitchfork's proxy instead of returning 404. This needs a pitchfork that supports config add --label. mise checks for the flag itself and picks it up when pitchfork is upgraded. #​13833
    • When an automatically allocated daemon port is already taken, mise explains how to pin a different port in mise.local.toml. mise no longer adds its own error lines after pitchfork's message, and it exits with pitchfork's status. #​13839
  • Dotfiles:
    • mise dot and other commands that use mise's internal Git calls work again with Git for Windows 2.56. #​13812 (@​genskyff)
    • After an upgrade, the history watcher now notices that the mise binary was replaced, saves pending edits and exits so the service manager restarts it on the new version. A watcher started by hand with mise dot watch has to be started again. mise dot status now says when captures are failing. #​13845

Full Changelog: jdx/mise@vfox-v2026.9.19...v2026.9.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.9.17: : Self-update waits 24 hours for new releases and verifies signed packslips

Compare Source

mise self-update and the mise.run installer now pick the newest stable release that is at least 24 hours old. Updates also check the release's signed packslip before replacing the binary. This release also adds a machine-local global miserc, an opt-in way for command-not-found to install registry tools, and a postinstall mode that runs on every install. It fixes several Homebrew formula builds and closes a trust gap in paranoid mode.

Changed

  • Self-update and installs wait for a minimum release age. When no version is pinned, mise self-update, automatic updates, update notifications, and the mise.run installer now choose the newest stable release published at least 24 hours ago. Explicit versions skip the delay. An unpinned update never downgrades a newer installation, even with --force. The age is taken from, in order: --minimum-release-age, then self_update.minimum_release_age, then the global minimum_release_age setting, then 24h. Use 0s to get releases right away. #​13782

    [settings]
    self_update.minimum_release_age = "7d"
    mise self-update --minimum-release-age 0s
    curl -fsSL https://mise.run | MISE_SELF_UPDATE_MINIMUM_RELEASE_AGE=7d sh

    The installer reads environment variables only (MISE_SELF_UPDATE_MINIMUM_RELEASE_AGE, MISE_MINIMUM_RELEASE_AGE), and it accepts integer s/m/h/d/w durations. A saved copy of the installer no longer pins a default version, so set MISE_VERSION if you need reproducible installs.

  • Self-update verifies signed packslips. For releases v2026.9.3 and later, mise self-update now requires a valid signed packslip, on top of the embedded archive signature it already checked. mise checks the archive digest and size, the version, the release workflow, and the transparency-log timestamp. Trust is pinned to mise's GitHub repository ID (586920414), so a rename or move to another organization still works, but a different repository that takes over the name is rejected. If the manifest is missing or invalid, mise stops and leaves the current binary in place. Releases 2026.9.2 and older still update with signature-only checks. Custom mirrors must serve the original signed manifests and archives. #​13785

  • mise self-update now downloads with mise's own HTTP client and progress display, and extracts only the expected executable from the verified archive. Plugin-update failures during self-update now show as warnings and no longer fail the command. #​13783

  • Registry: timoni (0.35.0+) and worktrunk (0.80.0+) now install from signed packslips, which include completions and skills. Older versions still install through their existing backends, and you can list them with mise ls-remote aqua:stefanprodan/timoni or mise ls-remote aqua:max-sixty/worktrunk. #​13780

Added

  • Machine-local global miserc. ~/.config/mise/miserc.local.toml applies from any directory and overrides fields in the shared global miserc.toml. You can use it to pick an environment on one machine without editing shared files. Project miserc files, MISE_ENV, and -E still take precedence over it. #​13778

    # ~/.config/mise/miserc.local.toml
    env = ["work"]
  • Command-not-found can install tools you haven't configured (opt-in). With not_found_auto_install_registry = true, running an unknown command installs the matching registry tool at latest and adds it to your global config. This only happens when exactly one registry tool provides that command. mise skips commands with several providers, and it skips disabled tools and tools that don't support your OS. The default is false. #​13781

    [settings]
    not_found_auto_install_registry = true
  • postinstall that runs on every install. With when = "always", a tool's postinstall command runs on every mise install that selects the tool, even when that version is already installed. Dry runs skip it. The plain string form and tables without when still run only on a fresh install or repair. #​13789

    [tools]
    node = { version = "26", postinstall = { run = "npm install -g corepack", when = "always" } }
  • Warnings for outdated lockfile formats. If a lockfile format was replaced more than six months ago, mise warns once per file during commands like mise install, mise exec, and task runs. The warning shows the command to fix it: mise lock --upgrade, or mise lock --global --upgrade for a global config. #​13779

  • Per-machine email for dotfiles history commits. The new [history].git_email setting sets the commit email, and {hostname} is filled in when each commit is made, so you can tell which machine saved a checkpoint. Without the setting, commits still use mise@localhost. #​13791

    [history]
    git_email = "mise@{hostname}"

Fixed

  • Paranoid mode: --yes, MISE_YES=1, and CI auto-confirmation no longer approve trust for new or edited config files. Unattended runs now fail until you approve the file with mise trust or at an interactive prompt. #​13796
  • npm with pnpm 12: mise now passes minimum_release_age to pnpm as --config.minimum-release-age. pnpm 12 silently ignored the camelCase spelling, so the cutoff wasn't applied to transitive dependencies. The new spelling also works on pnpm 10.16+ and 11. #​13764 (@​Nagato-Yuzuru)
  • mise upgrade --bump now updates an exact-release request to the latest release with the same prefix, for example 29.1 to 29.1.1. Before, it kept the old version. #​13759 (@​ryoikarashi)
  • go: installs that resolve latest to a version no longer retry without the v prefix after a failure. That extra retry used to hide Go's original error. Explicit unprefixed versions still get the retry, and if both attempts fail, the error now shows both failures. #​13794
  • Homebrew formula builds:
    • Formulas that write files with Pathname#write no longer fail after the build with super: no superclass method 'write'. This affected generated completions (such as starship) and inreplace. #​13760 (@​jacobbednarz)
    • Formulas that include Homebrew's Language::* mixins (such as qmk) no longer fail with a NameError while mise reads them. Install-time helpers that mise doesn't support now produce a clear error message. #​13328 (@​waynehoover)
    • Source archives whose URL has no file extension, such as GitHub codeload tarballs, are now detected by their contents and unpacked. Before, they were copied into the build directory unextracted. This also applies to casks. #​13750 (@​jacobbednarz)

Documentation

  • The landing page now has a seven-minute showreel of mise, and the mise run music video replaces the theme song. #​13797, #​13799

New Contributors

Full Changelog: jdx/mise@vfox-v2026.9.18...v2026.9.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.9.16: : Per-tool libc for aqua tools, monorepo task path aliases, and packslip pins that survive repo renames

Compare Source

Aqua tools can now choose glibc or musl builds one tool at a time, and monorepo roots can get short task path aliases. Packslip tools keep installing after their GitHub or GitLab repository is renamed, because mise now pins them by repository ID, recorded in a new lockfile revision 3. SLSA provenance checks now require the expected signer identity. This release also fixes regressions in mise run --no-timings, cargo +nightly and the outdated/upgrade version comparison, and speeds up shims and config loading.

Added

  • Per-tool libc for aqua tools. On glibc Linux, mise prefers a release's gnu build even when the aqua registry names the musl one. That breaks tools whose musl build is the fully static one, such as aqua:domcyrus/rustnet. You can now pick the build for a single tool instead of changing the global libc setting. #​13701

    [tools]
    "aqua:domcyrus/rustnet" = { version = "latest", libc = "musl" }

    The option accepts glibc (or gnu) and musl. mise never falls back to the other libc for that tool. The option applies to install, mise lock, and checksum, signature and provenance lookups, and it is recorded in the lockfile's tool options. A platform that already names a libc (a musl host or a linux-*-musl lockfile platform) still wins. A version that is already installed keeps its build until you run mise install --force. mise ls-remote still uses the host libc. If a registry template uses a variable named libc, set it as vars.libc.

  • Path aliases for monorepo tasks. Deeply nested config roots can now have a short name. #​13756

    monorepo_root = true
    
    [monorepo]
    config_roots = ["foo/bar/baz/abc/123"]
    
    [monorepo.path_aliases]
    "123" = "foo/bar/baz/abc/123"

    mise run //123:build runs //foo/bar/baz/abc/123:build. Aliases also work in task dependencies, in patterns like //123:*, and in child paths like //123/sub:build. Each alias must be a single path segment, must point at a configured root, and can't overlap an existing root path. A task's full path is still its canonical name.

  • Packslip tools keep installing after a repository rename. mise now pins GitHub and GitLab packslip projects by the repository ID recorded in the signing certificate, not only by name. If old/tool is renamed to new/tool under the same owner, packslip:github.com/old/tool keeps installing and prints a warning once, asking you to update the config. You don't need mise packslip forget. mise refuses a transfer to another owner. It also refuses a different repository that takes over a pinned name, which is how a deleted and re-created name looks. To accept either one, run mise packslip forget for the old name, and for a re-created repository also remove the tool's mise.lock entries. #​13702, #​13738

    In lockfile revision 3, the IDs are stored as:

    [tools.hk."platforms.linux-x64"]
    repository_ids = { repository = "922514152", owner = "216188" }
  • mise dot track --allow-plaintext. Directly tracking a file with a credential-like name (for example ~/commit-mossy-token.md) used to report success while every history save quietly left the file out. mise dot track now asks whether to save the file in plaintext, and the default answer is No. In non-interactive use, pass --allow-plaintext. --yes does not approve plaintext. The choice is saved as allow_plaintext = true on the [dotfiles] entry. For real credentials, use --encrypt. #​13749

  • Registry: mise use mbx now resolves to mr-boxington. #​13752

Fixed

  • mise outdated and upgrade warnings no longer offer an older release as an update when the installed version has a v or V prefix. For example, v2.1.280 → 2.1.278 was shown as an update. Versions that differ only in build metadata (for example 1.36.4+k3s1 and 1.36.4+k3s2) are now treated as equal. #​13690 (@​himkt)
  • mise run --no-cache and mise tasks run --no-cache now clone remote git:: task includes again, and fetch remote tasks that run as dependencies again. Before, both kept using the cached copy. #​13697 (@​irisTa56)
  • mise run --no-timings hides each task's "Finished in …" line again, not only the run total. It also overrides MISE_TASK_TIMINGS=1. This had regressed in v2025.11.2. #​13718
  • cargo +nightly works again with rust = "nightly". Since 2026.8.6 mise installs a dated nightly, so rustup had no toolchain named nightly. Depending on rustup's auto-install setting, cargo +nightly then either failed or downloaded a second, unpinned nightly. mise now also sets up rustup's nightly-<host> toolchain from the pinned nightly, using reflinks or hardlinks. It leaves alone a rustup nightly that is newer or has extra components or targets. Explicitly dated requests such as nightly-2026-08-13 don't touch it. Existing installs pick this up on their next nightly install, or right away with mise install -f rust. #​13707
  • Running mise dot track again on a path that is already tracked now reports "already tracked". It no longer prompts, rewrites the config, or records an empty checkpoint. Changed file contents and flags that change the declaration (such as --no-autosave) are still saved. #​13648
  • Blob-pack downloads from the remote cache now retry transient stream errors, the same way single blob downloads do. #​13715

Security

  • SLSA provenance must come from the expected signer. Before, any valid Sigstore signature, even from an unrelated workflow, passed SLSA verification. mise now checks the certificate's URI identity and OIDC issuer against the values configured for the tool:

    • aqua registry entries: signer_identity and signer_issuer under slsa_provenance
    • github: tools: the slsa_signer_identity and slsa_signer_issuer tool options (the identity supports {{version}} templating)
    • vfox plugins: slsa_signer_identity and slsa_signer_issuer returned from PreInstall

    If a tool doesn't configure both values, mise skips the SLSA check and uses any other verification available. For now this applies to the bundled aqua packages that have SLSA metadata but no signer fields. SLSA lock entries are checked again on every install, even when a checksum is present. #​13725

  • Public-key DSSE bundles used by aqua and vfox verification must now have a SHA-256 subject digest that matches the downloaded artifact. Before, a valid bundle could be reused to verify a different download. #​13721

Performance

  • Shims no longer run rustup checks when rust is configured alongside other tools. The same goes for mise exec with auto-install disabled. One report measured the go shim at about 31 ms with rust in the config, compared with 12 ms without it. mise install, and mise exec with auto-install on, still detect and repair missing rustup components. #​13705
  • Config loading and fuzzy version resolution (for example node = "24") do less work: plugin shorthands are built without checking every registry tool's backends, global-config checks stop resolving symlinks for every tool, and fuzzy matching no longer compiles regexes. #​13694, #​13695, #​13696

Documentation

  • The task docs now give the correct default job count (8). They also describe the default output mode correctly: prefix when tasks run in parallel and interleave when they run in sequence. #​13716

Breaking Changes

  • Lockfile revision 3. New and empty mise.lock files are written as lockfile_version = 3, and older mise versions reject them. Existing lockfiles keep their revision when mise writes to them. When a revision 2 lockfile gets packslip repository IDs, mise warns and leaves them out. To store them, run mise lock --upgrade once everyone who shares the lockfile is on this release.
  • SLSA checks for locked tools. A lockfile entry that requires SLSA now fails with an explanation if the tool has no expected signer configured. To fix it, configure the signer or refresh the entry with mise lock.
  • Dotfiles history shared across machines. Older mise versions can't read enrollment metadata that includes allow_plaintext. Upgrade every machine that shares the history before you use --allow-plaintext.

New Contributors

Full Changelog: jdx/mise@vfox-v2026.9.17...v2026.9.16

💚 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.15: : vfox tools in OCI images, faster shell prompts, and safer dotfiles pattern matching

Compare Source

mise oci build can now package tools installed by vfox plugins, and vfox plugins can repair an existing install when its tool options change. Shell prompts, cd, and settings loading are faster. Dotfiles include/exclude patterns now follow .gitignore rules for * and a leading /, which fixes a case where rollback could delete a live file.

Added

  • vfox tools in OCI images (experimental). mise oci build used to reject every tool installed by a vfox plugin. It now builds those tools into the image, with one layer per tool plus one layer per plugin at /mise/plugins/<name>/, so mise inside the image can resolve the tool without cloning the plugin. The plugin's env hook runs on the build host. Install-dir paths are rewritten to thei

❗ Important

✂ PR body was truncated to here.


Configuration

📅 Schedule: (in timezone America/Los_Angeles)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 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.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the bot label Jul 20, 2026
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 6 times, most recently from b069281 to 4210d96 Compare July 30, 2026 03:03
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 4 times, most recently from 7255dd3 to 18a73a9 Compare August 5, 2026 03:26
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 3 times, most recently from 2752ba1 to 661a5bf Compare August 12, 2026 20:16
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 4 times, most recently from 6445a85 to c5325ef Compare August 20, 2026 23:10
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 4 times, most recently from 9dd559c to fac6f2e Compare August 26, 2026 03:48
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 4 times, most recently from 61548e9 to 844f10e Compare September 3, 2026 00:28
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 4 times, most recently from b504efd to 25c7628 Compare September 11, 2026 04:03
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 6 times, most recently from 5986910 to e80a868 Compare September 18, 2026 07:31
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 4 times, most recently from 64f8ae1 to 980f1fd Compare September 27, 2026 11:53
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch 5 times, most recently from 8db9151 to e40c39b Compare October 3, 2026 14:35
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch from e40c39b to 224319d Compare October 4, 2026 14:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants