v2026.8.0

takahirom/arbigentv2026.8.0Aug 1, 2026by mise-en-dev

AI Summary

Delivers significant performance improvements with 15% lower shim latency and introduces multi-language workspace inference for monorepo tasks, while making precompiled Ruby binaries the default.

Key Highlights

  • Shims have 15% lower latency and config-aware commands are 8-11% faster.
  • Workspace inference spans four ecosystems: Cargo, uv, Go, and Node.
  • Precompiled Ruby binaries are now the default for faster installs.

New Features

  • Cargo workspace inference for task graphs.
  • uv (Python) workspace inference from `pyproject.toml`.
  • Go workspace discovery from `go.work`.
  • Provider-suggested task inputs from `turbo.json`.
  • Per-task `watch.no_vcs_ignore` option for tasks.
  • Groundwork for affected-project task selection.

Full Release Notes

This release makes mise noticeably faster on Linux x64: shims have 15% lower latency, while config-aware commands are 8–11% faster in local release-to-release benchmarks. It also significantly expands the experimental monorepo task workflow with dependency inference across Cargo, uv (Python), Go, and Node workspaces, and makes precompiled Ruby binaries the default.

## ⚡ Performance: up to 15% lower latency

Official checksum-verified Linux x64 GNU binaries were compared on an AMD Ryzen 9 7950X3D using an isolated offline fixture with warm filesystem caches (20 warmups and 200 measured runs per command):

| Workload | v2026.7.18 | v2026.8.0 | Lower latency |
| --- | ---: | ---: | ---: |
| Node shim dispatch | 6.990 ms | 5.929 ms | **15.2%** |
| `tasks ls` | 7.353 ms | 6.574 ms | **10.6%** |
| `env -s bash` | 7.942 ms | 7.187 ms | **9.5%** |
| `current` | 7.667 ms | 6.961 ms | **9.2%** |
| `settings` | 5.823 ms | 5.331 ms | **8.5%** |
| `--help` | 5.036 ms | 4.731 ms | **6.1%** |
| `version` | 5.108 ms | 4.884 ms | **4.4%** |
| `registry` | 7.457 ms | 7.181 ms | **3.7%** |

Release downloads are smaller as well:

| Linux x64 artifact | Size change |
| --- | ---: |
| `.tar.xz` | **11.1% smaller** |
| `.tar.gz` | **5.9% smaller** |
| `.tar.zst` | **5.0% smaller** |
| Allocated ELF sections | **0.6% smaller** |

The raw executable file is 2.5% larger because of the BOLT file layout, despite its smaller allocated sections and compressed artifacts. Shim dispatch was measured in two reversed-order 300-run rounds. These are whole-release results against v2026.7.18, so they include all changes between the releases rather than isolating BOLT alone.

## Highlights
- Workspace inference now spans four ecosystems. `mise tasks graph` discovers projects and internal dependency edges from Cargo, uv, Go, and Node workspace metadata without needing the underlying toolchain installed, and `--explain` attributes every project, edge, and task field to its source.
- Precompiled Ruby binaries are now the default, cutting install times for most users while keeping source builds available on demand.

## Added
- **task:** Cargo workspaces are now inferred for the task graph. mise parses root and member `Cargo.toml` files (no `cargo` binary required) to build `cargo:<package>` projects and internal edges from normal, dev, build, target-specific, renamed, and inherited `workspace = true` path dependencies, with provenance surfaced in graph output. ([#11554](https://github.com/jdx/mise/pull/11554) by @jdx)
- **task:** uv (Python) workspaces are inferred from `pyproject.toml`. When `[tool.uv.workspace]` is present, member globs and exclusions define `uv:<package>` projects and edges come from `[tool.uv.sources]` `workspace = true` / local `path` entries across main, optional, dependency-group, and legacy dev dependencies — again without invoking `uv` or Python. ([#11556](https://github.com/jdx/mise/pull/11556) by @jdx)
- **task:** Go workspaces are discovered from `go.work` `use` directives and each module's `go.mod`, registering stable `go:<module-path>` projects without running the `go` binary. Dependency ordering is supplied explicitly via `[monorepo.projects]` overrides. ([#11559](https://github.com/jdx/mise/pull/11559) by @jdx)
- **task:** workspace providers can now contribute task suggestions. The Node provider imports supported `inputs`, `outputs`, `cache`, and `dependsOn` metadata from matching `turbo.json` entries for inferred package scripts, tracking `turbo.json` as a task definition source. Unsupported Turbo expressions are left unset. ([#11543](https://github.com/jdx/mise/pull/11543) by @jdx)
- **task:** `mise tasks graph --explain` shows provider and metadata-source provenance for every inferred project, dependency edge, task, and provider-suggested field, and `--json` now serializes the same attribution. Config overrides are labeled as `configuration` rather than misattributed to inference. ([#11547](https://github.com/jdx/mise/pull/11547) by @jdx)

  ```bash
  mise tasks graph --explain
  ```
- **task:** `mise watch` gains a per-task `watch.no_vcs_ignore` option so tasks can watch sources that are excluded by `.gitignore` (such as generated files). VCS ignores stay enabled by default to avoid scanning broad build directories; one opted-in task enables it for the combined watch process. ([#11535](https://github.com/jdx/mise/pull/11535) by @Marukome0743)

  ```toml
  [tasks.generate]
  run = "process generated/output.json"
  sources = ["generated/output.json"]
  watch = { no_vcs_ignore = true }
  ```
- **task:** groundwork for affected-project task selection: mise can now resolve affected Git base/head revisions (with `MISE_AFFECTED_BASE`/`MISE_AFFECTED_HEAD` overrides and CI auto-detection for GitHub Actions and GitLab), map changed files to the workspace projects that own them, and expand that set through transitive reverse-dependency edges across providers. ([#11585](https://github.com/jdx/mise/pull/11585), [#11569](https://github.com/jdx/mise/pull/11569), [#11583](https://github.com/jdx/mise/pull/11583) by @jdx)

## Changed
- **ruby:** precompiled Ruby binaries are now the default when `ruby.compile` is unset — installs try `jdx/ruby` binaries first and fall back to a source build when none are available. Set `ruby.compile = true` to force a source build as before. ([#11584](https://github.com/jdx/mise/pull/11584) by @jdx)

## Fixed
- **config:** `--path <dir>` now targets a config file inside that directory for `use`, `unuse`, `set`, `unset`, `dotfiles add`, and the `system` subcommands. Previously `--path` was silently discarded when the current directory already had a config in scope, so `mise unuse --path ../other` could remove a tool from the wrong file. ([#11575](https://github.com/jdx/mise/pull/11575) by @JamBalaya56562)
- **task:** Ctrl-C is now treated as an interruption rather than a task failure. `mise run` stops starting new work, exits with status 130, and no longer prints `no exit status` or `task failed`, while still allowing post-dependency cleanup to run. ([#11511](https://github.com/jdx/mise/pull/11511) by @Marukome0743)
- **task:** `sources` and `outputs` now support brace globs (e.g. `{a,b}/**`), and literal single-element braces are preserved rather than being mangled. ([#11555](https://github.com/jdx/mise/pull/11555), [#11565](https://github.com/jdx/mise/pull/11565) by @Marukome0743)
- **python:** `mise run --tool python@3.12` now honors the selected interpreter when creating a `_.python.venv`, instead of building the venv from the first `[tools] python` entry. ([#11567](https://github.com/jdx/mise/pull/11567) by @JamBalaya56562)
- **unuse:** `mise unuse node@20` on `node = ["20", "22"]` now removes only the matching version and preserves the rest, including structured options and `.tool-versions` entries. The whole tool key is removed only for an unversioned request or after the last version is unused. ([#11563](https://github.com/jdx/mise/pull/11563) by @Marukome0743)
- **env:** an explicit `redact = false` on a variable now excludes it from matching `redactions` patterns, so a short opted-out value no longer leaks into the global scrubber and partially redacts unrelated secrets. ([#11564](https://github.com/jdx/mise/pull/11564) by @jdx)
- **hook-env:** if a shell command overwrites a mise-managed variable or removes a PATH entry added by mise, `hook-env` now detects the drift and restores it, while leaving user-owned variables, added PATH entries, and PATH reordering untouched. ([#11568](https://github.com/jdx/mise/pull/11568) by @Marukome0743)
- **dotfiles:** `symlink-each` no longer recursively walks shared targets like `~` for status, apply, and unapply. mise now records exact source-to-target pairs in a manifest under `$MISE_STATE_DIR/dotfiles`, avoiding traversal of unrelated and unreadable home-directory trees. Existing installs are backfilled on their next apply. ([#11549](https://github.com/jdx/mise/pull/11549) by @jdx)
- **asdf:** dependencies declared via `[tools].depends` are now on the PATH given to `bin/download` and `bin/install` scripts during the same `mise install`, fixing first-install failures where a dependency's executable was still missing. `bin/install` now also fails when it installs nothing. ([#11531](https://github.com/jdx/mise/pull/11531) by @Marukome0743, [#11553](https://github.com/jdx/mise/pull/11553) by @JamBalaya56562)
- **vfox:** plugins whose `pre_install` hook returns a sha1 or md5 checksum are now verified instead of panicking with `not implemented: sha1`. ([#11536](https://github.com/jdx/mise/pull/11536) by @JamBalaya56562)
- **aqua:** checksum files that carry a byte-order mark are now read correctly, and the checksum manifest is fetched with the text-fetching path again. ([#11552](https://github.com/jdx/mise/pull/11552), [#11558](https://github.com/jdx/mise/pull/11558) by @JamBalaya56562)
- **brew-cask:** direct cask pours are hardened with transactional activation, content-fingerprinted receipts, validated paths, and structured `terminate_process`/postflight handling, covering current cask shapes such as Cloudflare WARP, TablePlus, Zoom, OrbStack, Surge, Plex Media Server, and Zed Preview. Homebrew-owned casks are left byte-for-byte untouched. ([#11215](https://github.com/jdx/mise/pull/11215) by @donbeave)
- **forgejo:** the new `fj` macOS key path is now supported. ([#11545](https://github.com/jdx/mise/pull/11545) by @jdx)
- **github, gitlab:** `gh`/`glab` config is now found on Windows. ([#11508](https://github.com/jdx/mise/pull/11508) by @JamBalaya56562)
- **http:** HTTP client initialization failures are now handled gracefully instead of aborting. ([#11561](https://github.com/jdx/mise/pull/11561) by @Marukome0743)

## Performance
- **shim:** shims reuse the resolved toolset and config roots, reducing per-invocation overhead. ([#11534](https://github.com/jdx/mise/pull/11534) by @jdx)
- **task:** workspace discovery caches its filesystem access. ([#11562](https://github.com/jdx/mise/pull/11562) by @jdx)
- **release:** the Linux x64 binary is optimized with BOLT and overall release binary size is reduced. ([#11533](https://github.com/jdx/mise/pull/11533), [#11520](https://github.com/jdx/mise/pull/11520) by @jdx)

## Documentation
- **task:** workspace task precedence is now documented. ([#11542](https://github.com/jdx/mise/pull/11542) by @jdx)

## Registry
- Updated the herdr repository. ([#11518](https://github.com/jdx/mise/pull/11518) by @ogulcancelik)

**Full Changelog**: https://github.com/jdx/mise/compare/v2026.7.18...v2026.8.0

## 💚 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.

*AI-assisted — Tool: Codex; model: unavailable/unavailable; version: unavailable.*