brew install mise Polyglot runtime manager (asdf rust clone)
Note: This release’s build failed so no binary assets were published. Use v2026.4.3 instead, which includes all changes from this release plus a build fix.
This release introduces experimental process sandboxing for mise exec and mise run, allowing you to restrict filesystem access, network access, and environment variables for executed processes.
Added
- Process sandboxing for
mise xandmise run(experimental) – A new lightweight sandboxing layer lets you lock down what processes spawned by mise can access. On Linux it uses Landlock for filesystem restrictions and seccomp-bpf for network filtering; on macOS it usessandbox-exec(Seatbelt) with generated profiles. Requiresexperimental = truein settings. #8845 by @jdx
# Block all filesystem and network access
mise x --deny-all -- node script.js
# Block network only
mise x --deny-net -- npm run build
# Block writes except to ./dist
mise x --allow-write=./dist -- npm run build
Task-level configuration is also supported:
[tasks.build]
run = "npm run build"
deny_net = true
allow_write = ["./dist"]
Fixed
- Docs: correct
RUNTIME.osTypeandRUNTIME.archTypevalues – Fixed inconsistent documentation for runtime template variables and simplified examples. #8785 by @esteve
Full Changelog: https://github.com/jdx/mise/compare/v2026.4.1…v2026.4.2
A small patch release that fixes a compile error preventing mise from building on 32-bit ARM (armv7) targets.
Fixed
- seccomp network filter build on armv7 – The seccomp sandbox code that restricts network access during
mise execfailed to compile on armv7 targets. Thelibc::SYS_socketandlibc::SYS_socketpairconstants arei32on 32-bit platforms but the rule map expectsi64keys, causing a type mismatch. An explicitas i64cast fixes the build while remaining a no-op on 64-bit platforms. #8869 by @jdx
Full Changelog: https://github.com/jdx/mise/compare/v2026.4.2…v2026.4.3
This release adds per-tool install_before overrides for more granular control over version freshness, fixes musl/glibc detection in minimal Docker containers, and ensures the -q flag works correctly with mise prepare.
Added
- Per-tool
install_beforeoption – You can now setinstall_beforeon individual tools to override the global setting. This is useful when some tools need tighter freshness windows than others. Precedence is:--beforeCLI flag > per-toolinstall_before> globalinstall_beforesetting. #8842 by @sargunv-headway
[settings]
install_before = "7d" # default for all tools
[tools.trivy]
version = "latest"
install_before = "1d" # trivy updates are time-sensitive, use a shorter window
- Registry: dbt-fusion –
dbt-fusionis now available as a short name in the mise registry, backed byaqua:getdbt.com/dbt-fusion. #8837 by @ryan-pip
Fixed
- Musl detection in minimal Docker containers – A musl-compiled mise binary running in a minimal container (scratch, busybox, distroless) with no
/lib/ld-*files would incorrectly identify the platform as glibc, causing it to select the wrong lockfile entries or tool variants. When no dynamic linker is found at runtime, mise now falls back to the binary’s compile-time target. Additionally, a newMISE_LIBCenvironment variable (muslorgnu) allows explicitly overriding the detection. #8825 by @davireis
ENV MISE_LIBC=musl
RUN mise install
mise prepare -qnot suppressing output – The-q(quiet) flag was not suppressing status messages inmise preparebecause they usedmiseprintln!()which bypasses the logging system. These messages now use standard logging macros that respect the quiet setting. #8792 by @Marukome0743Wrong option in
mise preparedocs example – Theansible-galaxyexample in the prepare documentation used-f(force) instead of-r(requirements file). #8839 by @rndmh3ro
New Contributors
- @Marukome0743 made their first contribution in #8792
- @sargunv-headway made their first contribution in #8842
- @Rohan5commit made their first contribution in #8844
- @ryan-pip made their first contribution in #8837
- @rndmh3ro made their first contribution in #8839
Full Changelog: https://github.com/jdx/mise/compare/v2026.4.0…v2026.4.1
This release adds supply-chain security improvements for Python, fixes several shim recursion issues that could cause system hangs, and improves Go backend version resolution for deeply nested sub-modules.
Highlights
- Python provenance verification – Precompiled Python binaries from
astral-sh/python-build-standalonecan now be verified using GitHub Artifact Attestations, with downgrade protection in lockfiles. - Shim recursion guards – Two separate infinite-recursion bugs involving mise shims have been fixed, preventing fork bombs in devcontainer environments and when using
exec()templates with mise-managed tools. - Go sub-module support – Deeply nested Go sub-modules that return no versions from
go list -versionsnow correctly install with@latestinstead of incorrectly resolving to a parent module’s version.
Added
- Python GitHub Artifact Attestations – Precompiled Python binaries are now verified against GitHub Artifact Attestations from
astral-sh/python-build-standalone, following the same pattern already used for Ruby. A newpython.github_attestationssetting (env:MISE_PYTHON_GITHUB_ATTESTATIONS) overrides the globalgithub_attestationssetting for Python specifically. When enabled,mise lockrecordsprovenance = "github-attestations"in lockfile entries, andmise installverifies downloaded tarballs. If a lockfile records provenance but verification is disabled at install time, the install fails with a downgrade-attack error. #8820 by @malept
# settings.toml or mise.toml [settings]
[python]
github_attestations = true # defaults to the global github_attestations value
- Registry: svgo –
svgo(SVG Optimizer) is now available asnpm:svgo. #8817 by @3w36zj6
Fixed
Shim infinite recursion with system shims on PATH – When tools are installed via
mise install --system(e.g. in Docker/devcontainer images), a second shims directory is created atMISE_SYSTEM_DATA_DIR/shims. If both the user and system shims directories were on PATH, invoking a shim for a tool not in any config file would hang indefinitely. The PATH fallback now skips both shims directories and rejects any binary that canonicalizes to the mise binary itself. #8816 by @andrewthauerFork bomb from
exec()templates, credential commands, and git credentials – Three subprocess-spawning code paths inherited mise shims in PATH. When the subprocess invoked a mise-managed tool (e.g.gh auth tokenin anexec()template orcredential_command), the shim re-entered mise, triggering the same subprocess again – causing infinite recursion. Observed as load average >1800 on affected systems. A new sharedpath_env_without_shims()helper now strips the shims directory from PATH in all three call sites. #8802 by @antonioacgGo backend
--lockedmode – The Go backend was missing asupports_lockfile_url() -> falseoverride, causingmise install --lockedto fail for any go-backend tool since their lockfile entries never contain download URLs. #8790 by @palootcenas-outreachGo deeply nested sub-module version resolution –
mise ls-remotefor deeply nested Go sub-modules (e.g.github.com/go-kratos/kratos/cmd/kratos/v2) would incorrectly resolve to the root module’s versions. The version fetching logic now tries the exact tool path first and treats an empty version list as authoritative, falling back to@latestfor installation instead of using a parent module’s version. Results are now cached per module path. #8823 by @roeleFlutter version sorting – Fixed version sorting in the Flutter registry entry by stripping the
-stablesuffix before sorting, and switched to per-platform URL templates. #8818 by @roele
New Contributors
- @antonioacg made their first contribution in #8802
- @palootcenas-outreach made their first contribution in #8790
Full Changelog: https://github.com/jdx/mise/compare/v2026.3.17…v2026.3.18
