mise-en-place
The front-end to your dev env Pronounced "MEEZ ahn plahs"
- site: https://mise.jdx.dev/
PyPI and pipx tools can now choose their own Python runtime, the workspace graph can read Gradle multi-module builds, and env._.file can search parent directories. When mise-versions is having an outage, GitHub lookups now retry on api.github.com, and _.source scripts no longer pick up ~/.bashrc when mise is launched from an editor.
Added
-
Per-tool Python for
pypi:tools. Setpythonto a minor series or an exact version, and mise installs that runtime and passes it to uv or pipx for that tool only. The runtime stays private to the tool and does not become your shell's default Python.mise lockrecords the selected Python with the tool, andmise prunekeeps any runtime that a retained tool environment still uses. You can't combinepythonwith--python/-pinuvx_argsorpipx_args. Tools that don't setpythonbehave as before. #14479 (@jdx)[tools] "pypi:black" = { version = "latest", python = "3.12" } "pypi:ruff" = { version = "latest", python = "3.12.12" }If you change a tool's
python, mise installs a new environment instead of reusing the old one. If that install fails, the previous working environment is left untouched. #14504 (@jdx) -
Gradle workspace discovery.
mise tasks graphandmise run --affectednow find projects listed byincludeinsettings.gradleorsettings.gradle.kts, using Groovy or Kotlin syntax. Project IDs follow Gradle paths::appbecomesgradle::app, and the root project isgradle::. Literalproject(":lib")references in a project's top-leveldependencies {}block become graph edges. mise reads the scripts as text and never runs Gradle. If anincludeis computed or conditional, aprojectDirisn't a plainfile("...")literal, or both settings files exist, mise reports an error that points to[monorepo.projects."gradle:..."]overrides. Editing the settings script marks every Gradle project as affected. Based on a prototype by @Jarvvski. #14512 (@jdx) -
find_upforenv._.file. Withfind_up = true, mise looks for a relative path in the current directory and in every parent, so a global config can load each project's.envfiles. Files load from the root down, so values in closer files win. The default isfalse, and the option has no effect on absolute paths. #14497 (@jdx)# ~/.config/mise/config.toml [env] _.file = [ { path = ".env", find_up = true }, { path = ".env.local", find_up = true }, ] -
Detect git-rewritten files in
watch_fileshooks. mise setsMISE_WATCH_FILES_GIT_REWRITTEN=1when every changed file was last written before git's most recent HEAD move (checkout, pull, rebase). Commits don't count as HEAD moves. Hooks such as format-on-edit can use this to skip files the user didn't edit.git stash pop/applydon't move HEAD, so mise doesn't detect them. #14511 (@jdx)[[watch_files]] patterns = ["**/*.go"] run = '[ -n "$MISE_WATCH_FILES_GIT_REWRITTEN" ] || { IFS=:; hk fix $MISE_WATCH_FILES_MODIFIED; }' -
.terasources inferred for dotfile group templates. Amode = "template"entry in[dotfile_groups]no longer needs asourcejust to point at a.terafile. If the exact path doesn't exist, mise falls back to the same path with.teraadded. An explicitsourcestill takes precedence, and the.terafile is not also deployed under its suffixed name. #14502 (@jdx) -
mise lockwarns about unsupported platforms. If you name platforms withlockfile_platformsormise lock --platform, mise prints a warning for each tool version that has no build for one of them, for exampleapko@0.30.0 is not available for windows-x64; it will not install there. The default platform set still only logs this at debug level, and the exit status is unchanged. #14500 (@jdx) -
Registry: added
martin(github:maplibre/martin). #14488 (@ivan-ivkovic, @jdx)
Fixed
- GitHub lookups survive mise-versions outages. If mise-versions times out, drops the connection, or returns
429or5xx, mise now retries the lookup onapi.github.com, using your GitHub token if one is set. This covers releases, tags, repository contents, attestations andself-update. A404,403or empty answer from mise-versions is still trusted and not retried, so normal use doesn't spend GitHub's anonymous rate limit. If both sources fail, the error shows both failures, and a previously cached version list is still used. #14501 (@jdx) _.sourceno longer loads~/.bashrc. When mise's stdin was a socket andSHLVLwas unset, which happens when an editor extension such as the VS Code mise extension starts it, bash sourced~/.bashrcbefore the script. That leaked variables into the environment and could drop the script'sPATHentries. The script now runs with--norc. #14487 (@pikeas)- Each version entry uses its own options. When a tool listed several versions, options set only on the first entry leaked into the later ones. For example,
prerelease = trueon alatestentry made a separate"1"entry resolve to a prerelease. #14476 (@JamBalaya56562, @risu729) - Project overrides now work when a workspace provider fails. Previously, if a provider couldn't read its manifest (for example, a malformed
go.work),mise tasks graphandmise run --affectedfailed for the whole repo. Declaring a project in that provider's namespace under[monorepo.projects]now replaces the provider's output and clears its error. Providers with no declared projects still fail loudly. #14508 (@jdx)
Documentation
- Explained why
mise activatekeeps shims onPATH#14493 (@jdx), and clarified the platform-specific mise cache paths for CI #14506 (@zeitlinger).
Full Changelog: https://github.com/jdx/mise/compare/v2026.10.11...v2026.10.12
💚 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.