v2026.8.6: Resumable downloads, richer Homebrew casks, and monorepo task fixes
- Interrupted HTTP downloads now resume via HTTP Range requests when a strong ETag or Last-Modified validator is available, with abandoned partials expiring after 30 days
- Homebrew cask backend now supports structured symlink steps, generic cask artifacts, and copy/installer flight steps with transactional rollback
- mise run --all opens the interactive task picker with tasks from the entire monorepo
- Add task.cache.audit_report to write the complete cache-audit report to a JSON Lines file
- Whole-file dotfiles entries can now declare their body inline with content = "..." instead of requiring a separate source file
- Deps provider config fields now render Tera templates using the defining config file's context with shell-style environment expansion
- Add a config-root-scoped [tool_config] locked = true policy that requires tools declared by configs sharing that root to resolve and install from their lockfiles
- In monorepo mode, running a task by its bare or :-prefixed name now works from any directory below a config root
- Retry HTTP/2 REFUSED_STREAM failures which CDNs emit as backpressure
- Honor system install destinations for downloads
- When a downloaded checksum file lists per-file hashes but none match the target filename, mise now errors instead of silently returning a wrong checksum
- Discover wheel-only package versions from PEP 503 Simple API indexes so packages published only as wheels now appear in mise ls-remote
- The rolling nightly Rust channel now resolves to a concrete nightly-YYYY-MM-DD toolchain via the official channel manifest for reproducible lock and offline reuse
- Support ruby-build CLI options
- Preserve cross-platform lock data in conda
- Render npm lifecycle logs through the progress display
This release adds resumable HTTP downloads, expands Homebrew cask support, and lands a large batch of fixes across tasks, config, install, and platform-specific behavior — with a particular focus on monorepos and Windows.
Highlights
- Interrupted artifact downloads now resume instead of restarting from zero, and more transient network failures (including HTTP/2
REFUSED_STREAM) are retried automatically. - The Homebrew cask backend gained structured symlinks, generic artifacts, and copy/installer flight steps, closing several gaps in cask installation.
- A wide round of monorepo task, config precedence, and Windows path handling fixes.
Added
-
http: interrupted downloads now resume via HTTP Range requests when a strong ETag or Last-Modified validator is available, keeping validated partial files across retries and mise invocations instead of re-downloading from byte zero. mise falls back to a clean restart when validators do not match, and abandoned partials expire after 30 days. (#11866 by @Marukome0743)
-
brew: the Homebrew cask backend now supports structured
symlinksteps (with path bases, templates, guards, source globs, and sudo control), generic cask artifacts, andcopy/installer flight steps, with transactional rollback if an install fails. (#11962, #11963, #11964 by @jdx) -
task:
mise run --allopens the interactive task picker with tasks from the entire monorepo, matching the load path already used bymise tasks ls --all. The default picker stays scoped to the current directory hierarchy. (#11920 by @jdx)mise run --all -
task: add
task.cache.audit_report(MISE_TASK_CACHE_AUDIT_REPORT) to write the complete cache-audit report to a JSON Lines file. The console still caps at 20 paths per task, but the file now captures every undeclared read and write so large audits (e.g. Jest overnode_modules) are actually usable. (#11997 by @stevenpollack)MISE_TASK_CACHE_AUDIT_REPORT=audit.jsonl mise run --force build -
dotfiles: whole-file
[dotfiles]entries can now declare their body inline withcontent = "..."instead of requiring a separate source file, useful for small configs and user-writable paths outside$HOME.contentcannot be combined withsource,mode, orexclude. (#11983 by @jdx) -
deps: deps provider config fields (paths, commands,
env, descriptions, timeouts) now render Tera templates using the defining config file's context, with shell-style environment expansion and rendered env values folded into freshness identity. Template errors surface as clear configuration errors before commands run. (#11886 by @Marukome0743) -
config: add a config-root-scoped
[tool_config] locked = truepolicy that requires tools declared by configs sharing that root to resolve and install from their lockfiles, without forcing global or parent-root tools into strict mode.[settings] locked,--locked, andMISE_LOCKEDremain invocation-wide. (#11940 by @jdx)
Fixed
- task: in monorepo mode, running a task by its bare or
:-prefixed name now works from any directory below a config root, resolving to the nearest enclosing project instead of failing. (#11941 by @pikeas) - task: normalize task cwd for source freshness (#11987 by @jdx), bound buffered command output (#11922), avoid zsh process-substitution hangs (#11904), and normalize variadic usage env values (#11881) by @Marukome0743; mask archive modes in remote cache nodes (#11877 by @stevenpollack).
- http: retry send failures that never produced a response, including HTTP/2
REFUSED_STREAM, which CDNs emit as backpressure and which previously failed on the first attempt even with retries enabled. (#11961 by @mariadeluna-tomtom) - http: honor system install destinations for downloads. (#11851 by @Marukome0743)
- aqua: when a downloaded checksum file lists per-file hashes but none match the target filename, mise now errors instead of silently returning a wrong checksum. (#11973 by @jakedgy)
- pipx: discover wheel-only package versions from PEP 503 Simple API indexes, so packages published only as wheels now appear in
mise ls-remoteandlatestresolution. (#11959 by @jdx) - rust: the rolling
nightlychannel now resolves to a concretenightly-YYYY-MM-DDtoolchain via the official channel manifest, making nightly lock, outdated, upgrade, and offline reuse reproducible while keepingmise.tomlonnightly. (#11980 by @Marukome0743) - ruby: support ruby-build CLI options. (#11918 by @Marukome0743)
- conda: preserve cross-platform lock data (#11946 by @jdx) and honor URL replacements (#11930 by @Marukome0743).
- npm: render lifecycle logs through the progress display. (#11939 by @jdx)
- oci: strip the tag from
name:tag@digestreferences so pulling a base image by combined tag-and-digest no longer produces a malformed token scope, while preserving registry ports. (#11979 by @fire-ant) - install: write tool manifests atomically. (#11957 by @jdx)
- lock: include task-specific tools in the lockfile. (#11976 by @Marukome0743)
- deps: invalidate deps state when a provider's command, environment, working directory, or shell changes, so an edited
runcommand is no longer skipped as fresh (#11849); honor source and output overrides (#11896) by @Marukome0743. - hooks: skip tool installation in preinstall tasks. (#11927 by @Marukome0743)
- exec: allow a symlinked
resolv.confinside the sandbox. (#11958 by @jdx) - generate: honor absolute localized directories. (#11975 by @NgoQuocViet2001)
- config: allow typing
j/kto filter in themise edittool picker (#11969 by @jakedgy); create the config directory before writing into it (#11934) and stop aconf.ddrop-in from becoming the write target (#11917) by @JamBalaya56562. - bootstrap: avoid sudo for user-writable files (#11984) and allow Windows bootstrap without system files (#12003) by @jdx.
- semver: stop labeling a mangled value as a semver range. (#11949 by @JamBalaya56562)
Windows fixes
- cli:
mise activateandmise completionnow both acceptpwshandpowershell, and shell detection recognizes.exesuffixes. (#11928 by @JamBalaya56562) - shell: resolve a shell named by a full Windows path. (#11950 by @JamBalaya56562)
- shims: stop treating a full-path
argv[0]as a shim name. (#11982 by @JamBalaya56562) - toolset: accept a Windows tool path spelled with backslashes (#11937) and reject
cmd.exemetacharacters in a Windows tool path (#11947) by @JamBalaya56562. - dotfiles: treat an unmanaged file as a conflict on Windows too. (#11981 by @JamBalaya56562)
- tasks: stop telling Windows users to run
chmod +x. (#11923 by @JamBalaya56562)
Changed
- upgrade/outdated:
-bis now the shorthand for--bump. The old-lbump shorthand is hidden and deprecated (removal planned for 2027.8.5) so-lcan later mean--local. When tools are current within configured ranges but a bump is available outside them, both commands now say so instead of reporting everything up to date. (#11945 by @jdx) - cli:
mise use --globalalongside a path is now rejected instead of silently ignored. (#11935 by @JamBalaya56562)
Deprecated
- config: the automatic
all_compile = truedefault on NixOS is deprecated and scheduled for removal in 2027.8.0. It currently forces source builds for Node, Python, Erlang, and Ruby even when precompiled binaries work throughnix-ld; mise now warns and points to enablingnix-ldor settingall_compile = trueexplicitly. Alpine's source-build default is unchanged. (#11956 by @jdx)
Registry
- Added
native-sdk(github:vercel-labs/native) by @phall1 in #11942 - Added
restatebinaries (github:restatedev/restate) by @Bing-su in #11953 - Added
mailpit(aqua:axllent/mailpit) by @joealden in #11960
New Contributors
- @stevenpollack made their first contribution in #11997
- @mariadeluna-tomtom made their first contribution in #11961
- @pikeas made their first contribution in #11941
- @phall1 made their first contribution in #11942
Full Changelog: https://github.com/jdx/mise/compare/v2026.8.5...v2026.8.6
💚 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.