{"record":{"id":"b823e9d870bd82a6","repo":"jdx/mise","slug":"expose-requires-uv-or-newer-but-the-installed-uv-version","errorCode":null,"errorMessage":"{} expose requires uv@{} or newer, but the installed uv version could not be determined","messagePattern":"(.+?) expose requires uv@(.+?) or newer, but the installed uv version could not be determined","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/pipx.rs","lineNumber":1146,"sourceCode":"                \"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\",\n                self.ba.short, version, UV_EXCLUDE_NEWER_VERSION,\n            );\n        }\n    }\n\n    async fn ensure_uv_supports_expose(\n        &self,\n        ctx: &InstallContext,\n        options: &PipxOptions<'_>,\n    ) -> Result<()> {\n        if options.expose()?.is_empty() {\n            return Ok(());\n        }\n        let Some(version) =\n            crate::backend::semver_version_from_toolsets_or_path(self, &ctx.config, &ctx.ts, \"uv\")\n                .await\n        else {\n            bail!(\n                \"{} expose requires uv@{} or newer, but the installed uv version could not be determined\",\n                self.ba.short,\n                UV_WITH_EXECUTABLES_FROM_VERSION\n            );\n        };\n        if semver_is_older_than(&version, UV_WITH_EXECUTABLES_FROM_VERSION).unwrap_or(false) {\n            bail!(\n                \"{} expose requires uv@{} or newer, but uv@{} is installed\",\n                self.ba.short,\n                UV_WITH_EXECUTABLES_FROM_VERSION,\n                version\n            );\n        }\n        Ok(())\n    }\n}\n\nenum PipxRequest {","sourceCodeStart":1128,"sourceCodeEnd":1164,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/pipx.rs#L1128-L1164","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":"// before\n[tools]\n\"pipx:ruff\" = { version = \"latest\", expose = [\"ruff\"] }\n// after\n[tools]\nuv = \"latest\"\n\"pipx:ruff\" = { version = \"latest\", expose = [\"ruff\"] }","handlingStrategy":"validation","validationCode":"const v = (await $`uv --version`.nothrow()).stdout.trim();\nif (!/^uv \\d+\\.\\d+\\.\\d+/.test(v)) throw new Error(\"uv version unresolvable; reinstall uv via mise\");","typeGuard":null,"tryCatchPattern":"try { await $`mise install pipx:ruff` } catch (e) {\n  if (/could not be determined/.test(e.message)) { await $`mise use uv@latest`; await $`mise install pipx:ruff`; }\n  else throw e;\n}","preventionTips":["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"],"tags":["pipx","uv","version-detection","expose"],"backgroundTag":"version-detection-failed","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}