Skip to content

Update dependency jdx/mise to v2026.9.9 - #495

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

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

Conversation

@renovate

@renovate renovate Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change Pending
jdx/mise uses-with patch 2026.9.62026.9.9 v2026.9.11 (+1)

Release Notes

jdx/mise (jdx/mise)

v2026.9.9: : Dotfiles false-deletion fix, encrypted mise dot track, semantic uv options for PyPI tools

Compare 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 --encrypt enrolls a file with encrypted history from its first checkpoint, mise bootstrap --adopt --replace-history discards unrelated local history in one shot, and pypi: tools gain lock-aware with, expose, and dependency_prereleases options. Also fixed: packslip: installs from private GitHub repositories, stale history watchers after upgrading, global npm tools being reinstalled under lockfile = true, and the -- separator in activated PowerShell sessions.

Added

  • dotfiles: mise dot track --encrypt writes encrypt = true into the tracked declaration and encrypts the initial baseline checkpoint, for files that must never have plaintext history. [history.encryption].recipients must 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 inside mise 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 --encrypt
  • bootstrap: Fresh mise bootstrap --adopt now 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-history discards it and adopts the setup repository's branch in one shot; --dry-run previews 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)

    mise bootstrap --adopt <url> --replace-history --yes
  • 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: with installs extra requirements, expose installs extra requirements and links their executables (requires uv 0.8.5 or newer), and dependency_prereleases sets uv's prerelease policy (disallow, allow, if-necessary, explicit). Setting any of them selects uv as the installer. uvx_args and pipx_args remain 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)

    [tools]
    "pypi:azure-cli" = { version = "latest", with = ["pip"], dependency_prereleases = "allow" }
    "pypi:ansible" = { version = "latest", expose = ["ansible-core"] }
  • registry: Added nubr (npm:@nubjs/runner), the Nub project's TypeScript runner for a file, package.json script, or installed bin on plain Node. (#​13191 by @​colinhacks)

