v2026.9.16

projectdiscovery/subfinderv2026.9.16Sep 28, 2026by mise-en-dev

Upgrading?

AI Summary

Adds per-tool libc selection for aqua tools, monorepo task path aliases, and packslip pins that survive repository renames.

Key Highlights

  • Per-tool libc selection for aqua tools
  • Monorepo task path aliases
  • Packslip pins survive repository renames
  • SLSA provenance checks require expected signer identity
  • Registry: added lstk, imessage-exporter, spotify-downloader

New Features

  • Per-tool glibc/musl selection
  • Monorepo task path aliases
  • Packslip pins by repository ID
  • SLSA signer identity check

Full Release Notes

Aqua tools can now choose glibc or musl builds one tool at a time, and monorepo roots can get short task path aliases. Packslip tools keep installing after their GitHub or GitLab repository is renamed, because mise now pins them by repository ID, recorded in a new lockfile revision 3. SLSA provenance checks now require the expected signer identity. This release also fixes regressions in `mise run --no-timings`, `cargo +nightly` and the `outdated`/`upgrade` version comparison, and speeds up shims and config loading.

## Added

- **Per-tool `libc` for aqua tools.** On glibc Linux, mise prefers a release's gnu build even when the aqua registry names the musl one. That breaks tools whose musl build is the fully static one, such as `aqua:domcyrus/rustnet`. You can now pick the build for a single tool instead of changing the global `libc` setting. [#13701](https://github.com/jdx/mise/pull/13701)

  ```toml
  [tools]
  "aqua:domcyrus/rustnet" = { version = "latest", libc = "musl" }
  ```

  The option accepts `glibc` (or `gnu`) and `musl`. mise never falls back to the other libc for that tool. The option applies to install, `mise lock`, and checksum, signature and provenance lookups, and it is recorded in the lockfile's tool options. A platform that already names a libc (a musl host or a `linux-*-musl` lockfile platform) still wins. A version that is already installed keeps its build until you run `mise install --force`. `mise ls-remote` still uses the host libc. If a registry template uses a variable named `libc`, set it as `vars.libc`.

