{"record":{"id":"cec104df0a998f4a","repo":"jdx/mise","slug":"semantic-options-with-expose-and-dependency-prereleases","errorCode":null,"errorMessage":"{} semantic options (`with`, `expose`, and `dependency_prereleases`) require uv; install uv and ensure uvx is enabled","messagePattern":"(.+?) semantic options \\(`with`, `expose`, and `dependency_prereleases`\\) require uv; install uv and ensure uvx is enabled","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/pipx.rs","lineNumber":555,"sourceCode":"        let options = PipxOptions::new(&request_options);\n\n        // Check if pipx is available (unless uvx is being used)\n        //\n        // Asks for a *spawnable* uv, because this both picks the branch and supplies the\n        // program `uvx_cmd` hands to `CmdLineRunner`. A `uv.ps1` or a shebang-only `uv`\n        // satisfies the plain lookup, so mise would commit to the uv branch and then fail\n        // at process creation; treating it as absent falls through to pipx, which either\n        // works or reports the install instructions below. The branch only changes in the\n        // case where the branch it would have taken cannot run.\n        let uvx_allowed = Settings::get().pypi.uvx != Some(false) && !options.uvx_disabled();\n        let uv_program = if uvx_allowed {\n            self.spawnable_dependency(&ctx.config, Some(&ctx.ts), \"uv\")\n                .await\n        } else {\n            None\n        };\n        if options.has_uv_only_options()? && uv_program.is_none() {\n            bail!(\n                \"{} semantic options (`with`, `expose`, and `dependency_prereleases`) require uv; install uv and ensure uvx is enabled\",\n                self.ba.short\n            );\n        }\n        let pipx_available = if uv_program.is_none() {\n            self.spawnable_dependency(&ctx.config, Some(&ctx.ts), \"pipx\")\n                .await\n                .is_some()\n        } else {\n            false\n        };\n\n        if uv_program.is_none() {\n            // Only offer uv as an alternative when this package can actually use it.\n            // Packages that set `uvx = false` (or a `pipx.uvx = false` setting) always go\n            // through pipx, so pointing at uv there just sends people down a dead end.\n            let instructions = if uvx_allowed {\n                \"To use pipx packages with mise, you need to install pipx first:\\n  \\","sourceCodeStart":537,"sourceCodeEnd":573,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/pipx.rs#L537-L573","documentation":"install_version_ bails when the tool's options use uv-only semantic features (with, expose, dependency_prereleases) but no uv/uvx executable could be resolved as a spawnable dependency at install time. These options are implemented via uv, so uv must be installed and uvx enabled.","triggerScenarios":"Installing a pipx tool whose options contain with/expose/dependency_prereleases while `uv` is neither installed (not in the toolset nor on PATH) nor spawnable, even if uvx is nominally enabled in config.","commonSituations":"Fresh machine where `mise use pipx@...` config includes `with` options but uv was never added to the toolset; CI images that install only pipx; user previously installed uv via another manager that is no longer on PATH.","solutions":["Install uv with `mise use uv@latest` (or add uv to your toolset)","Ensure uvx is enabled (don't set uvx = false in the tool options)","Alternatively remove the with/expose/dependency_prereleases options and rely on plain pipx"],"exampleFix":"// before (mise.toml)\n[tools]\n\"pipx:ruff\" = { version = \"latest\", with = [\"rich\"] }\n// after\n[tools]\nuv = \"latest\"\n\"pipx:ruff\" = { version = \"latest\", with = [\"rich\"] }","handlingStrategy":"fallback","validationCode":"// ensure uv is present before installing tools with uv-only options\nconst ok = await isInstalled(\"uv\") || (await $`mise exec uv -- uv --version`.exitCode === 0);\nif (!ok) throw new Error(\"install uv: mise use uv@latest\");","typeGuard":null,"tryCatchPattern":"try { await $`mise install pipx:ruff` } catch (e) {\n  if (/require uv/.test(e.message)) await $`mise use uv@latest`, await $`mise install pipx:ruff`;\n  else throw e;\n}","preventionTips":["Add uv to your base toolset whenever any pipx tool uses with/expose/dependency_prereleases","Check `mise which uv` in CI setup steps before running mise install"],"tags":["pipx","uv","missing-dependency","install"],"backgroundTag":"missing-dependency","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"}