jdx/mise · error
expose requires uv@ or newer, but uv@ is installed
Error message
{} expose requires uv@{} or newer, but uv@{} is installed What it means
ensure_uv_supports_expose enforces a minimum uv version of 0.8.5 (UV_WITH_EXECUTABLES_FROM_VERSION) for the `expose` option. If the resolved uv version is older than that, install bails with the installed version named in the message.
Solutions
- Upgrade uv to >= 0.8.5: `mise use uv@latest` or bump the pinned version
- Update mise.lock via `mise lock` after upgrading so the newer uv is replayed
- Remove the expose option if you must stay on an older uv
Example fix
// before
[tools]
uv = "0.7.12"
"pipx:ruff" = { version = "latest", expose = ["ruff"] }
// after
[tools]
uv = "latest"
"pipx:ruff" = { version = "latest", expose = ["ruff"] } Defensive patterns
Strategy: validation
Validate before calling
const { stdout } = await $`uv --version`;
const v = stdout.match(/uv (\d+)\.(\d+)\.(\d+)/).slice(1).map(Number);
if (v[0] < 1 && (v[0] * 1e6 + v[1] * 1e3 + v[2]) < (0 * 1e6 + 8 * 1e3 + 5))
throw new Error("expose requires uv >= 0.8.5"); Try / catch
try { await $`mise install pipx:ruff` } catch (e) {
if (/or newer/.test(e.message) && /uv@/.test(e.message)) { await $`mise use uv@latest`; await $`mise install pipx:ruff`; }
else throw e;
} Prevention
- Pin uv = "latest" or at least >= 0.8.5 wherever expose is used
- Keep uv in mise.lock current; run periodic `mise upgrade uv`
- Note the 0.8.5 minimum in team docs for expose users
When it happens
Trigger: Installing a pipx tool with expose options while the uv resolved from the toolset or PATH is semantically older than 0.8.5 (semver_is_older_than returns true).
Common situations: Pinned old uv in mise.toml (e.g. uv = "0.7.0"); stale uv on PATH predating the feature; team lockfile locking an old uv version.
Related errors
- expose requires uv@ or newer, but the installed uv version…
- 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/c0f3fef09a202472.
Report an issue: GitHub.
Appendix: source
Thrown at src/backend/pipx.rs:1153
&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 {
/// git+https://github.com/psf/black.git@24.2.0
/// psf/black@24.2.0
Git(String),
/// black@24.2.0
Pypi(String),
}
View on GitHub (pinned to 533346cc37)