mise-en-place
The front-end to your dev env Pronounced "MEEZ ahn plahs"
- site: https://mise.jdx.dev/
This release deepens macOS bootstrap support with current-host and nested defaults, lets dotfiles and tasks adapt to the platform and to parsed arguments, and adds an opt-in trial of complete lockfile generation. It also carries a batch of install progress, self-update, brew-cask, and sandbox fixes.
Added
-
bootstrap: New
[[bootstrap.macos.defaults_entries]]blocks let you set macOS preferences explicitly withdomain,key,value, and an optionalhost(anyby default, orcurrent), covering preferences normally written viadefaults -currentHostwhile keeping the existing[bootstrap.macos.defaults]shorthand. Entries also accept an optionalpathto patch a nested dictionary value without replacing its siblings, preserving property-list types and creating missing parents. (#12983 by @azohra, #12984 by @azohra)[[bootstrap.macos.defaults_entries]] domain = "com.apple.dock" key = "autohide" value = true host = "current" -
bootstrap: More friendly macOS preferences: Finder folder sorting and default cloud save location, Dock autohide delay and timing (integers or floats), and keyboard automatic capitalization and spelling correction, all using snake_case names consistent with the existing sections. (#13032 by @jdx)
-
bootstrap:
[bootstrap.files]and[bootstrap.directories]entries gainphase = "pre-packages"so repository definitions, apt sources, and signing keys can be applied before package installation instead of only afterward. Existing declarations default to"post-packages". (#13052 by @jdx)[bootstrap.files."/etc/apt/sources.list.d/vendor.sources"] source = "./files/vendor.sources" phase = "pre-packages" -
bootstrap: Ordinary
[bootstrap.files]templates can now reference resolved[vars]values, alongside the existingconfig_root,target, andsecret()helpers. (#13033 by @nettlesh) -
dotfiles: A single dotfiles source can deploy to different destinations per operating system, architecture, or mise profile using
variantswith an optionaltarget. This works forcopy,symlink,symlink-each, andtemplatemodes. (#13050 by @jdx)[dotfiles.settings] source = "dotfiles/vscode/settings.json" mode = "copy" variants = [ { os = "macos", target = "~/Library/Application Support/Code/User/settings.json" }, { os = "linux", target = "~/.config/Code/User/settings.json" }, ] -
task: Task
sourcesandoutputscan now use{{usage.*}}templates, resolved per invocation from parsed arguments and flags before freshness and artifact-cache checks run, so different argument values track freshness independently. (#13051 by @jdx) -
brew-cask: Casks with structured
set_permissionspreflight/postflight steps now install correctly (for examplebrew-cask:blender), running an unprivilegedchmodover resolved staged or appdir paths instead of failing with an unsupported step-type error. (#13043 by @azohra) -
lock: Opt-in trial of complete lockfile generation via
lockfile_mode = "generate"(orMISE_LOCKFILE_MODE=generate). The default remains incrementalmerge. Generate mode rebuilds lockfiles from current requests while treating the previous file as an immutable baseline, reusing unchanged artifacts and publishing through staged atomic writes so failures or concurrent edits do not clobber a good lockfile. This mode records only cryptographically verified provenance per target platform;provenance_verifiedis no longer treated as a trust signal. (#13031 by @jdx) -
self-update: New
disable_update_warningsetting (MISE_DISABLE_UPDATE_WARNING) suppresses "newer mise available" notices inmise version,mise --version, andmise doctor. Explicit self-update and automatic updates are unaffected. (#13028 by @jdx)
Fixed
- install: Interactive installs no longer leave a permanent line for every resolved, skipped, or already-installed tool; live progress shows what is happening while the final summary lists what changed (for example
installed 1 tool in 1.1s: dummy@1.0.0).mise upgradeno longer duplicates its old to new version list. (#13030 by @jdx) - install: Long non-TTY installs no longer flood CI logs with a snapshot every three seconds. The heartbeat now scales to roughly 10% of elapsed time, clamped between 3 seconds and 1 minute. (#13036 by @jdx)
- self-update: On 32-bit ARM,
mise self-updatenow selects the correctlinux-armv7archive instead of requesting a missinglinux-armone and falling back to an ARM64 binary that failed signature verification. A missing archive now fails asset selection rather than picking the wrong architecture. (#13023 by @jdx) - self-update: npm installs now ship the instructions file that redirects update guidance to the package manager, so they no longer advertise
mise self-update. (#13028 by @jdx) - brew-cask:
mise bootstrap packages upgradeno longer replaces the bundle of a running self-updating app (for example Chrome), which could strand helper processes and blank out tabs. Such apps are skipped while running and left to update themselves. (#13041 by @azohra) - brew-cask: The cask metadata fetch error no longer includes stale advice about installing with
brewand a broken documentation anchor; it now gives a short, accurate message. (#12800 by @Marukome0743) - bootstrap:
mise bootstrap dotfiles origin set <url>now uses the repository's own default branch when--branchis omitted, so repositories onmasterconnect correctly instead of publishing a second root branch. A missing requested branch is now reported clearly rather than mistaken for an empty repository. (#13037 by @Dhaulagiri) - dotfiles: History watcher locks now live alongside the history store in the state directory instead of being hashed into the cache directory, so a launchd watcher and an interactive shell using different cache directories coordinate correctly and
dotfiles statusno longer misreportsdeclared-not-running. Existing watchers must be stopped and restarted with the updated binary. (#13038 by @ascarter) - sandbox: The macOS Seatbelt profile now allows
file-read-metadataon the ancestors of readable paths, fixingOperation not permittedfailures when a portable Ruby resolves its own executable during third-party tap evaluation. Symlinked data directories and allow-listed paths are also handled. (#13039 by @Marukome0743)
Registry
- Added
clipboard(github:Slackadays/Clipboard) by @i-api in #13044
New Contributors
- @Dhaulagiri made their first contribution in #13037
Full Changelog: https://github.com/jdx/mise/compare/v2026.9.4...v2026.9.5
💚 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.