jdx/mise · error
expose requires uv@ or newer, but the installed uv version…
Error message
{} expose requires uv@{} or newer, but the installed uv version could not be determined What it means
ensure_uv_supports_expose verifies that the resolved uv version supports the `expose` feature (introduced in uv 0.8.5, per UV_WITH_EXECUTABLES_FROM_VERSION). When it cannot determine the installed uv version at all — semver_version_from_toolsets_or_path returns None — the check bails rather than risking an unsupported uv running the expose logic.
Solutions
- Ensure a real uv is installed via mise: `mise use uv@latest`
- Run `uv --version` manually to confirm it prints a parseable version
- Remove the expose option if you don't need executables exposure features
Example fix
// before
[tools]
"pipx:ruff" = { version = "latest", expose = ["ruff"] }
// after
[tools]
uv = "latest"
"pipx:ruff" = { version = "latest", expose = ["ruff"] } Defensive patterns
Strategy: validation
Validate before calling
const v = (await $`uv --version`.nothrow()).stdout.trim();
if (!/^uv \d+\.\d+\.\d+/.test(v)) throw new Error("uv version unresolvable; reinstall uv via mise"); Try / catch
try { await $`mise install pipx:ruff` } catch (e) {
if (/could not be determined/.test(e.message)) { await $`mise use uv@latest`; await $`mise install pipx:ruff`; }
else throw e;
} Prevention
- Install uv through mise so its version is detectable from the toolset
- Avoid wrappers/shims around uv that alter `uv --version` output
- Test `uv --version` after any PATH or uv-source changes
When it happens
Trigger: Installing a pipx tool with expose options where uv is spawnable but its version cannot be resolved from the toolset or PATH (e.g. uv binary exists but `uv --version` output can't be parsed, or resolution machinery fails).
Common situations: Custom uv builds or forks with non-standard version output; uv shim/symlink returning unexpected output; mise version-detection failing for a PATH-installed uv.
Related errors
- expose requires uv@ or newer, but uv@ is installed
- dependency locking does not support uvx_args or pipx_args
- dependency_prereleases must be disallow, allow…
- has a uv dependency graph; use uv with a PyPI package to…
- has no uv dependency graph; run `mise lock
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/b823e9d870bd82a6.
Report an issue: GitHub.
Appendix: source
Thrown at src/backend/pipx.rs:1146
"minimum_release_age is set for {} but uv@{} is older than the documented minimum uv@{} required for --exclude-newer. Older versions may fail while processing the forwarded argument. See https://mise.jdx.dev/dev-tools/backends/pypi.html",
self.ba.short, version, UV_EXCLUDE_NEWER_VERSION,
);
}
}
async fn ensure_uv_supports_expose(
&self,
ctx: &InstallContext,
options: &PipxOptions<'_>,
) -> Result<()> {
if options.expose()?.is_empty() {
return Ok(());
}
let Some(version) =
crate::backend::semver_version_from_toolsets_or_path(self, &ctx.config, &ctx.ts, "uv")
.await
else {
bail!(
"{} expose requires uv@{} or newer, but the installed uv version could not be determined",
self.ba.short,
UV_WITH_EXECUTABLES_FROM_VERSION
);
};
if semver_is_older_than(&version, UV_WITH_EXECUTABLES_FROM_VERSION).unwrap_or(false) {
bail!(
"{} expose requires uv@{} or newer, but uv@{} is installed",
self.ba.short,
UV_WITH_EXECUTABLES_FROM_VERSION,
version
);
}
Ok(())
}
}
enum PipxRequest {View on GitHub (pinned to 533346cc37)