Fixed

  • dotfiles: With 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)
  • dotfiles: A history watcher started before mise 2026.9.5 (which moved history locks into $MISE_STATE_DIR/history/), or started with a different MISE_STATE_DIR than the shell, kept running the old process without watching the current store, while mise bootstrap services apply considered the unchanged service converged and skipped it. services apply now restarts a history-watch service whose process is not watching this store, and mise doctor and mise dot status report "running but not watching this store" instead of "not running" (service-not-watching in mise dot status --json). Users already in this state are recovered by running mise bootstrap services apply. (#​13190 by @​jdx)
  • npm: With lockfile = true in effect, an npm tool pinned in the global config was resolved with a graph-specific install identity that no automatic flow could persist, so every mise exec treated 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 with mise lock --global. (#​13186 by @​jdx)
  • packslip: Installing from a private GitHub repository failed with 404 Not Found on the manifest because GitHub only serves private release assets through its API, not the releases/download/ URLs a packslip records. mise now falls back to the API asset endpoint using the same credentials as the github: backend (MISE_GITHUB_TOKEN, GITHUB_API_TOKEN, or GITHUB_TOKEN) with no configuration changes; signature, identity, digest, and size verification are unchanged. Tags containing / (such as @biomejs/biome@2.5.2 or monorepo tool/v1.0.0 tags) and # are also resolved correctly now. Non-GitHub hosts and GitHub Enterprise are not covered. (#​13188 by @​jdx)
  • activate: In a shell activated with mise activate pwsh, mise exec -- pnpm --version failed with unexpected argument '--version' because PowerShell's parameter binder removes the first bare -- before the mise wrapper function sees its arguments. The wrapper now recovers the separator from the raw invocation line, fixing mise exec/mise x, mise tasks add, mise dotfiles capture, mise oci run, mise generate git-pre-commit, and mise bootstrap; mise run was not affected. Open sessions pick up the fix the next time mise activate pwsh runs (normally at shell start). The doubled mise exec -- -- cmd workaround now fails in an activated shell, as it always did without activation, so drop back to a single --. (#​13202 by @​jdx)
  • registry: The dbt-fusion install test now expects dbt <version>, matching what dbt --version actually prints. (873c400 by @​jdx)

Documentation

  • The GitHub star count on mise.jdx.dev now also appears in the nav overflow menu at medium viewport widths. (#​13193 by @​jdx)

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-level mise dot command, faster brew bootstrap installs, and npm safety-check fixes

Compare 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 trigger missing: warnings, and lockfiles no longer resurrect disabled backends.

Added

  • dotfiles: The full dotfiles command tree is now available as mise dotfiles, with mise dot as a short alias. mise bootstrap dotfiles remains supported and all three spellings share the same behavior, including bootstrap hooks around apply. Generated history-watch services now invoke mise dot watch. (#​13158 by @​jdx)

    mise dot track ~/.zshrc
    mise dot status
    mise dot history
  • dotfiles: Enabling encryption on a file that was previously saved in plaintext left older commits that blocked sync. mise dot sync --allow-plaintext-history lets that history reach the origin for one run, and the global-only setting settings.history.allow_plaintext_history = true (default false, env MISE_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), providing pdftotext, pdfinfo, pdftoppm, pdftocairo, pdfunite, and the other Poppler PDF utilities. (#​13133 by @​i-api)

Fixed

  • npm: Embedded aube reputation gates (low weekly downloads, similar-name, new package name) no longer surface as a misleading user aborted mise add error 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 = true on the tool; an explicit "no" reports user declined to add <package>. An explicit CLI --yes now reaches the aube prompt and approves it, including auto-installs through use, exec, run, shell, and upgrade; CI mode and a configured yes = true setting alone do not approve reputation gates. (#​13123 by @​jdx)
  • pypi: Ordinary mise install of pypi:/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-form uvx_args/pipx_args. mise warns and falls back to the version-only install path, reusing an existing version-only installation on later runs. mise lock and mise install --locked remain strict and still reject unsupported arguments or dependencies without usable wheels. (#​13170 by @​jdx)
  • Tools declared with lazy = true are no longer reported as missing: <tool> when entering a project or running a bare mise install, regardless of status.missing_tools; ordinary missing tools are still reported as before. (#​13169 by @​jdx)
  • backend: Backend discovery from lockfiles now skips backends listed in disable_backends. When a parent mise.lock pins a shorthand such as yarn to asdf:yarn and a child project disables asdf, mise tool yarn --backend and a fresh child mise lock now 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

  • bootstrap: mise bootstrap packages apply installs 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 existing jobs limit 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 of brew:jq brew:tree brew:wget brew:just brew:shellcheck dropped from roughly 6.6s to 4.0s, and dependency resolution for brew:ffmpeg from 288ms to 112ms. (#​13151, #​13152, #​13155 by @​jdx)

Documentation

  • The npm backend, PyPI backend, and mise.lock guides 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 inspection

Compare Source

This release introduces mise.lock revision 2, which records complete transitive dependency graphs for npm tools (via embedded aube) and Python tools (via uv) in native sidecar files, and adds mise bootstrap dotfiles conflicts for inspecting dotfile sync conflicts before resolving them. It also lets dotfile templates consume bootstrap secrets, stops minimum_release_age from rejecting versions already committed to a lockfile, and closes a security gap in history.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.yaml plus a manifest) under .mise/locks/<backend-tool>/<version>/, referenced from mise.lock by relative path and SHA-256 digest, so the lockfile itself stays small. Commit the sidecar directory with mise.lock. New lockfiles use revision 2; existing revision 0 and 1 files keep their format until you run mise lock --upgrade. mise lock --bump <tool> refreshes a tool's transitive graph even when its top-level version is unchanged, ordinary mise install validates and accepts hand-edited sidecars, and mise install --locked rejects digest mismatches until you run mise 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-form uvx_args/pipx_args stay version-only. (#​13131, #​13146 by @​jdx)

    mise lock --upgrade        # move an existing lockfile to revision 2 and resolve graphs
    mise install --locked      # replay the recorded graphs
    mise lock --bump pypi:black  # refresh Black's dependencies without changing its version
  • 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 both pypi.* and pipx.* names. The two spellings are distinct tool identities (pypi-black vs pipx-black install 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-remote and --keep-local with full context. The default output is a unified diff including file-mode changes; --difftool opens the configured Git diff.tool (falling back to merge.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)

    mise bootstrap dotfiles conflicts ~/.config/mise/config.toml
    mise bootstrap dotfiles conflicts --difftool ~/.config/mise/config.toml
  • 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 full mise bootstrap run preflights dotfile templates before making changes, mise bootstrap status reports secrets used only by dotfiles, and textual diffs redact resolved secret values. (#​13140 by @​jdx)

    [bootstrap.secrets]
    api_token = "EXAMPLE_API_TOKEN"
    
    [dotfiles."~/.config/example/credentials"]
    source = "dotfiles/credentials.tmpl"
    mode = "template"
Fixed
  • lock: Installing from a committed mise.lock no longer fails when the locked release is younger than minimum_release_age. The cutoff still applies when resolving unlocked fuzzy requests and when generating or bumping a lockfile, and npm:/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)
  • config: A .python-version (or other idiomatic version file) containing system selects the system interpreter without printing the mise-specific @system deprecation warning, matching the existing .tool-versions exception. Explicit python@system requests from mise configuration or command arguments still warn. (#​13132 by @​jdx)
  • npm: Embedded aube is updated to 2.2.16, fixing the Bun checksum install regression and ensuring local npm tarballs keep their manifest package name. (#​13145 by @​jdx)
  • registry: The mc shorthand uses aqua:minio/mc again now that the upstream Aqua registry entry is restored, with asdf:mise-plugins/mise-mc kept as the fallback. (#​13124 by @​jdx)
Security
  • history: history.describe_command is 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 or MISE_HISTORY_DESCRIBE_COMMAND; project values are ignored with a warning. (#​13134 by @​jdx)
  • oci: mise oci build now renders dotfile templates with a restricted engine: secret() is rejected and the env context, get_env(), exec(), and read_file() are unavailable, so ambient credentials cannot be baked into a publishable image layer. (#​13140 by @​jdx)
Breaking Changes
  • Lockfile revision 2 is not readable by older mise versions. Newly created lockfiles use revision 2, and existing files switch only when you run mise lock --upgrade. Upgrade collaborators and CI to this release before committing a revision 2 mise.lock, and commit the .mise/locks/ (or .config/mise/locks/) sidecar directory alongside it. Revision 2 --locked installs fail if a recorded graph is missing or its digest does not match. If you gitignore mise.local.lock, also ignore its matching sidecar subdirectory (for example .mise/locks/mise.local/).
  • history.describe_command in project configuration is ignored. Move it to ~/.config/mise/config.toml or set MISE_HISTORY_DESCRIBE_COMMAND.
  • mise oci build dotfile templates can no longer call secret(), get_env(), exec(), or read_file() or read the env context.

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.


Configuration

📅 Schedule: (in timezone America/Chicago)

  • 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 requested a review from gtbuchanan as a code owner September 17, 2026 01:53
@coderabbitai

coderabbitai Bot commented Sep 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: b9f00051-3f36-4762-8446-03bfa9cb6e7c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch from 2afa3b3 to 3070c2c Compare September 17, 2026 19:54
@renovate renovate Bot changed the title Update dependency jdx/mise to v2026.9.7 Update dependency jdx/mise to v2026.9.8 Sep 17, 2026
@renovate
renovate Bot force-pushed the renovate/jdx-mise-2026.x branch from 3070c2c to a15b8f7 Compare September 18, 2026 09:07
@renovate renovate Bot changed the title Update dependency jdx/mise to v2026.9.8 Update dependency jdx/mise to v2026.9.9 Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants