v2026.8.5: PyPy on the precompiled path, Node source patches, and a broad batch of fixes
- PyPy can now be installed on the precompiled path when python.compile=false and unconditionally on Windows
- Add node.apply_patches setting to apply local or remote patches to the Node source build before ./configure runs
- Remote build-cache prefetch now downloads output blobs concurrently up to 48 in parallel
- Global config precedence inside ~/.config/mise now matches documentation with config.local.toml overriding config.toml overriding conf.d/*.toml
- mise use now updates a single tool version in place within a standard [tools.<name>] table, preserving comments, key ordering, whitespace, and nested option tables
- Inline preinstall and postinstall hooks now run from the owning project root so relative paths resolve consistently
- mise use --pin now prefers an exact available release when pinning instead of reusing a more-specific installed fuzzy match
- Editing a root [task_templates.*] definition or monorepo task default now correctly invalidates affected tasks
- Rust backend now reuses a complete external rustup installation when default Rust homes are not initialized
- Conda package commands now run through prefix-aware launchers that activate each command's own conda prefix
- disable_tools setting now also suppresses the _.python.venv directive
- vfox configured tool options are now exposed to plugin hooks through MISE_TOOL_OPTS__* environment variables
- Explicit github_release package-type overrides are now applied in aqua backend
This release lets mise install PyPy on the precompiled path (including on Windows), adds Node source-build patching, and lands a wide set of fixes across config precedence, install hooks, version pinning, and the Rust, conda, and vfox backends.
Added
-
python: PyPy can now be installed on the precompiled path — when
python.compile=false, and unconditionally on Windows, where PyPy versions previously never appeared inmise ls-remote pythonand could not be installed at all. mise reads the upstreamdownloads.python.org/pypyindex, downloads and extracts the correct archive, runsensurepip, and records a blake3 checksum in the lockfile on first install (PyPy publishes no machine-readable checksums). (#11846 by @JamBalaya56562)mise install python@pypy3.10-7.3.17 -
node: add
node.apply_patches(MISE_NODE_APPLY_PATCHES) to apply local or remote patches to the Node source build before./configureruns, mirroringruby.apply_patches. It accepts a newline-separated list of patch files or URLs. Strip level is auto-detected from git- or diff-style markers, and patches are recorded in the lockfile since they change the built artifact. If patches are set but a precompiled Node was installed, mise now warns instead of silently dropping them. (#11850 by @JamBalaya56562)[settings.node] compile = true apply_patches = "./patches/local.patch"
Fixed
- config: global config precedence inside
~/.config/misenow matches the documentation —config.local.tomloverridesconfig.toml, which overridesconf.d/*.toml. Previously the order was reversed for[settings],[tools], and[env]when~/.config/misewas outside the cwd walk. (#11906 by @halms) - config:
mise usenow updates a single tool version in place within a standard[tools.<name>]table, preserving comments, key ordering, whitespace, and nested option tables instead of collapsing the table to inline form. (#11848 by @Marukome0743) - install: inline
preinstallandpostinstallhooks now run from the owning project root, so relative paths resolve consistently even whenmise installis started from a subdirectory. The invocation directory remains available throughMISE_ORIGINAL_CWD. (#11857 by @jdx) - use:
mise use --pinnow prefers an exact available release when pinning, instead of reusing a more-specific installed fuzzy match. For examplemise use --pin erlang@27.3will pin27.3if that exact release exists remotely, rather than depending on which versions happen to be installed. (#11838 by @Marukome0743) - task: editing a root
[task_templates.*]definition or a monorepo task default now correctly invalidates affected tasks, so stale outputs are no longer marked up to date after a template change. (#11858 by @jdx) - rust: mise now reuses a complete external rustup installation (for example one installed by Homebrew) when the default Rust homes are not initialized, instead of downloading and initializing its own. Explicitly configured Cargo/Rustup homes continue using the mise-managed path. (#11840 by @Marukome0743)
- conda: conda package commands now run through prefix-aware launchers that activate each command's own conda prefix, fixing tools like
jdtlsthat expand${CONDA_PREFIX}and rely on activation scripts. Dependency executables stay isolated from the user's shellPATH. (#11855 by @Marukome0743) - python:
disable_tools = ["python"](and allowlist forms likeenable_tools = ["node"]) now also suppress the_.python.venvdirective, so a disabled Python no longer leaves its virtualenv activated onPATH. (#11885 by @JamBalaya56562) - vfox: configured vfox tool options are now exposed to plugin hooks through
MISE_TOOL_OPTS__*(with legacyRTX_TOOL_OPTS__*aliases), so hooks readingos.getenv("MISE_TOOL_OPTS__...")see the resolved options during install, uninstall, exec-env, and lock paths. (#11884 by @Marukome0743) - aqua: explicit
github_releasepackage-type overrides from version and platform overrides are now applied, fixing installs such as recent Claude Code releases that failed with "relative URL without a base". (#11901 by @Marukome0743)
Changed
- cache: remote build-cache prefetch now downloads output blobs concurrently (up to 48 in parallel) while reserving foreground slots for compiler lookups, dramatically speeding up large Rust cache restores that previously downloaded thousands of small artifacts serially. (#11905 by @jdx)
Documentation
- env: clarified
_.sourcePATH handling. (#11889 by @jdx) - task: fixed boolean flag usage examples. (#11887 by @Marukome0743)
Registry
- Use aqua for helmsman. (#11908 by @scop)
Breaking Changes
- If you relied on
disable_tools = ["python"]while still keeping a_.python.venvactivated, that virtualenv will no longer be activated. The existing venv remains on disk and is restored automatically when Python is re-enabled. (#11885)
Full Changelog: https://github.com/jdx/mise/compare/v2026.8.4...v2026.8.5
💚 Sponsor mise
mise is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools. Development is funded by sponsors.
If mise saves you or your team time, please consider sponsoring at jdx.dev. Individual and company sponsorships keep mise fast, free, and independent.