Skip to content

feat(task): add [monorepo].config_roots for explicit config root listing#7705

Merged
jdx merged 6 commits intomainfrom
feat/monorepo-config-roots
Jan 17, 2026
Merged

feat(task): add [monorepo].config_roots for explicit config root listing#7705
jdx merged 6 commits intomainfrom
feat/monorepo-config-roots

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Jan 17, 2026

Summary

  • Add [monorepo].config_roots to mise.toml for explicitly listing monorepo config roots
  • Skip filesystem walking when config_roots is defined for better performance
  • Support single-level glob patterns (*) for flexible path matching
  • Deprecate automatic filesystem discovery with a warning

Usage

# mise.toml
experimental_monorepo_root = true

[monorepo]
config_roots = [
    "packages/frontend",
    "packages/backend",
    "services/*",          # Single-level glob
]

Test plan

  • E2E test test_task_monorepo_config_roots covers explicit paths, globs, and exclusion
  • Existing monorepo tests continue to pass (with deprecation warning)

🤖 Generated with Claude Code


Note

Monorepo task discovery overhaul

  • Introduces [monorepo].config_roots in mise.toml (schema + parsing) to explicitly list config roots; supports single-level * globs
  • Loader now expands config_roots and loads tasks from those dirs; falls back to deprecated auto-walk with a warning
  • New helpers: find_monorepo_config, expand_config_roots, has_mise_config; plumbs monorepo through config structs
  • Updates docs to a new Config Roots section describing usage, benefits, and deprecation of auto discovery
  • E2E: adds test_task_monorepo_config_roots and updates existing monorepo tests to specify config_roots

Written by Cursor Bugbot for commit 31729e0. This will update automatically on new commits. Configure here.

Copilot AI review requested due to automatic review settings January 17, 2026 14:31
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds explicit configuration for monorepo task discovery through a new [monorepo].config_roots setting, replacing the previous automatic filesystem walking approach for better performance and control.

Changes:

  • Introduced [monorepo].config_roots configuration array supporting explicit paths and single-level glob patterns (*)
  • Deprecated automatic filesystem discovery with a warning message
  • Fixed symlink detection logic in the HTTP backend to enable proper upgrade detection for cached tools

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/config/mod.rs Added config root expansion logic and deprecated automatic discovery
src/config/config_file/mod.rs Added monorepo() method to ConfigFile trait
src/config/config_file/mise_toml.rs Implemented MonorepoConfig struct and integrated into MiseToml
src/cli/ls.rs Refactored symlink detection to check install paths directly
src/backend/mod.rs Improved symlink_path logic to properly detect backend-managed symlinks
schema/mise.json Added JSON schema definitions for monorepo configuration
e2e/tasks/test_task_monorepo_config_roots Added comprehensive E2E test for config_roots feature
e2e/backend/test_http_upgrade Added test validating HTTP backend upgrade functionality
docs/tasks/monorepo.md Updated documentation with config_roots usage and deprecation notice

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

.ok()
.and_then(|p| p.to_str())
.unwrap_or("");
ctx.should_load_subdir(rel_path, root.to_str().unwrap_or(""))
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The unwrap_or("") fallback for invalid UTF-8 paths could lead to incorrect filtering behavior. Consider handling this case more explicitly or documenting the assumption that paths are valid UTF-8.

Copilot uses AI. Check for mistakes.
Comment on lines +1671 to +1675
fn has_mise_config(dir: &Path) -> bool {
DEFAULT_CONFIG_FILENAMES
.iter()
.any(|f| dir.join(f).exists())
}
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This helper function lacks documentation explaining its purpose and the source of DEFAULT_CONFIG_FILENAMES. Add a doc comment describing what constitutes a 'mise config' and which filenames are checked.

