v2026.4.6

jdx/misev2026.4.6Apr 8, 2026by mise-en-dev

AI Summary

Adds Tera template support to `.miserc.toml`, fixes a shim race condition, and improves SPM backend compatibility with self-hosted instances.

Key Highlights

  • Tera templates can now be used in `.miserc.toml`.
  • Shim race condition with overlapping backends is fixed.
  • SPM backend now supports self-hosted GitHub Enterprise and GitLab instances.

New Features

  • Tera template support in `.miserc.toml`
  • `sing-box` added to the built-in registry

Full Release Notes

This release adds Tera template support to `.miserc.toml` files for dynamic early-stage configuration, fixes a race condition during shim creation that affected multi-backend setups, and improves SPM backend compatibility with self-hosted GitHub Enterprise and GitLab instances. Several other bug fixes improve environment variable handling across tasks, redaction, and the vfox backend.

## Highlights

- **Tera templates in `.miserc.toml`** -- Use environment variables, XDG directories, and OS-level functions like `arch()` and `os()` directly in your `.miserc.toml` configuration, enabling dynamic early-stage settings such as platform-specific ceiling paths.
- **Shim race condition fixed** -- Multi-backend setups where different plugins provide overlapping shims no longer intermittently fail during `mise reshim` or `mise install`.
- **SPM self-hosted instance support** -- The SPM backend now automatically derives the correct API URL for self-hosted GitHub Enterprise and GitLab instances from the tool URL.

## Added

- **Tera template support in `.miserc.toml`** -- `.miserc.toml` files now support Tera templates with a limited context available during early initialization: OS environment variables, `config_root`, `cwd`, XDG directories, and built-in functions/filters. Templates that fail to render gracefully fall back to raw content. [#8867](https://github.com/jdx/mise/pull/8867) by @richardthe3rd

  ```toml
  # .miserc.toml
  ceiling_paths = ["{{ env.HOME }}"]
  ignored_config_paths = ["{{ xdg_config_home }}/mise/shared.toml"]
  ```

- **`sing-box` added to the built-in registry** -- Install the sing-box universal proxy platform via `mise use sing-box`. [#8944](https://github.com/jdx/mise/pull/8944) by @tony-sol

## Fixed

- **Shim race condition with overlapping backends** -- When multiple plugins provide the same shim (e.g., `nodejs` via the default registry and `asdf:nodejs`), concurrent `make_shim` calls could race on file removal, producing intermittent "No such file or directory" errors. The file removal now tolerates already-deleted files. [#8947](https://github.com/jdx/mise/pull/8947) by @brander-john

- **`mise env --redacted` missing tools-only redactions** -- Env vars declared with both `tools = true` and `redact = true` were not included in the redaction filter for `mise env --redacted`. Both the standard and tools-only redaction sets are now checked. [#8956](https://github.com/jdx/mise/pull/8956) by @jakedgy

- **SPM backend API URL for self-hosted instances** -- When using the SPM backend with a full URL pointing to a self-hosted GitHub Enterprise or GitLab instance, mise now derives the correct API URL from the host instead of always falling back to `api.github.com`. Explicit `api_url` options still take precedence. [#8955](https://github.com/jdx/mise/pull/8955) by @ThomasDutartre

- **vfox backend missing dependency env** -- When a vfox backend plugin declared `depends` on another tool, the dependency's binaries were not available on PATH during plugin Lua hooks (`BackendListVersions`, `BackendInstall`, `BackendExecEnv`). Dependency environment is now properly propagated, matching the behavior of other backends. [#8952](https://github.com/jdx/mise/pull/8952) by @cprecioso

- **Task usage Tera templates failing with flags** -- Task `usage` field defaults using `{{ env.VAR }}` Tera templates would fail with "Variable not found in context" whenever any flags were passed. The task argument parser now uses the full computed environment instead of an empty map. [#8957](https://github.com/jdx/mise/pull/8957) by @jdx

- **Clarified attestation settings placement** -- The help messages for Python and Ruby attestation settings now specify that they must be placed under `[settings]` in `mise.toml`, not under `[python]` or `[ruby]` where they are silently ignored. [#8939](https://github.com/jdx/mise/pull/8939) by @fru1tworld

## New Contributors

* @ThomasDutartre made their first contribution in [#8955](https://github.com/jdx/mise/pull/8955)
* @jakedgy made their first contribution in [#8956](https://github.com/jdx/mise/pull/8956)
* @brander-john made their first contribution in [#8947](https://github.com/jdx/mise/pull/8947)
* @fru1tworld made their first contribution in [#8939](https://github.com/jdx/mise/pull/8939)

**Full Changelog**: https://github.com/jdx/mise/compare/v2026.4.5...v2026.4.6