Skip to content

v2026.9.4: Nix Bootstrap, Environment Selectors, and Man Pages

Latest

Choose a tag to compare

@mise-en-dev mise-en-dev released this 09 Sep 21:41
· 13 commits to main since this release
Immutable release. Only release title and notes can be modified.
v2026.9.4
7949486

This release expands the bootstrap package model with Nix support and environment selectors, teaches packslip tools to ship man pages, and adds a task-scoped quiet setting. It also carries a wide batch of packslip, bootstrap, and cross-platform fixes plus a major speedup to dotfiles history rebuilds.

Added

  • bootstrap: Nix is now a built-in [bootstrap.packages] manager on Linux and macOS. Declare packages with the nix: prefix and apply them through your normal Nix profile; the manager supports use, apply, status JSON, and targeted upgrades while leaving Nix sources, caches, trust, and profile rollback under Nix control. This also adds mise bootstrap packages export --format nix to emit a deterministic NixOS module from your nix: declarations and packages use --no-install to record declarations without touching package managers. (#13013 by @jdx)

    [bootstrap.packages]
    "nix:ripgrep" = "latest"
  • bootstrap: [bootstrap.packages] entries gain an env selector (a single environment or a list), so a package is only enabled when one of its listed mise environments is active via -E or MISE_ENV. When both os and env are set, both must match. Packages for inactive environments stay declared and are protected from pruning. (#12956 by @jdx)

    [bootstrap.packages]
    "brew:postgresql" = { version = "latest", env = ["dev", "test"] }
  • packslip: Packslip-installed tools can now ship man pages declared as static man resources, alongside completions and agent skills. While a tool version is active, mise prepends its man root to MANPATH and keeps system and caller-defined paths visible, so man <tool> works. Existing installs need to be reinstalled to pick up man pages. (#13012 by @jdx)

  • task: New task.quiet setting (and MISE_TASK_QUIET) suppresses mise's own task messages, prefixes, and command-echo headers without hiding task output or affecting other commands. The bundled output = "quiet" mode is deprecated in favor of explicit output style plus this setting; removal is scheduled for 2027.9.3. (#12980 by @jdx)

Fixed

  • install: A lazy tool whose depends target is also lazy now installs correctly on first use through a shim, mise x, or a task; mise installs the provider together with its still-missing configured dependencies instead of failing the preflight. (#12997 by @balintant)
  • backend: 32-bit ARM resolution now uses Go's canonical arm architecture name for Aqua (so registry replacements apply), and automatic GitHub release asset selection no longer picks a generic source.tar.gz when no published binary targets the host. (#13004 by @jdx)
  • bootstrap: Homebrew bottles with hard-linked Mach-O executables are now signed correctly on macOS. Every hard-link alias is tracked and included in the signing list after relocation, fixing cases like fish where an aliased binary was killed with SIGKILL after a successful install. (#12988 by @nettlesh)
  • packslip: mise lock --platform now verifies the signed release manifest and records the correct URL, checksum, size, and signer for each requested target platform (including Windows x64), so locked installs work across platforms. (#13002 by @jdx)
  • packslip: On glibc Linux, an artifact's glibc_min is now honored during selection: when the GNU build requires a newer glibc than the host, mise falls back to a matching static musl build if one exists. (#13009 by @jdx)
  • packslip: Windows installs now link shims with the correct .exe filename, while Unix keeps extensionless names. (#13006 by @jdx)
  • packslip: Activated man roots are now scoped to Packslip-backed tool versions, and the caller's original MANPATH is included in the environment-cache identity so one cached process cannot serve another caller's MANPATH. (#13016 by @jdx)
  • prune: mise prune no longer exits successfully without pruning when it cannot show a confirmation prompt; it now fails with guidance to pass --yes or set MISE_YES=1. Follow-up prunes from commands like mise unuse still leave installs in place when nobody can answer. (#13003 by @jdx)
  • generate: mise generate tool-stub now respects a stub's top-level os selector when deciding whether to write a Windows .cmd launcher, so a linux/macos-only stub no longer produces a launcher even with --lock. (#13008 by @jdx)
  • dotfiles: History path filters resolve correctly when HOME is a symlink, so aliased, canonical, and tilde paths address the same history entry and show latest/diff no longer report a missing checkpoint. (#12982 by @azohra)
  • brew: The published crate now includes the tap formula and cask metadata shims, fixing cargo install --locked mise builds from crates.io. (#13001 by @jdx)

Changed

  • bootstrap: [bootstrap].config_roots and the mise bootstrap config-roots command are now deprecated (hidden from help and removed from public docs), with removal scheduled for mise 2027.3.3. Existing configurations keep working during the compatibility window but emit a warning directing users to global or system bootstrap configuration. (#13010 by @jdx)
  • registry: Added basecamp to the registry. (#13024)

Performance

  • history: Dotfiles history index rebuilds are dramatically faster, reconstructing checkpoint metadata in-process with gix instead of spawning Git per checkpoint. On an 80-checkpoint, 44-file reproducer this cut a rebuild from roughly 26-28 seconds and thousands of Git processes down to under a second. Removed annotations are now correctly dropped after a rebuild, and SHA-256 history repositories are supported. (#13011 by @jdx)

Deprecated

  • The task output = "quiet" mode (use task.quiet instead; removal in 2027.9.3) (#12980).
  • [bootstrap].config_roots and mise bootstrap config-roots (removal in mise 2027.3.3) (#13010).

New Contributors

Full Changelog: v2026.9.3...v2026.9.4

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