Copilot uses AI. Check for mistakes.
Comment on lines +106 to +110
/// Configuration for [monorepo] section in mise.toml
#[derive(Debug, Default, Clone, Deserialize)]
pub struct MonorepoConfig {
/// Explicit list of config roots for monorepo task discovery.
/// Supports single-level glob patterns (*).
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation should clarify what happens when config_roots is empty versus when the entire [monorepo] section is absent, as these scenarios may have different behaviors based on the implementation in discover_monorepo_subdirs.

Suggested change
/// Configuration for [monorepo] section in mise.toml
#[derive(Debug, Default, Clone, Deserialize)]
pub struct MonorepoConfig {
/// Explicit list of config roots for monorepo task discovery.
/// Supports single-level glob patterns (*).
/// Configuration for the `[monorepo]` section in `mise.toml`.
///
/// Behavior notes:
/// - If the entire `[monorepo]` section is **omitted** from `mise.toml`,
/// the monorepo discovery logic in `discover_monorepo_subdirs` will fall
/// back to its default behavior (for example, using built‑in conventions
/// for locating project/task configuration).
/// - If `[monorepo]` is present but `config_roots = []` is specified
/// explicitly, this deserializes as an explicit empty list and is passed
/// through to `discover_monorepo_subdirs`, allowing it to distinguish
/// "no override / use defaults" from "no config roots".
#[derive(Debug, Default, Clone, Deserialize)]
pub struct MonorepoConfig {
/// Explicit list of config roots for monorepo task discovery.
///
/// Supports single-level glob patterns (`*`).
///
/// When omitted, this field defaults to an empty list via `#[serde(default)]`.
/// The caller of `MonorepoConfig` (notably `discover_monorepo_subdirs`)
/// is responsible for deciding how to interpret an empty list, which may
/// differ from the behavior when the entire `[monorepo]` section is absent.

Copilot uses AI. Check for mistakes.
let target = if target.is_absolute() {
target
} else {
path.parent().unwrap_or(&path).join(&target)
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using unwrap_or(&path) when parent() returns None could create a confusing path if the install is at the filesystem root. Consider handling this edge case more explicitly or adding a comment explaining why this fallback is safe.

Suggested change
path.parent().unwrap_or(&path).join(&target)
// For relative symlinks, resolve them relative to the directory
// containing `path`. If `path` has no parent, it must be at the
// filesystem root (e.g. "/"), and relative symlink targets are
// then resolved relative to that root.
match path.parent() {
Some(parent) => parent.join(&target),
None => PathBuf::from("/").join(&target),
}

Copilot uses AI. Check for mistakes.
- `dist`
- `build`
::: warning Automatic Discovery Deprecated
Automatic filesystem walking to discover monorepo subdirectories is deprecated. If you don't define `[monorepo].config_roots`, mise will still walk the filesystem but will emit a deprecation warning. Please migrate to explicit config roots.
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The deprecation notice should include information about when this feature will be removed (if planned) to help users understand the urgency of migrating.

Suggested change
Automatic filesystem walking to discover monorepo subdirectories is deprecated. If you don't define `[monorepo].config_roots`, mise will still walk the filesystem but will emit a deprecation warning. Please migrate to explicit config roots.
Automatic filesystem walking to discover monorepo subdirectories is deprecated. If you don't define `[monorepo].config_roots`, mise will still walk the filesystem but will emit a deprecation warning. Please migrate to explicit config roots. There is currently no scheduled removal date for this behavior, but it may be removed in a future major release, so plan your migration accordingly.

Copilot uses AI. Check for mistakes.
@jdx jdx force-pushed the feat/monorepo-config-roots branch 2 times, most recently from be1adba to a0f5d7b Compare January 17, 2026 14:34
Add a new `[monorepo]` section to mise.toml that allows explicitly listing
config roots for monorepo task discovery. This provides better performance
by skipping filesystem walking.

Features:
- Explicit path listing: `config_roots = ["packages/frontend", "packages/backend"]`
- Single-level glob support: `config_roots = ["services/*"]`
- Deprecation warning when falling back to automatic discovery

Automatic filesystem walking for monorepo discovery is now deprecated.
Users should migrate to explicit config_roots.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx jdx force-pushed the feat/monorepo-config-roots branch from a0f5d7b to 2858526 Compare January 17, 2026 14:38
@jdx
Copy link
Owner Author

jdx commented Jan 17, 2026

bugbot run

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no bugs!

@github-actions
Copy link

github-actions bot commented Jan 17, 2026

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.3 x -- echo 19.8 ± 0.5 19.2 26.7 1.00
mise x -- echo 20.2 ± 1.0 19.1 30.6 1.02 ± 0.06

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.3 env 19.6 ± 0.7 18.7 25.3 1.00 ± 0.04
mise env 19.6 ± 0.5 18.6 22.1 1.00

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.3 hook-env 19.5 ± 0.3 18.9 20.6 1.00
mise hook-env 19.7 ± 0.7 18.8 29.4 1.01 ± 0.04

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.3 ls 18.0 ± 0.4 17.3 19.4 1.00
mise ls 18.4 ± 0.6 17.2 20.5 1.02 ± 0.04

xtasks/test/perf

Command mise-2026.1.3 mise Variance
install (cached) 109ms 112ms -2%
ls (cached) 67ms 67ms +0%
bin-paths (cached) 70ms 71ms -1%
task-ls (cached) 282ms ⚠️ 733ms -61%

⚠️ Warning: task-ls cached performance variance is -61%

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

Update all monorepo e2e tests to explicitly define config_roots instead
of relying on automatic filesystem discovery (which is now deprecated).

Also extends has_mise_config() to recognize directories with .mise/tasks
or mise-tasks directories for consistency with auto-discovery behavior.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx jdx force-pushed the feat/monorepo-config-roots branch from c852f7c to 494a290 Compare January 17, 2026 15:23
@jdx
Copy link
Owner Author

jdx commented Jan 17, 2026

bugbot run

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

&& !patterns.is_empty()
{
return expand_config_roots(root, patterns, ctx);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Empty config_roots falls back to deprecated walking unexpectedly

Low Severity

When config_roots = [] is explicitly set, the code falls back to deprecated filesystem walking instead of returning an empty list. The comment says "If [monorepo].config_roots is defined, use explicit paths" but the condition !patterns.is_empty() treats an empty array as "not defined." A user setting config_roots = [] would expect zero subdirs discovered, but instead gets all subdirs via deprecated walking plus a deprecation warning.

Fix in Cursor Fix in Web

warn!("[monorepo] config_roots: '{}' does not exist", pattern);
}
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing root exclusion allows duplicate task loading

Low Severity

The expand_config_roots function lacks a check to exclude the monorepo root from the returned subdirs. Patterns like "", ".", or "subdir/.." could cause the root directory to be added to subdirs. The deprecated filesystem walking code explicitly skips the root (via if dir == root { continue; } and min_depth(1)), but this new function doesn't. When root is included in subdirs, its tasks get loaded twice, causing duplicate entries.

Fix in Cursor Fix in Web

@jdx jdx enabled auto-merge (squash) January 17, 2026 15:45
@jdx jdx merged commit 8f9f96d into main Jan 17, 2026
33 checks passed
@jdx jdx deleted the feat/monorepo-config-roots branch January 17, 2026 15:47
jdx pushed a commit that referenced this pull request Jan 17, 2026
### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by
@jdx in [#7708](#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in
[#7707](#7707)
- **(http)** add version_expr support and Tera templating by @jdx in
[#7723](#7723)
- **(task)** add [monorepo].config_roots for explicit config root
listing by @jdx in [#7705](#7705)
- **(task)** support env vars in task dependencies by @jdx in
[#7724](#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in
[#7713](#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by
@stk0vrfl0w in [#7696](#7696)
- **(python)** sort CPython versions at end of ls-remote output by @jdx
in [#7721](#7721)
- **(task)** resolve remote task files before display and validation
commands by @yannrouillard in
[#7681](#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in
[#7699](#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in
[#7698](#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in
[#7726](#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in
[#7716](#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by
@renovate[bot] in [#7618](#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in
[#7661](#7661)
- remove low-usage asdf plugins by @jdx in
[#7701](#7701)
- disable mirrord test by @jdx in
[#7703](#7703)
- use vfox-dotnet as default backend by @jdx in
[#7704](#7704)
- use vfox-lua as default lua backend by @jdx in
[#7706](#7706)
- add vfox backend for redis by @jdx in
[#7709](#7709)
- use vfox-postgres as default postgres backend by @jdx in
[#7710](#7710)
- use github backend for kotlin by @jdx in
[#7711](#7711)
- add vfox backend for leiningen by @jdx in
[#7714](#7714)
- use pipx backend for meson by @jdx in
[#7712](#7712)
- use github backend for crystal by @jdx in
[#7715](#7715)
- use conda backend for sqlite by @jdx in
[#7718](#7718)
- use conda backend for make by @jdx in
[#7719](#7719)
- swift-package-list use github backend by @jdx in
[#7720](#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in
[#7725](#7725)

### New Contributors

- @yannrouillard made their first contribution in
[#7681](#7681)
- @stk0vrfl0w made their first contribution in
[#7696](#7696)

## 📦 Aqua Registry Updates

#### New Packages (4)

- [`chevdor/tera-cli`](https://github.com/chevdor/tera-cli)
- [`goforj/wire`](https://github.com/goforj/wire)
- [`gravitational/teleport`](https://github.com/gravitational/teleport)
- [`jackchuka/mdschema`](https://github.com/jackchuka/mdschema)

#### Updated Packages (2)

- [`ollama/ollama`](https://github.com/ollama/ollama)
- [`twpayne/chezmoi`](https://github.com/twpayne/chezmoi)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 22, 2026
## [2026.1.5](https://github.com/jdx/mise/compare/v2026.1.4..v2026.1.5) - 2026-01-19

### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in [#7746](jdx/mise#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx in [#7737](jdx/mise#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in [#7739](jdx/mise#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx in [#7757](jdx/mise#7757)
- dry filetask parsing and validation by @makp0 in [#7738](jdx/mise#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by @jdx in [#7756](jdx/mise#7756)
- schema missing env required string variant by @vadimpiven in [#7734](jdx/mise#7734)
- validate unknown fields in filetask headers by @makp0 in [#7733](jdx/mise#7733)
- disable schemacrawler test by @jdx in [#7743](jdx/mise#7743)
- replace double forward slash with single slash in get_task_lists by @collinstevens in [#7744](jdx/mise#7744)
- require LLM for release notes and include aqua section by @jdx in [#7745](jdx/mise#7745)
- preserve {{ version }} in tool options during config load by @jdx in [#7755](jdx/mise#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in [#7740](jdx/mise#7740)
- add pitchfork promotion by @jdx in [#7747](jdx/mise#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in [#7736](jdx/mise#7736)
- lock file maintenance by @renovate[bot] in [#7749](jdx/mise#7749)

### Chore

- bump xx to 2.3.1 by @jdx in [#7753](jdx/mise#7753)

### New Contributors

- @collinstevens made their first contribution in [#7744](jdx/mise#7744)
- @makp0 made their first contribution in [#7738](jdx/mise#7738)
- @vadimpiven made their first contribution in [#7734](jdx/mise#7734)

## [2026.1.4](https://github.com/jdx/mise/compare/v2026.1.3..v2026.1.4) - 2026-01-17

### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by @jdx in [#7708](jdx/mise#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in [#7707](jdx/mise#7707)
- **(http)** add version_expr support and Tera templating by @jdx in [#7723](jdx/mise#7723)
- **(task)** add [monorepo].config_roots for explicit config root listing by @jdx in [#7705](jdx/mise#7705)
- **(task)** support env vars in task dependencies by @jdx in [#7724](jdx/mise#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in [#7713](jdx/mise#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by @stk0vrfl0w in [#7696](jdx/mise#7696)
- **(locked)** exempt tool stubs from lockfile requirements by @jdx in [#7729](jdx/mise#7729)
- **(python)** sort CPython versions at end of ls-remote output by @jdx in [#7721](jdx/mise#7721)
- **(task)** resolve remote task files before display and validation commands by @yannrouillard in [#7681](jdx/mise#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in [#7699](jdx/mise#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in [#7698](jdx/mise#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in [#7726](jdx/mise#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in [#7716](jdx/mise#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by @renovate[bot] in [#7618](jdx/mise#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in [#7661](jdx/mise#7661)
- remove low-usage asdf plugins by @jdx in [#7701](jdx/mise#7701)
- disable mirrord test by @jdx in [#7703](jdx/mise#7703)
- use vfox-dotnet as default backend by @jdx in [#7704](jdx/mise#7704)
- use vfox-lua as default lua backend by @jdx in [#7706](jdx/mise#7706)
- add vfox backend for redis by @jdx in [#7709](jdx/mise#7709)
- use vfox-postgres as default postgres backend by @jdx in [#7710](jdx/mise#7710)
- use github backend for kotlin by @jdx in [#7711](jdx/mise#7711)
- add vfox backend for leiningen by @jdx in [#7714](jdx/mise#7714)
- use pipx backend for meson by @jdx in [#7712](jdx/mise#7712)
- use github backend for crystal by @jdx in [#7715](jdx/mise#7715)
- use conda backend for sqlite by @jdx in [#7718](jdx/mise#7718)
- use conda backend for make by @jdx in [#7719](jdx/mise#7719)
- swift-package-list use github backend by @jdx in [#7720](jdx/mise#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in [#7725](jdx/mise#7725)

### New Contributors

- @yannrouillard made their first contribution in [#7681](jdx/mise#7681)
- @stk0vrfl0w made their first contribution in [#7696](jdx/mise#7696)

## [2026.1.3](https://github.com/jdx/mise/compare/v2026.1.2..v2026.1.3) - 2026-01-16

### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in [#7668](jdx/mise#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in [#7670](jdx/mise#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in [#7669](jdx/mise#7669)
- add no hooks and no env flags by @aacebedo in [#7560](jdx/mise#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked installations by @TyceHerrman in [#7012](jdx/mise#7012)
- **(backend)** reject architecture mismatches in asset selection by @jdx in [#7672](jdx/mise#7672)
- **(backend)** canonicalize symlink target before installs check by @jdx in [#7671](jdx/mise#7671)
- **(npm)** avoid circular dependency when npm is in dependencies by @AprilNEA in [#7644](jdx/mise#7644)
- **(self-update)** skip update when already at latest version by @jdx in [#7666](jdx/mise#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in [#7667](jdx/mise#7667)
- GitHub token fallback by @subdigital in [#7673](jdx/mise#7673)
- inherit tasks from parent configs in monorepos by @chadxz in [#7643](jdx/mise#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in [#7660](jdx/mise#7660)
- **(contributing)** update registry PR title rule by @scop in [#7663](jdx/mise#7663)
- remove 404 link from contributing by @opswole in [#7692](jdx/mise#7692)
- clarify that backend plugins should sort the version list by @ofalvai in [#7680](jdx/mise#7680)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by @renovate[bot] in [#7685](jdx/mise#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by @renovate[bot] in [#7686](jdx/mise#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot] in [#7687](jdx/mise#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot] in [#7688](jdx/mise#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805 by @renovate[bot] in [#7690](jdx/mise#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in [#7691](jdx/mise#7691)

### 📦 Registry

- add oh-my-posh by @scop in [#7659](jdx/mise#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in [#7677](jdx/mise#7677)
- remove misconfigured bin_path option from kscript by @risu729 in [#7693](jdx/mise#7693)

### New Contributors

- @AprilNEA made their first contribution in [#7644](jdx/mise#7644)
- @opswole made their first contribution in [#7692](jdx/mise#7692)
- @subdigital made their first contribution in [#7673](jdx/mise#7673)
- @aacebedo made their first contribution in [#7560](jdx/mise#7560)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 25, 2026
## [2026.1.5](https://github.com/jdx/mise/compare/v2026.1.4..v2026.1.5) - 2026-01-19

### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in [#7746](jdx/mise#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx in [#7737](jdx/mise#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in [#7739](jdx/mise#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx in [#7757](jdx/mise#7757)
- dry filetask parsing and validation by @makp0 in [#7738](jdx/mise#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by @jdx in [#7756](jdx/mise#7756)
- schema missing env required string variant by @vadimpiven in [#7734](jdx/mise#7734)
- validate unknown fields in filetask headers by @makp0 in [#7733](jdx/mise#7733)
- disable schemacrawler test by @jdx in [#7743](jdx/mise#7743)
- replace double forward slash with single slash in get_task_lists by @collinstevens in [#7744](jdx/mise#7744)
- require LLM for release notes and include aqua section by @jdx in [#7745](jdx/mise#7745)
- preserve {{ version }} in tool options during config load by @jdx in [#7755](jdx/mise#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in [#7740](jdx/mise#7740)
- add pitchfork promotion by @jdx in [#7747](jdx/mise#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in [#7736](jdx/mise#7736)
- lock file maintenance by @renovate[bot] in [#7749](jdx/mise#7749)

### Chore

- bump xx to 2.3.1 by @jdx in [#7753](jdx/mise#7753)

### New Contributors

- @collinstevens made their first contribution in [#7744](jdx/mise#7744)
- @makp0 made their first contribution in [#7738](jdx/mise#7738)
- @vadimpiven made their first contribution in [#7734](jdx/mise#7734)

## [2026.1.4](https://github.com/jdx/mise/compare/v2026.1.3..v2026.1.4) - 2026-01-17

### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by @jdx in [#7708](jdx/mise#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in [#7707](jdx/mise#7707)
- **(http)** add version_expr support and Tera templating by @jdx in [#7723](jdx/mise#7723)
- **(task)** add [monorepo].config_roots for explicit config root listing by @jdx in [#7705](jdx/mise#7705)
- **(task)** support env vars in task dependencies by @jdx in [#7724](jdx/mise#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in [#7713](jdx/mise#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by @stk0vrfl0w in [#7696](jdx/mise#7696)
- **(locked)** exempt tool stubs from lockfile requirements by @jdx in [#7729](jdx/mise#7729)
- **(python)** sort CPython versions at end of ls-remote output by @jdx in [#7721](jdx/mise#7721)
- **(task)** resolve remote task files before display and validation commands by @yannrouillard in [#7681](jdx/mise#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in [#7699](jdx/mise#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in [#7698](jdx/mise#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in [#7726](jdx/mise#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in [#7716](jdx/mise#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by @renovate[bot] in [#7618](jdx/mise#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in [#7661](jdx/mise#7661)
- remove low-usage asdf plugins by @jdx in [#7701](jdx/mise#7701)
- disable mirrord test by @jdx in [#7703](jdx/mise#7703)
- use vfox-dotnet as default backend by @jdx in [#7704](jdx/mise#7704)
- use vfox-lua as default lua backend by @jdx in [#7706](jdx/mise#7706)
- add vfox backend for redis by @jdx in [#7709](jdx/mise#7709)
- use vfox-postgres as default postgres backend by @jdx in [#7710](jdx/mise#7710)
- use github backend for kotlin by @jdx in [#7711](jdx/mise#7711)
- add vfox backend for leiningen by @jdx in [#7714](jdx/mise#7714)
- use pipx backend for meson by @jdx in [#7712](jdx/mise#7712)
- use github backend for crystal by @jdx in [#7715](jdx/mise#7715)
- use conda backend for sqlite by @jdx in [#7718](jdx/mise#7718)
- use conda backend for make by @jdx in [#7719](jdx/mise#7719)
- swift-package-list use github backend by @jdx in [#7720](jdx/mise#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in [#7725](jdx/mise#7725)

### New Contributors

- @yannrouillard made their first contribution in [#7681](jdx/mise#7681)
- @stk0vrfl0w made their first contribution in [#7696](jdx/mise#7696)

## [2026.1.3](https://github.com/jdx/mise/compare/v2026.1.2..v2026.1.3) - 2026-01-16

### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in [#7668](jdx/mise#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in [#7670](jdx/mise#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in [#7669](jdx/mise#7669)
- add no hooks and no env flags by @aacebedo in [#7560](jdx/mise#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked installations by @TyceHerrman in [#7012](jdx/mise#7012)
- **(backend)** reject architecture mismatches in asset selection by @jdx in [#7672](jdx/mise#7672)
- **(backend)** canonicalize symlink target before installs check by @jdx in [#7671](jdx/mise#7671)
- **(npm)** avoid circular dependency when npm is in dependencies by @AprilNEA in [#7644](jdx/mise#7644)
- **(self-update)** skip update when already at latest version by @jdx in [#7666](jdx/mise#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in [#7667](jdx/mise#7667)
- GitHub token fallback by @subdigital in [#7673](jdx/mise#7673)
- inherit tasks from parent configs in monorepos by @chadxz in [#7643](jdx/mise#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in [#7660](jdx/mise#7660)
- **(contributing)** update registry PR title rule by @scop in [#7663](jdx/mise#7663)
- remove 404 link from contributing by @opswole in [#7692](jdx/mise#7692)
- clarify that backend plugins should sort the version list by @ofalvai in [#7680](jdx/mise#7680)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by @renovate[bot] in [#7685](jdx/mise#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by @renovate[bot] in [#7686](jdx/mise#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot] in [#7687](jdx/mise#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot] in [#7688](jdx/mise#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805 by @renovate[bot] in [#7690](jdx/mise#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in [#7691](jdx/mise#7691)

### 📦 Registry

- add oh-my-posh by @scop in [#7659](jdx/mise#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in [#7677](jdx/mise#7677)
- remove misconfigured bin_path option from kscript by @risu729 in [#7693](jdx/mise#7693)

### New Contributors

- @AprilNEA made their first contribution in [#7644](jdx/mise#7644)
- @opswole made their first contribution in [#7692](jdx/mise#7692)
- @subdigital made their first contribution in [#7673](jdx/mise#7673)
- @aacebedo made their first contribution in [#7560](jdx/mise#7560)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants