v2026.9.1
gohugoio/hugov2026.9.1Sep 2, 2026by mise-en-dev
Upgrading?
AI Summary
Adds firewall rate limiting to bootstrap system setup, adds a scoped locked mode for mixing distribution and user tool policies, and fixes lazy tool installation within tasks.
Key Highlights
- Firewall rate limiting for incoming TCP connections
- Scoped locked mode to mix distribution and user tool policies
- Lazy tools now install when invoked from tasks
- New systemd directives for bootstrap units
New Features
- Firewall action `limit` for incoming TCP rules
- Scoped locked mode (`locked_scopes` setting)
- Lazy tool support in tasks and `mise x`
- Environment variable removal consistency
Full Release Notes
This release expands bootstrap system setup with firewall rate limiting and more systemd directives, adds a scoped locked mode for mixing distribution and user tool policies, and fixes lazy tools so they install when invoked from tasks and `mise x`. ## Added - **bootstrap:** New `action = "limit"` for incoming TCP firewall rules rate-limits connections per source. It maps to UFW's native limiting and bounded per-source IPv4/IPv6 nftables meters; firewalld fails closed since it cannot express safe per-source limiting. Limit rules are treated as preserving SSH access by the lockout guard. ([#12669](https://github.com/jdx/mise/pull/12669) by @jdx) - **bootstrap:** Bootstrap systemd units now support `requires` (`Requires=`), repeatable `environment_file` (`EnvironmentFile=`), `nice`, and `umask`, with validation for nice ranges (-20 to 19) and octal umasks. Note that `requires` does not imply ordering; use `after` for that. ([#12683](https://github.com/jdx/mise/pull/12683) by @jdx) - **config:** New global-only `locked_scopes` setting (also `MISE_LOCKED_SCOPES`) lets you scope locked mode to specific config sources, so a distribution can ship rolling or lazy tools through `/etc/mise/config.toml` without forcing users to maintain a system lockfile. Defaults to all three scopes to preserve existing behavior. ([#12667](https://github.com/jdx/mise/pull/12667) by @jdx) ```toml [settings] locked_scopes = ["project", "global"] ``` ## Fixed - **task:** Lazy tools (`lazy = true`) now install when their command is invoked from a `mise run` task or `mise x`, matching the behavior of an activated shell. mise inserts the shim farms after real tool paths for lazy toolsets and reconciles missing bootstrap shims for hand-edited declarations, so tasks no longer fail with `command: not found`. ([#12687](https://github.com/jdx/mise/pull/12687) by @jdx) - **env:** Environment variables configured for removal (`false` values and unset directives) are now consistently unset across `mise exec`, tasks, `mise env`, hook-env, deps, and tool stubs, so inherited or secret variables are no longer leaked back into child processes. ([#12664](https://github.com/jdx/mise/pull/12664) by @jdx) - **shim:** `mise reshim` can now safely target shared executable directories like `~/.local/bin` or `/usr/local/bin`. It identifies mise-owned shims and only replaces or prunes those, leaving unmanaged files and symlinks in place, and `--force` rebuilds mise-owned shims rather than wiping the whole directory. ([#12675](https://github.com/jdx/mise/pull/12675) by @jdx) - **brew-cask:** Cask binaries that reference their surrounding extracted payload now keep that payload beside the staged binary, so tools like `codex` that exec helpers or read manifests from their own tree continue working after temporary install files are cleaned up. ([#12686](https://github.com/jdx/mise/pull/12686) by @azohra) - **upgrade:** Fixed recursive deferred tool pruning that could hang new terminals when prompt hooks triggered a full tracked-config scan. Deferred cleanup now takes a non-blocking lock and is skipped for shell-integration and `--no-config` commands. ([#12676](https://github.com/jdx/mise/pull/12676) by @jdx) - **install:** Install failures caused by a missing marker file now name the affected file and operation instead of reporting a bare OS error. ([#12624](https://github.com/jdx/mise/pull/12624) by @JamBalaya56562) - **install:** `mise install --dry-run` for an s3 tool that only declares a URL for another platform now reports the missing platform and available options instead of falsely claiming it would install. ([#12641](https://github.com/jdx/mise/pull/12641) by @hktitof) ## Changed - **registry:** Registry command (shim) names are now inferred from the preferred Aqua package at build time, removing redundant `bins` declarations from hundreds of registry entries. Explicit `bins` are kept only where mise intentionally exposes a different command set, and `mise registry --json` exposes the inferred names. ([#12668](https://github.com/jdx/mise/pull/12668) by @jdx) ## New Contributors * @azohra made their first contribution in [#12686](https://github.com/jdx/mise/pull/12686) * @hktitof made their first contribution in [#12641](https://github.com/jdx/mise/pull/12641) **Full Changelog**: https://github.com/jdx/mise/compare/v2026.9.0...v2026.9.1 ## 💚 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,235
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,632
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,714
: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