- **Path aliases for monorepo tasks.** Deeply nested config roots can now have a short name. [#13756](https://github.com/jdx/mise/pull/13756)

  ```toml
  monorepo_root = true

  [monorepo]
  config_roots = ["foo/bar/baz/abc/123"]

  [monorepo.path_aliases]
  "123" = "foo/bar/baz/abc/123"
  ```

  `mise run //123:build` runs `//foo/bar/baz/abc/123:build`. Aliases also work in task dependencies, in patterns like `//123:*`, and in child paths like `//123/sub:build`. Each alias must be a single path segment, must point at a configured root, and can't overlap an existing root path. A task's full path is still its canonical name.

- **Packslip tools keep installing after a repository rename.** mise now pins GitHub and GitLab packslip projects by the repository ID recorded in the signing certificate, not only by name. If `old/tool` is renamed to `new/tool` under the same owner, `packslip:github.com/old/tool` keeps installing and prints a warning once, asking you to update the config. You don't need `mise packslip forget`. mise refuses a transfer to another owner. It also refuses a different repository that takes over a pinned name, which is how a deleted and re-created name looks. To accept either one, run `mise packslip forget` for the old name, and for a re-created repository also remove the tool's `mise.lock` entries. [#13702](https://github.com/jdx/mise/pull/13702), [#13738](https://github.com/jdx/mise/pull/13738)

  In lockfile revision 3, the IDs are stored as:

  ```toml
  [tools.hk."platforms.linux-x64"]
  repository_ids = { repository = "922514152", owner = "216188" }
  ```

- **`mise dot track --allow-plaintext`.** Directly tracking a file with a credential-like name (for example `~/commit-mossy-token.md`) used to report success while every history save quietly left the file out. `mise dot track` now asks whether to save the file in plaintext, and the default answer is No. In non-interactive use, pass `--allow-plaintext`. `--yes` does not approve plaintext. The choice is saved as `allow_plaintext = true` on the `[dotfiles]` entry. For real credentials, use `--encrypt`. [#13749](https://github.com/jdx/mise/pull/13749)

- **Registry:** `mise use mbx` now resolves to `mr-boxington`. [#13752](https://github.com/jdx/mise/pull/13752)

## Fixed

- `mise outdated` and upgrade warnings no longer offer an older release as an update when the installed version has a `v` or `V` prefix. For example, `v2.1.280 β†’ 2.1.278` was shown as an update. Versions that differ only in build metadata (for example `1.36.4+k3s1` and `1.36.4+k3s2`) are now treated as equal. [#13690](https://github.com/jdx/mise/pull/13690) (@himkt)
- `mise run --no-cache` and `mise tasks run --no-cache` now clone remote `git::` task includes again, and fetch remote tasks that run as dependencies again. Before, both kept using the cached copy. [#13697](https://github.com/jdx/mise/pull/13697) (@irisTa56)
- `mise run --no-timings` hides each task's "Finished in …" line again, not only the run total. It also overrides `MISE_TASK_TIMINGS=1`. This had regressed in v2025.11.2. [#13718](https://github.com/jdx/mise/pull/13718)
- `cargo +nightly` works again with `rust = "nightly"`. Since 2026.8.6 mise installs a dated nightly, so rustup had no toolchain named `nightly`. Depending on rustup's auto-install setting, `cargo +nightly` then either failed or downloaded a second, unpinned nightly. mise now also sets up rustup's `nightly-<host>` toolchain from the pinned nightly, using reflinks or hardlinks. It leaves alone a rustup nightly that is newer or has extra components or targets. Explicitly dated requests such as `nightly-2026-08-13` don't touch it. Existing installs pick this up on their next nightly install, or right away with `mise install -f rust`. [#13707](https://github.com/jdx/mise/pull/13707)
- Running `mise dot track` again on a path that is already tracked now reports "already tracked". It no longer prompts, rewrites the config, or records an empty checkpoint. Changed file contents and flags that change the declaration (such as `--no-autosave`) are still saved. [#13648](https://github.com/jdx/mise/pull/13648)
- Blob-pack downloads from the remote cache now retry transient stream errors, the same way single blob downloads do. [#13715](https://github.com/jdx/mise/pull/13715)

## Security

- **SLSA provenance must come from the expected signer.** Before, any valid Sigstore signature, even from an unrelated workflow, passed SLSA verification. mise now checks the certificate's URI identity and OIDC issuer against the values configured for the tool:
  - aqua registry entries: `signer_identity` and `signer_issuer` under `slsa_provenance`
  - `github:` tools: the `slsa_signer_identity` and `slsa_signer_issuer` tool options (the identity supports `{{version}}` templating)
  - vfox plugins: `slsa_signer_identity` and `slsa_signer_issuer` returned from `PreInstall`

  If a tool doesn't configure both values, mise skips the SLSA check and uses any other verification available. For now this applies to the bundled aqua packages that have SLSA metadata but no signer fields. SLSA lock entries are checked again on every install, even when a checksum is present. [#13725](https://github.com/jdx/mise/pull/13725)
- Public-key DSSE bundles used by aqua and vfox verification must now have a SHA-256 subject digest that matches the downloaded artifact. Before, a valid bundle could be reused to verify a different download. [#13721](https://github.com/jdx/mise/pull/13721)

## Performance

- Shims no longer run `rustup` checks when `rust` is configured alongside other tools. The same goes for `mise exec` with auto-install disabled. One report measured the `go` shim at about 31 ms with `rust` in the config, compared with 12 ms without it. `mise install`, and `mise exec` with auto-install on, still detect and repair missing rustup components. [#13705](https://github.com/jdx/mise/pull/13705)
- Config loading and fuzzy version resolution (for example `node = "24"`) do less work: plugin shorthands are built without checking every registry tool's backends, global-config checks stop resolving symlinks for every tool, and fuzzy matching no longer compiles regexes. [#13694](https://github.com/jdx/mise/pull/13694), [#13695](https://github.com/jdx/mise/pull/13695), [#13696](https://github.com/jdx/mise/pull/13696)

## Documentation

- The task docs now give the correct default job count (8). They also describe the default output mode correctly: `prefix` when tasks run in parallel and `interleave` when they run in sequence. [#13716](https://github.com/jdx/mise/pull/13716)

## Breaking Changes

- **Lockfile revision 3.** New and empty `mise.lock` files are written as `lockfile_version = 3`, and older mise versions reject them. Existing lockfiles keep their revision when mise writes to them. When a revision 2 lockfile gets packslip repository IDs, mise warns and leaves them out. To store them, run `mise lock --upgrade` once everyone who shares the lockfile is on this release.
- **SLSA checks for locked tools.** A lockfile entry that requires SLSA now fails with an explanation if the tool has no expected signer configured. To fix it, configure the signer or refresh the entry with `mise lock`.
- **Dotfiles history shared across machines.** Older mise versions can't read enrollment metadata that includes `allow_plaintext`. Upgrade every machine that shares the history before you use `--allow-plaintext`.

## New Contributors

* @irisTa56 made their first contribution in [#13697](https://github.com/jdx/mise/pull/13697)

**Full Changelog**: https://github.com/jdx/mise/compare/vfox-v2026.9.17...v2026.9.16

## πŸ’š Sponsor mise

mise is built and maintained by [@jdx](https://github.com/jdx), an open source developer at [**entire.io**](https://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](https://jdx.dev/sponsors.html). Your support funds ongoing development and helps keep mise fast, free, and independent.

Related Repositories