mise-en-place
The front-end to your dev env Pronounced "MEEZ ahn plahs"
- site: https://mise.jdx.dev/
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(sourceorsemver) so thatlatestand 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-remotecontinues to show upstream source order. (#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, acargo:orubi:build would show only one of them undermise 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 by @JamBalaya56562) -
install:
mise install --forcenow works without tool arguments, reinstalling every configured, OS-supported tool (or the monorepo union with--monorepo). (#11802 by @Marukome0743) -
upgrade: add an
upgrade.auto_prunesetting (defaulttrue) that controls whethermise upgraderemoves the version it replaced, plus a--pruneflag 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 by @JamBalaya56562)[settings] upgrade.auto_prune = false -
bootstrap:
mise bootstrap packages prune --manager brew-caskcan 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 by @jdx) -
bootstrap:
[bootstrap.packages]entries can now use table form with aversionand[tools]-styleosselectors, 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 by @jdx) -
brew: the
brew-caskmanager now supports installing font casks directly from git URLs, including selecting a branch and staging files from a subdirectory. (#11781 by @roele) -
aqua: relative
aqua.registriesentries in a config file are now resolved against that config's root, so aregistry.yamlcommitted inside a project repository can be referenced without a machine-specific absolute path. (#11804 by @JamBalaya56562)[settings] aqua.registries = ["registry.yaml"] -
spm:
spm:installs can now be pinned to a commit viarev:<commit>(and compatibleref:<commit>), building from source. (#11815 by @Marukome0743) -
generate: generated git hooks can now carry extra mise flags. Anything after
--is inserted betweenmiseandrun, so a hook can target config in a subdirectory or set other global flags. (#11820 by @JamBalaya56562)mise generate git-pre-commit --task lint -- -C subdir -E ci
Fixed
- watch:
mise watchwith no task name now runs thedefaulttask, matchingmise run, instead of failing with "No tasks specified". (#11836 by @Marukome0743) - activate:
--silentand--log-levelare now forwarded into the generated activation hook, so per-directoryhook-envoutput can actually be silenced. (#11831 by @JamBalaya56562) - sops: SOPS files decrypted through the external
sopsCLI (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 by @Marukome0743) - conda: on Windows, dependency DLLs are now placed beside the binaries in
.mise-bins, fixing tools such asconda:postgresqlandconda:zstdthat previously failed to start with a missing-DLL error. (#11825 by @JamBalaya56562) - ruby: on Windows, mise now installs the highest RubyInstaller2 build revision (
-2,-3, …) instead of always using the superseded-1build. (#11807 by @JamBalaya56562) - rust: concurrent toolchain installs are now serialized to avoid conflicts, and Rust homes are resolved from the config environment. (#11794, #11798 by @Marukome0743)
- task: Azure DevOps remote git includes are now handled correctly. (#11768 by @cheesemans)
- task: project-qualified monorepo tasks now match without requiring the leading
//. (#11782 by @williamsjokvist) - task: incomplete task outputs are now detected, and task arguments are validated before dependencies run. (#11786, #11787 by @Marukome0743)
- hooks: hook arrays are now parsed before run tables, fixing certain hook configurations. (#11792 by @jgillich)
- vfox: a non-table hook response now returns an error instead of panicking, and URL replacements are honored. (#11793 by @JamBalaya56562, #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, #11832 by @JamBalaya56562) - generate: generated git hooks forward hook arguments, and nested task stub conflicts are handled. (#11801 by @JamBalaya56562, #11800 by @Marukome0743)
- config: dropped the
--filealias where-fmeans--force, andignored_config_pathsnow matches on Windows. (#11789, #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_gopathdeprecation message is corrected. (#11791, #11799 by @JamBalaya56562, #11835 by @jdx) - exec: resolution failures now name installed-but-inactive tools to point you at the fix. (#11803 by @JamBalaya56562)
- go:
go listdiagnostics are kept out of default output. (#11816 by @JamBalaya56562) - tera: the
patargument is honored on v1trim_start/trim_end. (#11811 by @JamBalaya56562) - link: install path aliases are now rejected. (#11785 by @NgoQuocViet2001)
- cli: the base of
sub-N:version prefixes is resolved before subtracting. (#11796 by @JamBalaya56562) - core: zero jobs is now treated as one, and forced colors are honored in tables. (#11790 by @Marukome0743, #11847 by @jdx)
- bootstrap: compose is now planned before dependency installation. (#11829 by @jdx)
- registry: flutter URLs no longer double the
-stablesuffix. (#11808 by @JamBalaya56562)
Documentation
- Clarified what the not-found handler can install (#11830 by @JamBalaya56562), what libc detection actually does (#11813 by @JamBalaya56562), and
task_config.shellin thetask.shelldefaults (#11775 by @pynappo). - Linked the Homebrew cask cookbook for cask lifecycle concepts (#11773 by @himkt) and fixed dead bootstrap package-plugin example URLs (#11780 by @Bartok9).
Registry
New Contributors
- @laraochan made their first contribution in #11827
- @williamsjokvist made their first contribution in #11782
- @NgoQuocViet2001 made their first contribution in #11785
- @jgillich made their first contribution in #11792
- @pynappo made their first contribution in #11775
- @cheesemans made their first contribution in #11768
Full Changelog: https://github.com/jdx/mise/compare/v2026.8.3...v2026.8.4
💚 Sponsor mise
mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.
If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.