v2026.8.4

karakeep-app/karakeepv2026.8.4Aug 11, 2026by mise-en-dev

AI Summary

Introduces semantic version ordering for tools and cross-backend tool matching capabilities.

Key Highlights

  • Added explicit `version_order` option (semver) for tools to fix backport selection issues.
  • `mise ls` now matches tools installed from multiple backends (e.g., registry and build backends).
  • Added `upgrade.auto_prune` setting to control whether `mise upgrade` removes the replaced version.
  • Bootstrap package management now supports platform filters and cask pruning.
  • Added `mise install --force` without arguments to reinstall every configured tool.

New Features

  • Semantic version ordering for tools
  • Cross-backend tool matching
  • Bootstrap cask pruning
  • Force reinstall all configured tools

Full Release Notes

This release adds explicit semantic version ordering for major backends, teaches `mise ls` and `mise install --force` to work across backends, extends bootstrap package management with platform filters and cask pruning, and lands a broad batch of task, config, and platform-specific fixes.

## Added
- **backend:** tools can now declare an explicit `version_order` (`source` or `semver`) so that `latest` and version-prefix resolution follow semantic precedence instead of source/chronological order. This is enabled for Aqua, GitHub, GitLab, Forgejo, and HTTP backends, and fixes cases where a backport or older release line was picked ahead of a newer version (for example neo4j, victoria-metrics, go-getter, talosctl, rpk, and tealdeer). `mise ls-remote` continues to show upstream source order. ([#11774](https://github.com/jdx/mise/pull/11774) by @jdx)
- **ls:** `mise ls <name>` now matches a tool installed from multiple backends. Previously, installing a tool from both its registry backend and, say, a `cargo:` or `ubi:` build would show only one of them under `mise ls <name>` even though both were on PATH. Spelling out a backend (e.g. `mise ls ubi:jqlang/jq`) still narrows to that single backend. ([#11822](https://github.com/jdx/mise/pull/11822) by @JamBalaya56562)
- **install:** `mise install --force` now works without tool arguments, reinstalling every configured, OS-supported tool (or the monorepo union with `--monorepo`). ([#11802](https://github.com/jdx/mise/pull/11802) by @Marukome0743)
- **upgrade:** add an `upgrade.auto_prune` setting (default `true`) that controls whether `mise upgrade` removes the version it replaced, plus a `--prune` flag to force removal on for a single run when the setting is off. Useful when a mise-managed interpreter backs a virtualenv you do not want deleted on unattended upgrades. ([#11788](https://github.com/jdx/mise/pull/11788) by @JamBalaya56562)

  ```toml
  [settings]
  upgrade.auto_prune = false
  ```
- **bootstrap:** `mise bootstrap packages prune --manager brew-cask` can now conservatively remove mise-owned Homebrew casks that are no longer declared in `[bootstrap.packages]`. Removal is gated by install-time receipt metadata, fingerprint checks, and ownership validation, and Homebrew-owned, pkg, lifecycle, drifted, or shared casks are skipped with an explicit reason. ([#11810](https://github.com/jdx/mise/pull/11810) by @jdx)
- **bootstrap:** `[bootstrap.packages]` entries can now use table form with a `version` and `[tools]`-style `os` selectors, so a single config can target macOS-only casks and Linux fonts. Platform-incompatible packages surface as unavailable in status output instead of aborting the run, while explicit requests for unsupported packages still error. ([#11809](https://github.com/jdx/mise/pull/11809) by @jdx)
- **brew:** the `brew-cask` manager now supports installing font casks directly from git URLs, including selecting a branch and staging files from a subdirectory. ([#11781](https://github.com/jdx/mise/pull/11781) by @roele)
- **aqua:** relative `aqua.registries` entries in a config file are now resolved against that config's root, so a `registry.yaml` committed inside a project repository can be referenced without a machine-specific absolute path. ([#11804](https://github.com/jdx/mise/pull/11804) by @JamBalaya56562)

  ```toml
  [settings]
  aqua.registries = ["registry.yaml"]
  ```
- **spm:** `spm:` installs can now be pinned to a commit via `rev:<commit>` (and compatible `ref:<commit>`), building from source. ([#11815](https://github.com/jdx/mise/pull/11815) by @Marukome0743)
- **generate:** generated git hooks can now carry extra mise flags. Anything after `--` is inserted between `mise` and `run`, so a hook can target config in a subdirectory or set other global flags. ([#11820](https://github.com/jdx/mise/pull/11820) by @JamBalaya56562)

  ```bash
  mise generate git-pre-commit --task lint -- -C subdir -E ci
  ```

## Fixed
- **watch:** `mise watch` with no task name now runs the `default` task, matching `mise run`, instead of failing with "No tasks specified". ([#11836](https://github.com/jdx/mise/pull/11836) by @Marukome0743)
- **activate:** `--silent` and `--log-level` are now forwarded into the generated activation hook, so per-directory `hook-env` output can actually be silenced. ([#11831](https://github.com/jdx/mise/pull/11831) by @JamBalaya56562)
- **sops:** SOPS files decrypted through the external `sops` CLI (`sops.rops = false`) are no longer skipped when no age key is present, so KMS, Vault, PGP, and other key services work in non-strict mode. ([#11834](https://github.com/jdx/mise/pull/11834) by @Marukome0743)
- **conda:** on Windows, dependency DLLs are now placed beside the binaries in `.mise-bins`, fixing tools such as `conda:postgresql` and `conda:zstd` that previously failed to start with a missing-DLL error. ([#11825](https://github.com/jdx/mise/pull/11825) by @JamBalaya56562)
- **ruby:** on Windows, mise now installs the highest RubyInstaller2 build revision (`-2`, `-3`, …) instead of always using the superseded `-1` build. ([#11807](https://github.com/jdx/mise/pull/11807) by @JamBalaya56562)
- **rust:** concurrent toolchain installs are now serialized to avoid conflicts, and Rust homes are resolved from the config environment. ([#11794](https://github.com/jdx/mise/pull/11794), [#11798](https://github.com/jdx/mise/pull/11798) by @Marukome0743)
- **task:** Azure DevOps remote git includes are now handled correctly. ([#11768](https://github.com/jdx/mise/pull/11768) by @cheesemans)
- **task:** project-qualified monorepo tasks now match without requiring the leading `//`. ([#11782](https://github.com/jdx/mise/pull/11782) by @williamsjokvist)
- **task:** incomplete task outputs are now detected, and task arguments are validated before dependencies run. ([#11786](https://github.com/jdx/mise/pull/11786), [#11787](https://github.com/jdx/mise/pull/11787) by @Marukome0743)
- **hooks:** hook arrays are now parsed before run tables, fixing certain hook configurations. ([#11792](https://github.com/jdx/mise/pull/11792) by @jgillich)
- **vfox:** a non-table hook response now returns an error instead of panicking, and URL replacements are honored. ([#11793](https://github.com/jdx/mise/pull/11793) by @JamBalaya56562, [#11795](https://github.com/jdx/mise/pull/11795) by @Marukome0743)
- **aqua:** package metadata is now looked up by aqua package name, and version bounds with four components and the `!=` operator are accepted. ([#11828](https://github.com/jdx/mise/pull/11828), [#11832](https://github.com/jdx/mise/pull/11832) by @JamBalaya56562)
- **generate:** generated git hooks forward hook arguments, and nested task stub conflicts are handled. ([#11801](https://github.com/jdx/mise/pull/11801) by @JamBalaya56562, [#11800](https://github.com/jdx/mise/pull/11800) by @Marukome0743)
- **config:** dropped the `--file` alias where `-f` means `--force`, and `ignored_config_paths` now matches on Windows. ([#11789](https://github.com/jdx/mise/pull/11789), [#11818](https://github.com/jdx/mise/pull/11818) by @JamBalaya56562)
- **settings:** config-file writes are now refused for env-only settings, list settings no longer panic when set from the environment, and the `go.set_gopath` deprecation message is corrected. ([#11791](https://github.com/jdx/mise/pull/11791), [#11799](https://github.com/jdx/mise/pull/11799) by @JamBalaya56562, [#11835](https://github.com/jdx/mise/pull/11835) by @jdx)
- **exec:** resolution failures now name installed-but-inactive tools to point you at the fix. ([#11803](https://github.com/jdx/mise/pull/11803) by @JamBalaya56562)
- **go:** `go list` diagnostics are kept out of default output. ([#11816](https://github.com/jdx/mise/pull/11816) by @JamBalaya56562)
- **tera:** the `pat` argument is honored on v1 `trim_start`/`trim_end`. ([#11811](https://github.com/jdx/mise/pull/11811) by @JamBalaya56562)
- **link:** install path aliases are now rejected. ([#11785](https://github.com/jdx/mise/pull/11785) by @NgoQuocViet2001)
- **cli:** the base of `sub-N:` version prefixes is resolved before subtracting. ([#11796](https://github.com/jdx/mise/pull/11796) by @JamBalaya56562)
- **core:** zero jobs is now treated as one, and forced colors are honored in tables. ([#11790](https://github.com/jdx/mise/pull/11790) by @Marukome0743, [#11847](https://github.com/jdx/mise/pull/11847) by @jdx)
- **bootstrap:** compose is now planned before dependency installation. ([#11829](https://github.com/jdx/mise/pull/11829) by @jdx)
- **registry:** flutter URLs no longer double the `-stable` suffix. ([#11808](https://github.com/jdx/mise/pull/11808) by @JamBalaya56562)

## Documentation
- Clarified what the not-found handler can install ([#11830](https://github.com/jdx/mise/pull/11830) by @JamBalaya56562), what libc detection actually does ([#11813](https://github.com/jdx/mise/pull/11813) by @JamBalaya56562), and `task_config.shell` in the `task.shell` defaults ([#11775](https://github.com/jdx/mise/pull/11775) by @pynappo).
- Linked the Homebrew cask cookbook for cask lifecycle concepts ([#11773](https://github.com/jdx/mise/pull/11773) by @himkt) and fixed dead bootstrap package-plugin example URLs ([#11780](https://github.com/jdx/mise/pull/11780) by @Bartok9).

## Registry
- Added android-cli ([#11797](https://github.com/jdx/mise/pull/11797) by @ggoggam) and zk ([#11827](https://github.com/jdx/mise/pull/11827) by @laraochan).

## New Contributors
* @laraochan made their first contribution in [#11827](https://github.com/jdx/mise/pull/11827)
* @williamsjokvist made their first contribution in [#11782](https://github.com/jdx/mise/pull/11782)
* @NgoQuocViet2001 made their first contribution in [#11785](https://github.com/jdx/mise/pull/11785)
* @jgillich made their first contribution in [#11792](https://github.com/jdx/mise/pull/11792)
* @pynappo made their first contribution in [#11775](https://github.com/jdx/mise/pull/11775)
* @cheesemans made their first contribution in [#11768](https://github.com/jdx/mise/pull/11768)

**Full Changelog**: https://github.com/jdx/mise/compare/v2026.8.3...v2026.8.4

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