# mise v2026.8.15 — v2026.8.15: Dotfiles diff and capture, scoped config updates, and per-tool postinstall hooks - Product: mise (https://whatsnew.fyi/product/mise) - Vendor: mise - Date: 2026-08-30 - Version: v2026.8.15 - Original notes: https://github.com/jdx/mise/releases/tag/v2026.8.15 - Permalink: https://whatsnew.fyi/product/mise/releases/v2026.8.15 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add `mise bootstrap dotfiles diff` to preview exactly what apply would change without writing anything - **added** — Add `mise bootstrap dotfiles add --changed` to capture every drifted copy-mode target back into its source in one command - **added** — Add `manifest = "git"` option for directory `copy` and `symlink-each` entries to manage only paths returned by `git ls-files` - **added** — Add automatic reconciliation of stale symlinks when a profile change points a target at a different source - **added** — Add `mise bootstrap --from ` to clone a setup/dotfiles repo and run bootstrap from that checkout - **added** — Add `mise use --postinstall ` to attach a per-tool post-install hook that runs when that tool is installed or reinstalled - **added** — Add `--append` and `--remove` options to `mise config set` for list-like keys - **added** — Add explicit `--global` and `--system` targeting for `mise config get` and `mise config set` - **added** — Add `config_source` template variable that references the absolute path of the config file the template lives in - **added** — Add `task_source_files(only_changed=true)` to return only sources written since the task last succeeded - **added** — Add `release_url` field to `mise outdated --json` output pointing at the release page for the offered version - **changed** — Change `mise upgrade` to no longer delete replaced installs immediately, instead scheduling them for removal after `upgrade.prune_after` (default 24h) when `upgrade.auto_prune` is on - **changed** — Add `MISE_CONFIG_FILE`, `MISE_GLOBAL_CONFIG_FILE`, `MISE_CONFIG_ROOT`, and `MISE_PROJECT_ROOT` environment variables to tool postinstall hooks - **fixed** — Fix `.env` files written as UTF-16 to be decoded and loaded instead of being silently dropped - **fixed** — Fix UTF-16 task files to receive a clear hint to save as UTF-8 - **fixed** — Fix `mise install --dry-run` to not claim it would install a tool that cannot actually be installed on the current platform - **fixed** — Fix `mise exec` to report clearly when a requested tool is not available on the current platform This release expands the dotfiles/bootstrap workflow with previews, bulk capture, git-tracked manifests, and profile reconciliation, adds scoped config collection updates and per-tool postinstall hooks, and rounds it out with a large batch of fixes across tasks, schema validation, Windows, lockfiles, and shims. ##### Highlights - Dotfiles management grows a full preview-and-capture workflow: `mise bootstrap dotfiles diff`, bulk `add --changed`, git-tracked directory manifests, and automatic reconciliation when a profile switches a target's source. - `mise config set` learns idempotent list updates (`--append`/`--remove`) and explicit `--global`/`--system` targeting, and `mise use` gains per-tool `--postinstall` hooks. - Safer upgrades: replaced tool versions now linger for a grace period instead of being deleted immediately, so a bad upgrade is easier to recover from. ##### Added - **dotfiles:** New `mise bootstrap dotfiles diff` previews exactly what `apply` would change without writing anything, printing unified content patches for copy, template, and inline entries and structural summaries for symlinks and directories. Optional target filters use the same selection semantics as `apply`. ([#12511](https://github.com/jdx/mise/pull/12511) by @jdx) - **dotfiles:** `mise bootstrap dotfiles add --changed` captures every drifted copy-mode target back into its source in one command, without naming each path. Directory copies, symlinks, templates, and inline content are skipped, and untrusted configs are blocked. ([#12512](https://github.com/jdx/mise/pull/12512) by @jdx) - **dotfiles:** Directory `copy` and `symlink-each` entries can now set `manifest = "git"` to manage only paths returned by `git ls-files`, so a dotfiles repo that `gitignore`s everything and force-adds selected paths no longer traverses (or links) ignored home-directory content. Links are removed when a file drops out of the index. ([#12523](https://github.com/jdx/mise/pull/12523) by @jdx) - **dotfiles:** `symlink-each` apply now reconciles stale links when a profile change (for example toggling `MISE_ENV` between home and work) points a target at a different source. Only links still pointing at the previously recorded source are removed; unmanaged paths and paths desired by another active source are left alone, and dry-run previews the removals. ([#12524](https://github.com/jdx/mise/pull/12524) by @jdx) - **bootstrap:** `mise bootstrap --from ` clones a setup/dotfiles repo (into `$MISE_DATA_DIR/bootstrap-repo` by default, or `--from-dir`), then runs bootstrap from that checkout. Existing checkouts are reused when the origin matches, `--update` fast-forwards them, and `--dry-run` only prints the planned `git clone`/`git pull`. ([#12525](https://github.com/jdx/mise/pull/12525) by @jdx) - **use:** `mise use --postinstall ` attaches a per-tool post-install hook that runs only when that tool is installed or reinstalled. Repeat the flag before each tool to give each its own hook. ([#12609](https://github.com/jdx/mise/pull/12609) by @jdx) ```sh mise use --postinstall "mbx setup --defaults" mr-boxington ``` - **config:** `mise config set` gains `--append` and `--remove` for list-like keys (append without duplicates, remove matching entries, promote scalars to arrays as needed) while preserving TOML comments and formatting, plus explicit `--global`/`--system` targeting for `config get`/`set`. Tool postinstall hooks now also receive `MISE_CONFIG_FILE`, `MISE_GLOBAL_CONFIG_FILE`, `MISE_CONFIG_ROOT`, and `MISE_PROJECT_ROOT`. ([#12603](https://github.com/jdx/mise/pull/12603) by @jdx) - **config:** Templates can now reference `config_source`, the absolute path of the config file the template lives in (not resolved through symlinks). This lets a shared config symlinked into `conf.d` add its own real directory to `PATH`, for example `{{ config_source | canonicalize | dirname }}/bin`. Available in `mise.toml`, `.tool-versions`, `[env]` directives, and `[ _[Truncated at 4000 characters — full notes: https://github.com/jdx/mise/releases/tag/v2026.8.15]_