v2026.9.4
gohugoio/hugov2026.9.4Sep 9, 2026by mise-en-dev
Upgrading?
AI Summary
Adds Nix bootstrap support, environment selectors for conditional package installation, and man page support for packslip tools. Includes major performance improvements to dotfiles history rebuilds.
Key Highlights
- Nix package manager integration for bootstrap
- Environment selectors (`env`) for conditional package activation
- Man pages support for packslip-installed tools
- Dramatic performance improvement in dotfiles history rebuilds
New Features
- Nix bootstrap package manager
- Env selector for `[bootstrap.packages]` entries
- Man page support for tools
- Optimized history index rebuilds
Full Release Notes
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](https://github.com/jdx/mise/pull/13013) by @jdx)
```toml
[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](https://github.com/jdx/mise/pull/12956) by @jdx)
```toml
[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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/13009) by @jdx)
- **packslip:** Windows installs now link shims with the correct `.exe` filename, while Unix keeps extensionless names. ([#13006](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/13010) by @jdx)
- **registry:** Added basecamp to the registry. ([#13024](https://github.com/jdx/mise/pull/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](https://github.com/jdx/mise/pull/13011) by @jdx)
## Deprecated
- The task `output = "quiet"` mode (use `task.quiet` instead; removal in 2027.9.3) ([#12980](https://github.com/jdx/mise/pull/12980)).
- `[bootstrap].config_roots` and `mise bootstrap config-roots` (removal in mise 2027.3.3) ([#13010](https://github.com/jdx/mise/pull/13010)).
## New Contributors
* @balintant made their first contribution in [#12997](https://github.com/jdx/mise/pull/12997)
**Full Changelog**: https://github.com/jdx/mise/compare/v2026.9.3...v2026.9.4
## 💚 Sponsor mise
mise is built and maintained by [@jdx](https://github.com/jdx), an open source developer at [**entire.io**](https://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](https://jdx.dev/sponsors.html). Your support funds ongoing development and helps keep mise fast, free, and independent.
Related Repositories
ollama/ollama★ 184,236
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
fatedier/frp★ 110,064
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
infiniflow/ragflow★ 92,631
RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs
junegunn/fzf★ 83,715
:cherry_blossom: A command-line fuzzy finder
caddyserver/caddy★ 78,251
Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS