github jdx/mise v2026.11.4
v2026.11.4: zip:: includes for config and tasks

one hour ago

Config and task includes can now load from zip:: archives over HTTP(S). This release also fixes shim tab completion, [tool_alias] handling in enable_tools/disable_tools and mise prune, mise dot sync conflicts, and ufw firewall rule matching in mise bootstrap.

Added

  • zip:: includes for config and tasks. Before, include and task_config.includes accepted local paths, git:: and oci:: sources. They now also accept a zip archive served over HTTP or HTTPS. mise downloads and unpacks the archive, then loads it the same way as an oci:: artifact. For task_config.includes it loads executable file tasks and .toml task files. For include it loads the mise.toml at the archive root. Zip entries don't reliably carry file permissions, so mise makes non-TOML files that start with a shebang executable. #15439 (@jdx)

    • Only HTTP and HTTPS URLs are accepted. Any other scheme fails with an error.
    • Task includes are still experimental, like the other remote sources.
    • A URL doesn't pin specific contents. mise refreshes a zip config include the way it refreshes a branch (fetch_remote_versions_cache), and paranoid mode rejects zip config includes.
    # replace <URL> with the archive's HTTP(S) URL
    include = ["zip::<URL of platform-config.zip>"]
    
    [task_config]
    includes = ["zip::<URL of shared-tasks-1.0.0.zip>"]

Fixed

  • Tab completion through shims. Completing a command for a tool run through a mise shim (such as aube or pitchfork) showed mise's own subcommands instead of the tool's. mise now answers completion requests only when it is invoked as mise. Under a shim name, the request goes to the real tool. mise also skips version resolution, auto-install and auto-update while answering these requests. #15429 (@jdx)
  • Tool aliases in enable_tools and disable_tools. If a tool was declared by its full backend ID, filtering by its [tool_alias] name did the wrong thing. MISE_ENABLE_TOOLS=myjq excluded the tool instead of selecting it, and MISE_DISABLE_TOOLS=myjq had no effect. An alias now matches the same tool as its full ID in both filters, including aliases with inline options. An explicit enable list still overrides disable_tools. If you disable an aliased python, _.python.venv is turned off too. Based on a fix by @zeitlinger. #15437 (@jdx)
  • mise prune and project tool aliases. When run from another directory, mise prune resolved a tracked project's [tools] entries against the current directory's config. Tools named through the project's own [tool_alias] caused "not found in mise tool registry" warnings, and mise couldn't tell whether those installs were still in use. These entries now resolve through the project's aliases, as well as the aliases in its parent and global configs. #15438 (@jdx)
  • mise dot sync with exclusions added on two machines. When two machines each added their own mise dot exclude globs, sync failed with "enrollment conflict in exclusions". mise now merges the lists in this order: the shared base, then this machine's additions, then the other machine's. The same applies to an enrolled path's own exclude and include lists. A removal or a !glob added on both sides is still a conflict, because glob order matters. The error message now says how to recover. #15449 (@jdx)
  • ufw rules with a source or destination CIDR. A [[bootstrap.linux.firewall.rules]] entry with a source or destination CIDR and no port never converged. mise read 10.42.0.0/16 as a port and a protocol, so mise bootstrap plan --detailed-exitcode kept reporting the rule. Firewall commands also now run with LC_ALL=C, so inspection no longer fails under non-English locales such as de_DE.UTF-8. #15450 (@jdx)
  • Fedora 45 COPR builds. Releases are now built for Fedora 45 (x86_64 and aarch64) in the jdxcode/mise COPR repo. Before, Fedora 45 users were stuck on 2026.8.5. #15441 (@jdx)

Documentation

  • The shell setup docs now say that fish 4.9.3 loads mise completions on its own, so you can skip mise completion fish --install there. #15442 (@jdx)

Full Changelog: v2026.11.3...v2026.11.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.

Don't miss a new mise release

NewReleases is sending notifications on new releases.