ci: Bump Base Space - #128
Open
weebo-update-cli[bot] wants to merge 7 commits into
Open
Conversation
weebo-update-cli
Bot
force-pushed
the
updatecli_main_b2953c14201aba5345763c8e9cfb0eb24f27286e207e871bba1bfe716172de46
branch
14 times, most recently
from
July 20, 2026 00:36
448c932 to
ddd8b6f
Compare
added 2 commits
July 23, 2026 22:31
Made with ❤️️ by updatecli
Made with ❤️️ by updatecli
weebo-update-cli
Bot
force-pushed
the
updatecli_main_b2953c14201aba5345763c8e9cfb0eb24f27286e207e871bba1bfe716172de46
branch
2 times, most recently
from
July 23, 2026 22:33
de13bb5 to
afdfded
Compare
added 5 commits
July 25, 2026 01:57
Made with ❤️️ by updatecli
Made with ❤️️ by updatecli
Made with ❤️️ by updatecli
Made with ❤️️ by updatecli
Made with ❤️️ by updatecli
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.
Upgrade BaseSpace
Bump mise version
change detected: * key "$.base_tools.mise" updated from "v2026.7.15" to "v2026.7.16", in file "versions.yaml"
v2026.7.16
This release expands the experimental task output cache with per-run controls, a configurable cache directory, and command-derived cache inputs, and lays the groundwork for monorepo-aware task workspaces starting with Node discovery. It also teaches `mise mcp` to expose each command's read/write/destructive effect to agents, consolidates dotfiles management under `mise bootstrap`, and lands a broad batch of fixes across brew, npm, tasks, config rewriting, and OCI pushes. ## Highlights - The experimental task output cache gains per-run controls (`--task-cache` / `MISE_TASK_CACHE`), a configurable `task.cache_dir`, and `cache.command_inputs` so cache keys can fold in runtime state like compiler versions. - New experimental workspace project graph model with Node monorepo discovery (npm, pnpm, Yarn, Bun) via Aube, the foundation for monorepo-aware affected-project and task inference. - `mise mcp` can now tell agents what a command does: the new `list_commands` tool returns each command's read/write/destructive effect so agents can reason about safety before running anything. ## Added - **task:** per-run cache controls via `--task-cache <mode>` and `MISE_TASK_CACHE`, supporting `read-write` (default), `read-only`, `write-only`, `off`, and `local-only`. Read-only lets untrusted CI jobs consume existing results without publishing misses, write-only warms the cache without consuming entries, and `off` gives a clean diagnostic path while preserving normal `sources` freshness. Honored by `mise run` and bootstrap/naked task entry points. ([#11396](https://github.com/jdx/mise/pull/11396) by @jdx) - **task:** experimental `task.cache_dir` setting and `MISE_TASK_CACHE_DIR` to place task output artifacts on dedicated volumes or project-specific locations without relocating mise's entire cache. `mise cache clear` and `mise cache prune` cover the custom location. ([#11399](https://github.com/jdx/mise/pull/11399) by @jdx) - **task:** experimental `cache.command_inputs` so cacheable tasks invalidate on command-derived state (like `node --version` or a generated config fingerprint) that isn't captured by source files. Each command runs in the task directory with the resolved tool environment, and its text plus stdout/stderr hashes fold into the cache key. ([#11381](https://github.com/jdx/mise/pull/11381) by @jdx) ```toml [tasks.build] run = "..." sources = ["src/**/*.rs"] outputs = ["dist/app"] cache = { enabled = true, command_inputs = ["rustc --version"] } ``` - **task:** experimental workspace project graph model and provider interface, the ecosystem-neutral foundation for Node, Cargo, uv, and Go monorepo discovery, plus Node workspace discovery for npm, pnpm, Yarn, and Bun monorepos powered by Aube's shared manifest parsing and workspace-confined scanning. ([#11400](https://github.com/jdx/mise/pull/11400), [#11418](https://github.com/jdx/mise/pull/11418), [#11420](https://github.com/jdx/mise/pull/11420), [#11422](https://github.com/jdx/mise/pull/11422), [#11424](https://github.com/jdx/mise/pull/11424), [#11427](https://github.com/jdx/mise/pull/11427), [#11430](https://github.com/jdx/mise/pull/11430), [#11445](https://github.com/jdx/mise/pull/11445) by @jdx) - **mcp:** new `list_commands` tool exposing mise's command tree with each command's declared effect (`read`, `write`, `destructive`, or unclassified), help text, and hidden status, so agents can see what a command does before invoking it. An optional `include_hidden` controls visibility, and unclassified is explicitly treated as unknown rather than safe. ([#11389](https://github.com/jdx/mise/pull/11389) by @jdx) - **cargo:** `cargo.binstall_native` graduates from experimental and can now discover conventionally named GitHub release artifacts from a crate's linked repository when `package.metadata.binstall` is absent, so more precompiled binaries install without crate-specific configuration. It also works under the default `locked = true` path. ([#11433](https://github.com/jdx/mise/pull/11433) by @jdx) - **dotfiles:** new `mise bootstrap dotfiles unapply` (with hidden `mise dotfiles unapply` compatibility alias) to remove managed symlinks, copies, templates, and edit blocks while preserving unmanaged content. Supports target filters, `--dry-run`, `--yes`, and requires `--force` for modified or ambiguous content. ([#11437](https://github.com/jdx/mise/pull/11437) by @jdx) - **bootstrap:** dotfiles management is now consolidated under `mise bootstrap dotfiles` (`add`, `edit`, `apply`, `status`), which runs `pre-dotfiles`/`post-dotfiles` hooks correctly. The top-level `mise dotfiles` command is hidden and deprecated (warnings in 2027.2.0, removal in 2028.2.0) but still works. ([#11436](https://github.com/jdx/mise/pull/11436) by @jdx) - **bootstrap:** added `bs` as a visible shorthand alias for `mise bootstrap`. ([#11439](https://github.com/jdx/mise/pull/11439) by @jdx) - **spm:** new `install_command` option for source installs runs a custom command from the checked-out package, and fails the install when the command exits successfully but installs nothing into `bin/` (protecting against scripts that swallow build failures). ([#11369](https://github.com/jdx/mise/pull/11369) by @Marukome0743) ## Fixed - **backend:** a network failure while listing remote versions is now reported as a fetch failure instead of a misleading "no versions found matching date filter". The failure is memoized per process to avoid redundant HTTP retries, cutting duplicate warning spam and install time roughly in half in the failing case. ([#11391](https://github.com/jdx/mise/pull/11391) by @jdx) - **config:** `mise use`, `mise up --bump`, and `mise set` now preserve trailing inline comments when rewriting `mise.toml`, matching the existing behavior for comments above a line and for `.tool-versions`. ([#11415](https://github.com/jdx/mise/pull/11415) by @JamBalaya56562) - **oci:** chunked `mise oci push` now accepts `201 Created` on the chunk `PATCH`, fixing large-layer pushes to AWS ECR that previously failed with `blob chunk upload failed: 201`. ([#11376](https://github.com/jdx/mise/pull/11376) by @fire-ant) - **npm:** tools resolved from a `mise.lock` pin are now trusted through aube's low-download popularity gate for the requested package, so reproducing an existing lockfile no longer requires `allow_low_downloads`. First-time unlocked installs and OSV malicious-package checks are unchanged. ([#11384](https://github.com/jdx/mise/pull/11384) by @jdx) - **npm:** aube confirmation prompts are now routed through mise's shared prompt path. ([#11441](https://github.com/jdx/mise/pull/11441) by @jdx) - **pipx:** no longer suggests `uv` when `uvx` is disabled for the package. ([#11373](https://github.com/jdx/mise/pull/11373) by @JamBalaya56562) - **dotfiles:** `symlink-each` now prunes stale mise-managed symlinks left behind when a source file is deleted (reporting them as drift in `mise dotfiles status`), collapses emptied directories, and gains `exclude` glob patterns for directory-walking modes, while leaving unmanaged files and user links untouched. ([#11388](https://github.com/jdx/mise/pull/11388) by @jdx) - **brew:** maintain linked-keg compatibility records ([#11371](https://github.com/jdx/mise/pull/11371) by @benjaminwestern), adopt existing cask completion links ([#11383](https://github.com/jdx/mise/pull/11383) by @jdx), and use the download client for artifacts ([#11428](https://github.com/jdx/mise/pull/11428) by @jdx). - **aqua:** preserve legacy root binary layouts so tools that expect binaries at the install root keep working. ([#11397](https://github.com/jdx/mise/pull/11397) by @jdx) - **shim:** missing executables are now attributed to the configured tool that should provide them. ([#11398](https://github.com/jdx/mise/pull/11398) by @jdx) - **bootstrap:** the generated install script honors `MISE_VERSION` and `MISE_INSTALL_PATH` ([#11401](https://github.com/jdx/mise/pull/11401) by @JamBalaya56562), and mise-managed `mas` is now detected ([#11429](https://github.com/jdx/mise/pull/11429) by @jdx). - **generate:** git pre-commit hooks respect quiet flags ([#11310](https://github.com/jdx/mise/pull/11310)), use the current env directive syntax ([#11311](https://github.com/jdx/mise/pull/11311)), and resolve hooks correctly in git worktrees ([#11313](https://github.com/jdx/mise/pull/11313)) — all by @Marukome0743. - **task:** support mixed file task dependencies ([#11382](https://github.com/jdx/mise/pull/11382) by @jdx), deduplicate equivalent task sources ([#11204](https://github.com/jdx/mise/pull/11204) by @risu729), support multi-line arrays in file task headers ([#11412](https://github.com/jdx/mise/pull/11412) by @Marukome0743), allow `false` to override script headers ([#11112](https://github.com/jdx/mise/pull/11112) by @risu729), and treat a missing content-hash baseline as stale ([#11447](https://github.com/jdx/mise/pull/11447) by @JamBalaya56562). - **link:** reject selector-style link requests. ([#11218](https://github.com/jdx/mise/pull/11218) by @risu729) - progress output no longer repaints over interactive confirmation prompts; the shared renderer is now suspended while a prompt owns the terminal. ([#11421](https://github.com/jdx/mise/pull/11421) by @jdx) ## Documentation - Documented external cache inputs ([#11395](https://github.com/jdx/mise/pull/11395) by @jdx) and how packagers can disable self-update ([#11446](https://github.com/jdx/mise/pull/11446) by @JamBalaya56562). - Replaced the dead Taobao Node mirror example with npmmirror ([#11217](https://github.com/jdx/mise/pull/11217) by @Bartok9) and fixed a redactions glob example using removed nested syntax ([#11448](https://github.com/jdx/mise/pull/11448) by @Marukome0743). ## Registry - Added micro ([#11378](https://github.com/jdx/mise/pull/11378) by @Jai-JAP), tealdeer ([#11390](https://github.com/jdx/mise/pull/11390) by @Jai-JAP), and aws-cdk ([#11394](https://github.com/jdx/mise/pull/11394) by @garysassano). ## New Contributors * @Jai-JAP made their first contribution in [#11390](https://github.com/jdx/mise/pull/11390) * @fire-ant made their first contribution in [#11376](https://github.com/jdx/mise/pull/11376) * @benjaminwestern made their first contribution in [#11371](https://github.com/jdx/mise/pull/11371) **Full Changelog**: https://github.com/jdx/mise/compare/v2026.7.15...v2026.7.16 ## 💚 Sponsor mise mise is maintained by [@jdx](https://github.com/jdx), an open source developer for [**entire.io**](https://entire.io), the title sponsor of the [jdx.dev](https://jdx.dev) open source tools. Development is funded by sponsors. If mise saves you or your team time, please consider sponsoring at [jdx.dev](https://jdx.dev/sponsors.html). Individual and company sponsorships keep mise fast, free, and independent.v2026.7.15
This release lands the first version of experimental local task output caching, letting eligible tasks restore their declared outputs and replay their logs without rerunning. It also adds structured registry idiomatic-version-file parsing, a standalone Aube installer mode, and a broad batch of task, Homebrew, shell, and Windows path fixes. ## Highlights - Experimental local task artifact caching restores task outputs (and replays their logs) across deletions, checkouts, and unchanged CI runs, with cache keys derived from source contents, task config, tools, and environment. It works for tasks that produce files, tasks with no filesystem outputs, and multi-task graphs, and stays opt-in and conservative on any failure. - Registry-backed tools can now parse idiomatic version files (like `dagger.json`, `Taskfile.yml`, `.chezmoiversion`, and 8 more) in-process, with no plugin or shell execution. ## Added - **task:** experimental, opt-in local artifact caching. Tasks with `sources` and explicit `outputs` can restore their outputs from a content-addressed cache instead of rerunning, and successful stdout/stderr are replayed through whatever output mode the current run uses. Cache keys combine source contents, task configuration and arguments, declared and allowlisted ambient environment, resolved tools, OS, and architecture. Cache failures degrade to misses or warnings rather than failing a task. ([#11328](https://github.com/jdx/mise/pull/11328), [#11347](https://github.com/jdx/mise/pull/11347) by @jdx) ```toml [tasks.build] run = "..." sources = ["src/**/*.rs"] outputs = ["dist/app"] cache = { enabled = true, env = ["CI"] } ``` - **task:** dependency artifact keys now fold into a task's cache key, so downstream tasks reuse cached outputs when their dependencies resolve to the same artifacts, and an upstream input change correctly invalidates downstream results. ([#11340](https://github.com/jdx/mise/pull/11340) by @jdx) - **task:** result-only caching via `outputs = []` for checks like lint, test, and typecheck that produce no files. Their successful result and replayable logs are cached without writing an archive. ([#11351](https://github.com/jdx/mise/pull/11351) by @jdx) - **task:** reusable and global cache inputs. Define named `[task_config.input_groups]` referenced from `sources` as `@group:<name>`, and `task_config.global_inputs` to apply config-rooted patterns to every task in scope, so shared lockfiles and toolchain files no longer need repeating per task. ([#11356](https://github.com/jdx/mise/pull/11356) by @jdx) - **task:** `task_config.global_env` for scoped environment inputs that participate in cache keys, plus `pass_through_env` / `task_config.global_pass_through_env` to keep selected ambient variables (like tokens) available under `deny_env` without affecting cache keys. ([#11363](https://github.com/jdx/mise/pull/11363) by @jdx) - **task:** `outputs` now support ordered `!` exclusions and re-inclusions (mirroring `sources`), with `\!` escaping. Excluded paths are omitted from freshness hashes and cache archives, and existing excluded files are preserved on restore. ([#11367](https://github.com/jdx/mise/pull/11367) by @jdx) - **task:** `task_config.shell` sets a project-scoped default shell for tasks, with task-local and template `shell` still taking precedence. This gives users a safe migration path after the 2026.7.14 change that ignored project-level default shell-arg settings. ([#11354](https://github.com/jdx/mise/pull/11354) by @jdx) - **config:** registry `idiomatic_files` entries can now define structured `version_regex`, `version_json_path`, and `version_expr` parsers, adding in-process idiomatic version-file parsing for 11 tools including Dagger, Task, chezmoi, CMake, Earthly, golangci-lint, GoReleaser, Lefthook, Pixi, pre-commit, and Ruff. Parsing runs without executing plugin or shell code, and remains opt-in per tool. ([#11341](https://github.com/jdx/mise/pull/11341) by @jdx) ```sh mise settings add idiomatic_version_file_enable_tools dagger task lefthook ``` - **npm:** new `npm.package_manager = "aube_cli"` mode installs `npm:` tools through a separately installed standalone Aube executable while mise still resolves versions itself, avoiding Aube's npm compatibility shim. The default embedded `aube` behavior is unchanged. ([#11357](https://github.com/jdx/mise/pull/11357) by @jdx) - **deps:** explicitly configured `mise deps` providers that are currently inapplicable now stay visible. `mise deps --list` shows an active/inactive status with a reason (e.g. `inactive (missing package-lock.json)`), and `mise deps <provider> --explain` or an explicit run fails with that reason instead of silently disappearing. ([#11182](https://github.com/jdx/mise/pull/11182) by @risu729) ## Fixed - **task:** `source_freshness_hash_contents = true` now skips mtime comparison entirely, so tasks no longer re-run on every CI job after a cache restore resets timestamps. Output integrity is tracked with a content hash that also detects missing, partially deleted, and modified outputs. ([#11319](https://github.com/jdx/mise/pull/11319) by @rabadin) - **task:** confirming (or auto-confirming) the executable-bit prompt for a file task now runs the task in the same `mise run`, instead of `chmod`-ing the file and still failing with "no task found". Respects `--yes`, `MISE_YES`, and the trusted `yes` setting. ([#11337](https://github.com/jdx/mise/pull/11337) by @jdx) - **task:** circular dependency detection now runs on the fully resolved graph, so cycles through `wait_for`, `{{usage.*}}` dependencies, and `depends_post` are reported with a concrete path before any task runs, while valid post-dependency graphs are no longer rejected. ([#11329](https://github.com/jdx/mise/pull/11329) by @jdx) - **task:** `$ ...` task headers now display forwarded arguments accurately for inline and shebang tasks, no longer making multiline tasks appear to pass args to their first command. ([#11344](https://github.com/jdx/mise/pull/11344) by @jdx) - **task:** `--output` and `MISE_TASK_OUTPUT` overrides now honor raw and interactive tasks the same way `task.output` config does, fixing mixed command/timing output for tasks that need inherited stdio. ([#11355](https://github.com/jdx/mise/pull/11355) by @jdx) - **brew:** `mise bootstrap packages upgrade` no longer fails to link kegs when formulae were already installed and linked by real Homebrew. mise now recognizes brew's directory symlinks, resolves link targets one hop like brew does, and expands directory symlinks into real directories before linking. This also fixes second-upgrade failures for formulae shipping versioned dylib aliases in pure-mise setups. ([#11320](https://github.com/jdx/mise/pull/11320) by @mjun0812) - **brew:** `mise bootstrap packages prune` now correctly removes a keg's unversioned dylib alias links instead of leaving them dangling. ([#11330](https://github.com/jdx/mise/pull/11330) by @mjun0812) - **env:** `~/` paths now expand using the platform path separator, so Windows install and tool locations no longer surface mixed separators (e.g. `C:\Users\me\.local/share/mise`) through `mise where`, shims, and related output. ([#11312](https://github.com/jdx/mise/pull/11312) by @JamBalaya56562) - **shell:** `mise activate pwsh` now works under `Set-StrictMode`, guarding uninitialized globals that previously aborted activation, fixing a bare `mise` invocation, restoring `chpwd` hook chaining, and silencing command-not-found errors when PSReadLine is unavailable. ([#11314](https://github.com/jdx/mise/pull/11314) by @JamBalaya56562) - **backend:** a plugin whose backend is listed in `disable_backends` no longer shadows the registry entry, so a registry shorthand falls back to an enabled backend instead of failing to install. Already-installed tools keep reporting their recorded backend. ([#11362](https://github.com/jdx/mise/pull/11362) by @JamBalaya56562) - **generate:** `mise generate task-docs --inject` now errors with a clear message when the `<!-- mise-tasks -->` markers are missing or reversed, instead of truncating or clobbering the target file. ([#11359](https://github.com/jdx/mise/pull/11359) by @JamBalaya56562) - **mcp:** the MCP `initialize` response now reports the server as `mise` at mise's version, instead of inheriting rmcp's default identity. ([#11361](https://github.com/jdx/mise/pull/11361) by @jdx) ## Documentation - **settings:** choice descriptions now render markdown. ([#11335](https://github.com/jdx/mise/pull/11335) by @jdx) - **tasks:** clarified shebang argument behavior. ([#11336](https://github.com/jdx/mise/pull/11336) by @jdx) - **shims:** documented how `activate` treats the shims directory with auto-install. ([#11366](https://github.com/jdx/mise/pull/11366) by @JamBalaya56562) ## Registry - Added `oh-my-pi` ([#11324](https://github.com/jdx/mise/pull/11324) by @slbls) and filled in missing tool descriptions ([#11322](https://github.com/jdx/mise/pull/11322) by @risu729). ## New Contributors * @mjun0812 made their first contribution in [#11330](https://github.com/jdx/mise/pull/11330) **Full Changelog**: https://github.com/jdx/mise/compare/v2026.7.14...v2026.7.15 ## 💚 Sponsor mise mise is maintained by [@jdx](https://github.com/jdx), an open source developer for [**entire.io**](https://entire.io), the title sponsor of the [jdx.dev](https://jdx.dev) open source tools. Development is funded by sponsors. If mise saves you or your team time, please consider sponsoring at [jdx.dev](https://jdx.dev/sponsors.html). Individual and company sponsorships keep mise fast, free, and independent.v2026.7.14
v2026.7.13
This release expands archive backends to rename multiple binaries from a single release, adds Homebrew cask shell completions and `go.mod` version-file support, and fixes a broad batch of task, install, lockfile, and language-plugin correctness issues. ## Added - **backend:** `rename_exe` now accepts a table mapping source patterns to target names, so an archive that ships several executables can expose all of them cleanly on PATH instead of only one. The existing string form is unchanged. ([#11231](https://github.com/jdx/mise/pull/11231) by @jdx) ```toml [tools."github:DanielGavin/ols"] version = "latest" rename_exe = { "ols-*" = "ols", "odinfmt-*" = "odinfmt" } ``` - **brew:** brew-cask now installs shell completions (declared `bash_completion`/`fish_completion`/`zsh_completion` files and `generate_completions_from_executable` for bash, zsh, fish, and pwsh) instead of skipping them, tracking them in cask receipts and installed-state checks. ([#11198](https://github.com/jdx/mise/pull/11198) by @jdx) - **go:** `go.mod` can now be used as an idiomatic version file. A `toolchain goX.Y.Z` directive resolves as an exact pin, while a `go X.Y` minimum resolves to the latest matching patch. It is opt-in and unchanged unless enabled per-tool. ([#11213](https://github.com/jdx/mise/pull/11213) by @JamBalaya56562) ```sh mise settings add idiomatic_version_file_enable_tools go ``` - **task:** PowerShell task shells (`pwsh`/`powershell`) now run with `-NoProfile` by default, matching how mise spawns POSIX shells, so a profile that mutates `PATH` (such as a mise activation snippet) can no longer shadow a task's own tools and cause confusing "cannot find binary path" errors. Opt out with the new `windows_powershell_no_profile` setting (`MISE_WINDOWS_POWERSHELL_NO_PROFILE=false`). ([#11199](https://github.com/jdx/mise/pull/11199) by @jdx) ## Fixed - **env:** `_.path`/`_.file`/`_.source` directives within a single `[env]._` block are now resolved in written order, so a `_.path` can reference a variable exported by a `_.source` written before it. ([#11163](https://github.com/jdx/mise/pull/11163) by @JamBalaya56562) - **install:** failed installs no longer print a contradictory "installed but not activated" hint before the real error. ([#11227](https://github.com/jdx/mise/pull/11227) by @jdx) - **install:** logical state mutations during install are now serialized to avoid races. ([#11207](https://github.com/jdx/mise/pull/11207) by @risu729) - **lockfile:** upgrading a locked `github:` tool to a newer version that is already installed on disk no longer triggers a false supply-chain "provenance regression" error. ([#11230](https://github.com/jdx/mise/pull/11230) by @jdx) - **npm:** aube install failures now surface the full cause chain instead of an opaque "failed to resolve dependencies" message, with mise-native remediation guidance (`trust_policy_excludes` or `npm.shell_out`) for trust-downgrade errors. ([#11226](https://github.com/jdx/mise/pull/11226) by @jdx) - **task:** inline task definitions now follow a consistent first-wins precedence model across local, `conf.d`, and monorepo configs, so lower-precedence metadata no longer leaks into script tasks and the winning config's context is preserved. ([#11103](https://github.com/jdx/mise/pull/11103) by @risu729) - **task:** source freshness now tracks files correctly for workspace-rooted `sources` patterns used in nested subproject tasks, so edits inside a subproject trigger a rerun. ([#11202](https://github.com/jdx/mise/pull/11202) by @rabadin) - **brew:** cask upgrades handle structured `preflight_steps`/`postflight_steps` for move/remove operations, and cleanup-only `zap` `pkgutil` IDs are no longer treated as install receipts (which could leave pkg cask status permanently missing). ([#11197](https://github.com/jdx/mise/pull/11197) by @jdx) - **brew:** cask upgrades no longer fail when removing a protected app backup (e.g. docker-desktop) hits "Permission denied", recovering permissions the way Homebrew does before retrying. ([#11219](https://github.com/jdx/mise/pull/11219) by @jdx) - **python:** a `python3` executable is now provided on Windows. ([#11212](https://github.com/jdx/mise/pull/11212) by @jdx) - **ruby:** custom `ruby.precompiled_url = "owner/repo"` sources now fetch release metadata directly from GitHub instead of the restricted versions host, avoiding 403 warnings. ([#11154](https://github.com/jdx/mise/pull/11154) by @risu729) - **ruby:** Gemfile version pins with multi-digit segments (e.g. `ruby "3.4.10"`) are now parsed correctly. ([#11229](https://github.com/jdx/mise/pull/11229) by @capnregex) - **bootstrap:** `./`-prefixed relative `[bootstrap.repos]` paths no longer display with a leading `./` component. ([#11214](https://github.com/jdx/mise/pull/11214) by @lilienblum) - **http:** invalid URLs now return an error instead of panicking. ([#11160](https://github.com/jdx/mise/pull/11160) by @Marukome0743) - **settings:** avoid a panic when a parent settings key is an inline table. ([#11184](https://github.com/jdx/mise/pull/11184) by @Marukome0743) - **self-update:** the updater's TLS backend now matches the feature it was built with, fixing failures when compiled with `native-tls`. ([#10834](https://github.com/jdx/mise/pull/10834) by @bltavares) ## Deprecated - **python:** the legacy `virtualenv` tool option is deprecated in favor of the `_.python.venv` env directive. It now emits a warning and is scheduled for removal around `2027.7.0`. ([#11234](https://github.com/jdx/mise/pull/11234) by @JamBalaya56562) ## Documentation - **python:** clarify that `uv_venv_auto` requires a `uv.lock` file. ([#11223](https://github.com/jdx/mise/pull/11223) by @jdx) - Fix dead links in the contributing guide and the aqua-registry/pipx installation docs. ([#11123](https://github.com/jdx/mise/pull/11123), [#11167](https://github.com/jdx/mise/pull/11167) by @Bartok9) ## New Contributors * @capnregex made their first contribution in [#11229](https://github.com/jdx/mise/pull/11229) * @rabadin made their first contribution in [#11202](https://github.com/jdx/mise/pull/11202) **Full Changelog**: https://github.com/jdx/mise/compare/v2026.7.12...v2026.7.13 ## 💚 Sponsor mise mise is maintained by [@jdx](https://github.com/jdx), an open source developer for [**entire.io**](https://entire.io), the title sponsor of the [jdx.dev](https://jdx.dev) open source tools. Development is funded by sponsors. If mise saves you or your team time, please consider sponsoring at [jdx.dev](https://jdx.dev/sponsors.html). Individual and company sponsorships keep mise fast, free, and independent.v2026.7.12
This release centers on running mise safely against untrusted config, shipping node-free `npm:` version resolution and installs, and replacing external tools (skopeo/crane, gpg) with built-in, dependency-free implementations. Along the way it fixes a `prefer_offline` timeout regression, several config/env correctness issues, and platform-specific problems on Windows and macOS. ## Highlights - New `MISE_SAFE=1` mode turns mise into an inert config reader so automation (CI, Renovate) can run `mise lock --bump` against untrusted branches without trust prompts or arbitrary code execution. - The `npm:` backend no longer needs node or npm installed to resolve or install packages — version metadata is fetched over HTTP and installs run in-process via the embedded aube package manager. - `mise oci push` gained a full built-in registry client: no more skopeo/crane, with blob dedup, chunked uploads, retries, cross-repo mounts, layer reuse from prior images, and multi-arch image indexes. ## Added - **Safe mode:** a new global-only `safe` setting (`MISE_SAFE=1`) makes mise refuse or ignore anything that would let project config execute code or inject environment. Blocked (with errors): template `exec()`/`read_file()`, `_.source`, hooks, tasks, asdf plugin scripts, and plugin installs. Ignored: project `[env]`, `_.path`, `_.file`, `[shell_alias]`, and `[settings]`. HTTP-based version resolution, lockfile refresh/bump, and already-installed/embedded plugins keep working. Because a config loaded this way is inert, safe mode also skips the trust requirement. ([#11146](https://github.com/jdx/mise/pull/11146), [#11151](https://github.com/jdx/mise/pull/11151) by @jdx) ```sh MISE_SAFE=1 mise lock --bump --dry-run --json # detect updates with zero code execution, no trust needed ``` - **`mise lock --bump`:** advance fuzzy lockfile selectors (`latest`, `lts`, prefixes like `"20"`) to the newest matching remote versions without installing anything and without touching `mise.toml`. Exact pins stay put. Pairs with `--json` and `--dry-run` for a CI job that opens lockfile-only PRs. ([#11145](https://github.com/jdx/mise/pull/11145) by @jdx) ```console $ mise lock --bump --dry-run --json [{ "name": "node", "backend": "core:node", "old_versions": ["22.14.0"], "new_versions": ["22.15.0"] }] ``` - **Node-free `npm:` backend:** `mise ls-remote npm:*` and `latest` resolution now query the npm registry directly over HTTP, and installs run in-process through the embedded aube package manager. node is only needed to *run* installed tools (and their lifecycle scripts), not to install them. User `~/.npmrc`, scoped registries, auth, and `minimum_release_age` are honored. A new `npm.shell_out` setting (`MISE_NPM_SHELL_OUT`) routes both metadata and installs through the npm CLI for setups relying on npm-only config like `cafile` or client certs. ([#11147](https://github.com/jdx/mise/pull/11147), [#11149](https://github.com/jdx/mise/pull/11149) by @jdx) - **Built-in OCI registry client:** `mise oci push` no longer requires skopeo or crane. It uses an in-tree OCI Distribution client that uploads only blobs the registry is missing, resolves credentials the way docker/podman do (`docker login`/`podman login` is all the setup needed), and answers registry auth challenges so private base-image pulls via `--from` also work. `mise oci run --engine docker` now streams the image into `docker load` instead of needing skopeo. The `--tool` flag was removed. ([#11132](https://github.com/jdx/mise/pull/11132) by @jdx) - **OCI push robustness:** large layers upload in 64 MiB chunks, transient failures retry with mise's standard backoff, base layers are mounted cross-repo (`?mount=`) when they already live on the destination registry (zero bytes transferred), and pushes/pulls now show byte progress. A new `oci.insecure_registries` setting opts non-loopback registries into plain HTTP. ([#11141](https://github.com/jdx/mise/pull/11141) by @jdx) - **OCI layer reuse:** `mise oci push` reuses unchanged tool layers from the previously pushed image (or `--cache-from REF`), skipping the tar/gzip build entirely — reused tools don't even need to be installed locally. `--no-cache` forces a full rebuild. ([#11142](https://github.com/jdx/mise/pull/11142) by @jdx) - **Multi-arch OCI images:** `mise oci push --update-index` points a tag at an OCI image index and upserts the current platform while preserving entries pushed by other architectures, so one runner per arch can assemble a multi-arch tag. ([#11144](https://github.com/jdx/mise/pull/11144) by @jdx) - **Built-in signature verification:** Node.js and Swift download signatures are now verified in-process with the pure-Rust rPGP crate against the bundled keyrings, dropping the external `gpg` binary dependency. Note: previously, if `gpg` was missing and the setting was unset, verification was silently skipped; now verification always runs when enabled — opt out with `gpg_verify = false`. ([#11148](https://github.com/jdx/mise/pull/11148) by @jdx) - **Relative bootstrap repo paths:** `[bootstrap.repos]` destination keys can now be relative paths, resolved against the declaring project's root (with guards preventing escape outside the project tree), making a project's `mise.toml` portable across machines. ([#11155](https://github.com/jdx/mise/pull/11155) by @lilienblum) ## Fixed - **http:** `mise lock`, `ls-remote`, `outdated`, and `upgrade` no longer get capped to a single 3s no-retry attempt when `prefer_offline` is set — they honor the configured `fetch_remote_versions_timeout` and retry budget again, fixing spurious timeouts. Interactive fast paths keep their bounded behavior. ([#11190](https://github.com/jdx/mise/pull/11190) by @jdx) - **lock:** unfiltered `mise lock` no longer prunes OS-restricted tool entries (e.g. `os = ["macos"]`) when run on a platform that doesn't target them, keeping shared lockfiles stable across platforms. ([#11175](https://github.com/jdx/mise/pull/11175) by @jdx) - **env:** values loaded from `_.file` env files now resolve references to variables defined in earlier files or `[env]` blocks instead of collapsing to empty, fixing flaky dotenv behavior. ([#11158](https://github.com/jdx/mise/pull/11158) by @Marukome0743) - **env:** `[env] _.source` now works on Windows by resolving a real POSIX bash (Git Bash / MSYS2, honoring `MISE_BASH_PATH`) instead of the WSL launcher or a missing `bash.exe`, and correctly filters MSYS runtime noise and converts prepended PATH entries back to Windows form. ([#11097](https://github.com/jdx/mise/pull/11097) by @JamBalaya56562) - **config:** `trusted_config_paths` (`MISE_TRUSTED_CONFIG_PATHS`) now overrides configs previously added to the ignore list, so a settings-trusted config is actually discovered and loaded. ([#11152](https://github.com/jdx/mise/pull/11152) by @JamBalaya56562) - **config:** `env`/`vars` array parsing is now consistent — accidental array forms for `vars` and task `env`/`vars` are rejected with clear errors, while the intentional `[[env]]` and directive-level arrays (`_.source`, `_.file`, `_.path`) remain supported. ([#11060](https://github.com/jdx/mise/pull/11060) by @risu729) - **config:** `mise config set` no longer panics when descending into a non-table value. ([#11153](https://github.com/jdx/mise/pull/11153) by @Marukome0743) - **config:** clearer warnings for unsupported semver ranges. ([#11176](https://github.com/jdx/mise/pull/11176) by @risu729) - **hook-env:** entering a directory with an untrusted config now prints a single concise warning (`... is not trusted, run 'mise trust' to enable it`) instead of the full error chain. Explicit commands still show the full trust error and prompt. ([#11159](https://github.com/jdx/mise/pull/11159) by @lilienblum) - **activate:** `mise activate zsh` no longer hangs non-interactive login shells under Rosetta — a v2026.7.11 regression where env-state snapshotting autoloaded the `zsh/parameter` module via `dlopen`. ([#11188](https://github.com/jdx/mise/pull/11188) by @jdx) - **brew-cask:** case-insensitive app bundle lookup (fixing casks like `yaak`) and correct resolution of preflight-generated wrapper scripts on the extract stage (fixing `vlc`). ([#11164](https://github.com/jdx/mise/pull/11164) by @donbeave) - **brew:** cask binaries can symlink into `/usr/local` on arm64. ([#11174](https://github.com/jdx/mise/pull/11174) by @jdx) - **backend:** qualified prerelease suffixes are now detected correctly. ([#11179](https://github.com/jdx/mise/pull/11179) by @risu729) - **completions:** avoid a network lookup during usage completion. ([#11169](https://github.com/jdx/mise/pull/11169) by @jdx) - **link:** clear a stale incomplete marker when linking a tool. ([#11150](https://github.com/jdx/mise/pull/11150) by @Marukome0743) - **shim:** unresolved Windows exe-shim dispatch (e.g. a project-scoped tool run outside the project) now shows the actionable "no version is set" guidance instead of an opaque "cannot find binary path". ([#11189](https://github.com/jdx/mise/pull/11189) by @jdx) - **vfox:** preserve inner quotes when a vfox Lua command dispatches through `cmd.exe` on Windows, fixing commands such as the Yarn 2+ install flow. ([#11166](https://github.com/jdx/mise/pull/11166) by @finalchild) - **github/gitlab/forgejo:** statically-linked `linux-musl` assets are now considered a fallback for Android/Termux when a package publishes no Android-specific asset, so tools like starship, bat, and hk can install there. ([#10730](https://github.com/jdx/mise/pull/10730) by @bltavares) - **deps:** avoid installing tools during dry runs, and enforce the experimental gate for task providers. ([#11016](https://github.com/jdx/mise/pull/11016), [#11177](https://github.com/jdx/mise/pull/11177) by @risu729) ## Documentation - Document environment-variable backing for file-task arguments and flags, including CLI/env/default precedence. ([#11165](https://github.com/jdx/mise/pull/11165) by @zeitlinger) ## Breaking Changes - `mise oci push --tool` has been removed. Use `mise oci build -o ./img` followed by `skopeo copy` if you need the old escape hatch. ([#11132](https://github.com/jdx/mise/pull/11132)) - Node/Swift signature verification now always runs when enabled (external `gpg` is no longer required). If you relied on a missing `gpg` binary to skip verification, set `gpg_verify = false` explicitly. ([#11148](https://github.com/jdx/mise/pull/11148)) - The unreleased `npm.use_npm_view` setting is replaced by `npm.shell_out` (`MISE_NPM_SHELL_OUT`). ([#11149](https://github.com/jdx/mise/pull/11149)) ## New Contributors - @donbeave made their first contribution in [#11164](https://github.com/jdx/mise/pull/11164) - @lilienblum made their first contribution in [#11159](https://github.com/jdx/mise/pull/11159) **Full Changelog**: https://github.com/jdx/mise/compare/v2026.7.11...v2026.7.12 ## 💚 Sponsor mise mise is maintained by [@jdx](https://github.com/jdx), an open source developer for [**entire.io**](https://entire.io), the title sponsor of the [jdx.dev](https://jdx.dev) open source tools. Development is funded by sponsors. If mise saves you or your team time, please consider sponsoring at [jdx.dev](https://jdx.dev/sponsors.html). Individual and company sponsorships keep mise fast, free, and independent.v2026.7.11
This release sharpens task handling around remote files, global config, and tool selectors, trims redundant work from shell activation, and fixes several bootstrap and platform-specific edge cases. > [!NOTE] > This is the first published release since v2026.7.7 — versions 2026.7.8 through 2026.7.10 were tagged but never published due to a release pipeline issue. Their changes are included here; see [**Also in this release**](#also-in-this-release-v202678v2026710) below. ## Added - **config:** structured tool definitions now accept `version`, `path`, `prefix`, and `ref` selectors consistently in root `[tools]`, inline task definitions, task templates, and file-task headers. Exactly one selector is required, and conflicting, missing, or non-string selectors now fail with a clear configuration error instead of silently defaulting or panicking. ([#11069](https://github.com/jdx/mise/pull/11069) by @risu729) ```toml node = { version = "20" } go = { prefix = "1.22" } python = { ref = "main" } shellcheck = { path = "/opt/shellcheck" } ``` ## Fixed - **task:** remote HTTP and Git-backed task files now have their `#MISE` headers parsed, so metadata like `tools`, `description`, and `hide` and inline TOML overrides are honored just like local file tasks. Git-backed task files are also made executable after cloning and on cache hits. ([#11111](https://github.com/jdx/mise/pull/11111) by @Marukome0743) - **task:** file tasks loaded from user-global or system configs are now correctly treated as global regardless of their include path, so custom global scripts appear under `mise tasks --global`, stay out of `--local`, and use the invoking project root. ([#11106](https://github.com/jdx/mise/pull/11106) by @risu729) - **task:** `mise tasks info`, extended listings, task help, and the MCP tasks resource now report every configuration source contributing to a task, with a new `config_sources` array in JSON output. Changing metadata in a TOML overlay now correctly invalidates the merged file task's cache. ([#11098](https://github.com/jdx/mise/pull/11098) by @risu729) - **watch:** `mise --env <profile> watch` now propagates the selected environment to the watched task, so profile-specific tasks resolve correctly on each rerun. ([#11114](https://github.com/jdx/mise/pull/11114) by @Marukome0743) - **http:** raw executables (such as PHP PHARs like Composer) installed via the HTTP backend are now created readable as well as executable (mode `0755` rather than `0711`), fixing "Could not open input file" errors for interpreters run by non-owner users. ([#11135](https://github.com/jdx/mise/pull/11135) by @jdx) - **java:** `mise latest java@<vendor>` now prefers the base vendor variant over dashed specializations and sorts multi-feature vendor prefixes correctly. ([#11109](https://github.com/jdx/mise/pull/11109) by @roele) - **config:** reject conflicting tool selectors at parse time (see Added). ([#11069](https://github.com/jdx/mise/pull/11069) by @risu729) - **bootstrap:** systemd timers can now reference a managed service by its bare TOML key (e.g. `unit = "dotfiles-maintain"`), which resolves to `dev.mise.<name>.service`. Fully qualified names like `nginx.service` are still written verbatim. ([#11128](https://github.com/jdx/mise/pull/11128) by @jdx) - **bootstrap:** Homebrew casks that declare `auto_updates` are now accepted instead of failing with an unsupported-lifecycle error. ([#11107](https://github.com/jdx/mise/pull/11107) by @casparbreloh) - **bootstrap:** macOS `defaults` handling now treats a missing key or domain as unset rather than erroring during initial setup. ([#11118](https://github.com/jdx/mise/pull/11118) by @roele) - **windows:** `mise uninstall` now removes dangling runtime version pointer files (like `16` or `latest`) and cleans up the now-empty tool directory. ([#11095](https://github.com/jdx/mise/pull/11095) by @JamBalaya56562) ## Performance - **activate:** the redundant initial prompt hook that ran immediately after activation is now skipped for bash, zsh, and fish when the session is unchanged, avoiding an extra `mise` process on shell startup. ([#11130](https://github.com/jdx/mise/pull/11130), [#11131](https://github.com/jdx/mise/pull/11131), [#11134](https://github.com/jdx/mise/pull/11134) by @jdx) - **backend:** archive extraction and macOS `hdiutil`/`pkgutil` waits now run via `block_in_place`, so parallel installs no longer starve download progress and other tasks of runtime threads. ([#11136](https://github.com/jdx/mise/pull/11136) by @jdx) ## Registry - Allow the reviewed `@nubjs/nub` postinstall lifecycle script to run via the npm backend so upgrades keep the `~/.nub/shims` hardlinks refreshed; default-deny behavior is preserved for all other packages. ([#11126](https://github.com/jdx/mise/pull/11126) by @risu729) ## Documentation - **environments:** clarify mise directory variables ([#11127](https://github.com/jdx/mise/pull/11127) by @jdx) - Fix dead VersionFox and MCP documentation links ([#11117](https://github.com/jdx/mise/pull/11117) by @Bartok9) - Add an example showing how to alias multiple tools from one GitHub release ([#11110](https://github.com/jdx/mise/pull/11110) by @LukasKnuth) --- ## Also in this release: v2026.7.8–v2026.7.10 Due to a release pipeline issue, versions 2026.7.8 through 2026.7.10 were tagged but never published. This is the first release since [v2026.7.7](https://github.com/jdx/mise/releases/tag/v2026.7.7), so it also ships everything below. ### Added - **bootstrap:** package manager plugins — vfox Lua plugins can now act as system package managers, with a declarative `[bootstrap.plugins]` config and `mise bootstrap plugins apply|status` commands. Declared plugins install before built-in packages, then plugin-managed packages apply once host tools are available. ([#11023](https://github.com/jdx/mise/pull/11023), [#11024](https://github.com/jdx/mise/pull/11024) by @jdx) - **bootstrap:** new `mise bootstrap repos update` and `mise bootstrap repos exec` commands. Unpinned `[bootstrap.repos]` entries are intentionally never pulled by declarative apply; `repos update` gives an explicit fetch + fast-forward path (with dry-run and path filtering), and `repos exec` runs a command across configured checkouts. `mise bootstrap --update` now also updates repos. ([#11022](https://github.com/jdx/mise/pull/11022) by @jdx) - **registry:** opt-in floating registries — with `registry_floating`, mise fetches the latest released registry metadata (and the current aqua registry) instead of the release-pinned copies. Useful on distributions whose mise package lags behind releases while registry entries keep changing. ([#10971](https://github.com/jdx/mise/pull/10971) by @jdx) - **backend:** exact-version fast path — when a request is an exact semver version, the cargo, npm, go, gem, pipx, and dotnet backends now skip fetching the remote version list entirely and let the underlying installer validate it. This speeds up exact pins without a lockfile, first-time `mise install tool@x.y.z`, and `mise x tool@x.y.z`. ([#11013](https://github.com/jdx/mise/pull/11013) by @Turbo87, [#11070](https://github.com/jdx/mise/pull/11070) by @jdx) - **task:** dependencies whose templated names render to an empty string are now skipped, so templates can conditionally disable a dependency. Empty templated dependency *args* are omitted as well. ([#11057](https://github.com/jdx/mise/pull/11057) by @risu729, [#11055](https://github.com/jdx/mise/pull/11055) by @jdx) ### Fixed - **http:** mise now fails fast when the network is unavailable: DNS resolver failures are treated as non-retryable, a process-local circuit opens after hard DNS/connection failures, and remote-version lookups are capped at 3 seconds under `prefer_offline`. Shims, shell activation, and `mise x` make one bounded attempt instead of grinding through full retry schedules per endpoint. ([#11066](https://github.com/jdx/mise/pull/11066) by @jdx) - **config:** stricter, clearer configuration validation: `env` directive value aliases ([#11062](https://github.com/jdx/mise/pull/11062)), `env.mise` directives ([#11053](https://github.com/jdx/mise/pull/11053)), and the experimental monorepo root key ([#11052](https://github.com/jdx/mise/pull/11052)) are deprecated, and non-string `postinstall` hooks are rejected at parse time ([#11061](https://github.com/jdx/mise/pull/11061)) (all by @risu729) - **hooks:** hook definitions are validated more strictly — unknown table fields ([#11047](https://github.com/jdx/mise/pull/11047)) and nested hook arrays ([#11051](https://github.com/jdx/mise/pull/11051)) are rejected, and the spawned-scripts form is deprecated ([#11043](https://github.com/jdx/mise/pull/11043)) (all by @risu729) - **schema:** a large batch of JSON schema corrections so editors validate real configs correctly: OCI copy entries ([#11009](https://github.com/jdx/mise/pull/11009)), bootstrap shell activation ([#11004](https://github.com/jdx/mise/pull/11004)) and bootstrap hooks ([#11039](https://github.com/jdx/mise/pull/11039)), structured task tool options ([#11021](https://github.com/jdx/mise/pull/11021)), required watch file patterns ([#11040](https://github.com/jdx/mise/pull/11040)), plugin manifest fields ([#11035](https://github.com/jdx/mise/pull/11035)), root hook definitions ([#11041](https://github.com/jdx/mise/pull/11041)), integer types for integer settings ([#11037](https://github.com/jdx/mise/pull/11037)), array-typed deps provider paths ([#11064](https://github.com/jdx/mise/pull/11064)) (all by @risu729), and systemd timer/lifecycle options ([#11050](https://github.com/jdx/mise/pull/11050) by @jdx) - **dry runs** no longer cause side effects: task setup is skipped ([#11015](https://github.com/jdx/mise/pull/11015)), install hooks are previewed instead of executed ([#11010](https://github.com/jdx/mise/pull/11010)), and `mise prune --dry-run` preserves runtime symlinks ([#11017](https://github.com/jdx/mise/pull/11017)) (all by @risu729) - **bootstrap:** Homebrew cask metadata is preserved ([#11012](https://github.com/jdx/mise/pull/11012)) and macOS metadata files in cask artifacts are ignored ([#11063](https://github.com/jdx/mise/pull/11063)); repo origins are compared transport-agnostically so `git@` vs `https://` remotes don't trigger spurious mismatches ([#11034](https://github.com/jdx/mise/pull/11034) by @jeremy); static systemd units no longer break `bootstrap status` ([#11056](https://github.com/jdx/mise/pull/11056) by @jdx) - **backend:** prerelease versions without a separator (like `1.2.3rc1`) are detected correctly ([#11032](https://github.com/jdx/mise/pull/11032) by @jdx); cargo sparse-index version discovery is restored ([#11011](https://github.com/jdx/mise/pull/11011) by @Turbo87); go resolves direct package module prefixes ([#11054](https://github.com/jdx/mise/pull/11054) by @jdx) - **install:** `false` install env values are treated as removals ([#11033](https://github.com/jdx/mise/pull/11033) by @risu729) - **lockfile:** platform-specific tool option variants are preserved instead of being collapsed ([#10999](https://github.com/jdx/mise/pull/10999) by @jdx) - **shell:** hyphenated tool names work in shell integrations ([#10961](https://github.com/jdx/mise/pull/10961) by @risu729), and bash `deactivate` no longer errors on empty array expansions under `set -u` ([#11026](https://github.com/jdx/mise/pull/11026) by @jdx) - **shim:** recursion is prevented when the directory env is filtered ([#10982](https://github.com/jdx/mise/pull/10982) by @risu729) - **task:** file tasks resolve source files relative to the task directory ([#11073](https://github.com/jdx/mise/pull/11073) by @JamBalaya56562), and tasks generated from templates inherit the template's `output` setting ([#11059](https://github.com/jdx/mise/pull/11059) by @risu729) - **launchd:** `bootout` EIO for not-loaded agents is tolerated on macOS ([#10965](https://github.com/jdx/mise/pull/10965) by @hsbt) - **nix:** `TZDIR` is set so timezone tests pass in the sandbox build ([#11019](https://github.com/jdx/mise/pull/11019) by @coryzibell) ### Performance - **startup:** ~2ms shaved off every invocation — config lookup no longer compiles ~200 glob patterns per startup (literal filenames are stat'd directly), and the clap command tree is built once instead of twice. `mise version` drops from 8.1ms to 6.6ms, `hook-env` from 10.9ms to 9.3ms. ([#11025](https://github.com/jdx/mise/pull/11025) by @jdx) - **release:** release binaries for linux-x64 and macos-arm64 are now built with profile-guided optimization, trained on a hermetic offline workload covering config load, toolset resolution, `hook-env`, env rendering, tasks, and exec — ~10% faster on hot paths and ~4% smaller binaries ([#11031](https://github.com/jdx/mise/pull/11031) by @jdx). macOS tarballs now target macOS 12 ([#11027](https://github.com/jdx/mise/pull/11027) by @jdx). - **runtime:** default tokio worker threads are capped at 16, avoiding oversized thread pools on many-core machines ([#11029](https://github.com/jdx/mise/pull/11029) by @jdx) ### Refactor - tar extraction, inspection, and verification are consolidated onto `jdx-tar`, removing the system `tar` fallback and a duplicate tar implementation — consistent archive behavior across platforms ([#11028](https://github.com/jdx/mise/pull/11028) by @jdx) ### Registry - add zmx ([github:neurosnap/zmx](https://github.com/neurosnap/zmx)) ([#11006](https://github.com/jdx/mise/pull/11006) by @offbyone) - docker-compose switched from the aqua to the github backend ([#10823](https://github.com/jdx/mise/pull/10823) by @konono) - eza switched from the asdf to the vfox backend ([#11068](https://github.com/jdx/mise/pull/11068) by @jdx) ### Documentation - **templates:** clarify `exec` behavior in dry runs ([#11018](https://github.com/jdx/mise/pull/11018) by @risu729) ## New Contributors - @Bartok9 made their first contribution in [#11117](https://github.com/jdx/mise/pull/11117)&#x...