# mise v2026.8.9 — v2026.8.9: Composable Bootstrap, Environment-Aware conf.d, and Faster Startup - Product: mise (https://whatsnew.fyi/product/mise) - Vendor: mise - Date: 2026-08-19 - Version: v2026.8.9 - Original notes: https://github.com/jdx/mise/releases/tag/v2026.8.9 - Permalink: https://whatsnew.fyi/product/mise/releases/v2026.8.9 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** — Bootstrap can now compose declarative resources from multiple independent config roots via [bootstrap].config_roots, with provenance tracking and conflict diagnostics - **added** — Declaration provenance is now retained and exposed for dotfiles and managed files/directories in bootstrap plan, bootstrap status, and dotfiles status commands - **added** — Homebrew-compatible support for self-updating casks and adoption of existing app bundles in [bootstrap.packages] - **added** — Remote bootstrap gains symlink materialization controls with --copy-link and --copy-links options and configuration in [bootstrap.remote] - **added** — Environment-specific conf.d fragments load only when that config environment is active, supporting .mise/conf.d/*.{env}.toml files - **added** — ignored_config_paths now supports relative entries and glob patterns including recursive ** - **added** — mise run, mise , mise install, mise exec, and mise watch now implicitly trust and persist the active config in normal mode - **added** — Plugins can declare an ordered list of candidate package names per package manager in systemDependencies to handle distro renames - **added** — Traditional vfox plugins can now read configured [tools] options from ctx.options in PreInstall and PostInstall hooks - **fixed** — Runtime environment overrides now persist between refreshes instead of being reverted on every prompt - **fixed** — Aqua now prefers glibc release assets on unqualified glibc Linux targets, falling back to musl only when no glibc sibling exists - **fixed** — Automatic venv creation now resolves the configured uv even when invoked through a tool override - **fixed** — mise which --tool=@ now correctly reports when the requested version is not installed - **fixed** — The pwsh command-not-found hook now branches on command exit code and skips mise's own commands - **fixed** — Bootstrap now creates missing parent directories when bootstrapping - **changed** — Startup is dramatically faster on machines with vfox plugins through opt-in idiomatic file detection and cached vfox plugin metadata - **security** — Forge tokens no longer leak to third-party hosts - **security** — Safe mode now blocks tool-level install hooks This release expands declarative bootstrap into a composable, multi-root system; adds environment-specific `conf.d` fragments and glob-based ignored config paths; smooths out shell activation so runtime overrides stick; and delivers major startup performance gains for vfox-backed setups. It also includes several security hardening fixes worth noting. ##### Highlights - Bootstrap can now compose declarative resources (dotfiles, files, directories, services, and Compose projects) from multiple independent config roots, with provenance tracking and clear conflict diagnostics. - Startup is dramatically faster on machines with vfox plugins: idiomatic file detection is now gated on opt-in, and vfox plugin metadata is cached on disk, cutting common invocations from hundreds of milliseconds to single digits. - Security hardening: forge tokens no longer leak to third-party hosts, and safe mode now blocks tool-level install hooks. ##### Added - **bootstrap:** Compose declarative resources from multiple independent config roots via `[bootstrap].config_roots`. Selected roots contribute `[dotfiles]`, `[bootstrap.files]`, `[bootstrap.directories]`, `[bootstrap.services]`, and `[bootstrap.compose]` without gaining precedence from list or glob order; identical declarations are deduplicated and conflicting declarations fail with both origins reported. ([#12105](https://github.com/jdx/mise/pull/12105), [#12132](https://github.com/jdx/mise/pull/12132) by @jdx) ```toml [bootstrap] config_roots = ["bundles/*"] ``` - **bootstrap:** Declaration provenance is now retained and exposed for dotfiles and managed files/directories. `mise bootstrap plan`, bootstrap status, and `mise dotfiles status` include origin details (declaring config, config root, environment, resolved source) in JSON, and human-readable tables gain a Config column. ([#12100](https://github.com/jdx/mise/pull/12100) by @jdx) - **bootstrap:** Homebrew-compatible support for self-updating and adopted casks in `[bootstrap.packages]`. Casks declaring `auto_updates: true` are left to update themselves, and existing app bundles can be adopted globally with `[bootstrap.brew].adopt = true` or per cask with `adopt = true`. ([#12074](https://github.com/jdx/mise/pull/12074) by @ascarter) - **bootstrap:** Remote bootstrap gains symlink materialization controls. Use `--copy-link ` (repeatable) to dereference selected source-relative symlinks or `--copy-links` to recursively dereference all archived symlinks; both are also configurable in `[bootstrap.remote]` and per-host. Default behavior is unchanged (links stay links). ([#12121](https://github.com/jdx/mise/pull/12121) by @jdx) - **config:** Environment-specific `conf.d` fragments. Files like `.mise/conf.d/*.{env}.toml` (and `.local` variants) load only when that config environment is active, applying to project, global, and system `conf.d` directories. ([#12151](https://github.com/jdx/mise/pull/12151) by @jdx) - **config:** `ignored_config_paths` now supports relative entries and glob patterns (including recursive `**`). Entries in `.miserc.toml` resolve against the declaring file, while `MISE_IGNORED_CONFIG_PATHS` resolves against the invocation directory — making it easy to exclude vendored repos portably. ([#12169](https://github.com/jdx/mise/pull/12169) by @jdx) - **config:** `mise run`, naked `mise `, `mise install`, `mise exec`, and `mise watch` now implicitly trust and persist the active config in normal mode, avoiding a redundant prompt. Automatic `hook-env`/inspection commands still require explicit trust, and paranoid and safe modes are unchanged. ([#12107](https://github.com/jdx/mise/pull/12107) by @jdx) - **system:** Plugins can declare an ordered list of candidate package names per package manager in `systemDependencies`, so the same capability can be expressed across distro renames (for example `apt = { "libaio1t64", "libaio1" }`). mise resolves the first available candidate. ([#12149](https://github.com/jdx/ _[Truncated at 4000 characters — full notes: https://github.com/jdx/mise/releases/tag/v2026.8.9]_