jdx/mise · error

with, expose, and dependency_prereleases cannot be combined…

Error message

with, expose, and dependency_prereleases cannot be combined with uvx = false

What it means

validate_semantic rejects combining the uv-only semantic install options (with, expose, dependency_prereleases) with uvx = false. Those options are implemented by delegating resolution to uv/uvx; when uvx is disabled the backend falls back to plain pipx, which cannot honor them, so the combination is treated as contradictory.

Solutions

  1. Remove uvx = false so uv/uvx handles the install, or remove the with/expose/dependency_prereleases options
  2. Set uvx = true explicitly in the tool options
  3. Reinstall uv and keep uvx enabled if you need semantic dependency options

Example fix

// before
[tools]
"pipx:ruff" = { version = "latest", uvx = false, with = ["rich"] }
// after
[tools]
"pipx:ruff" = { version = "latest", with = ["rich"] }
Defensive patterns

Strategy: validation

Validate before calling

const uvOnly = ["with", "expose", "dependency_prereleases"].some(k => k in opts);
if (opts.uvx === false && uvOnly)
  throw new Error("with/expose/dependency_prereleases require uvx enabled");

Prevention

When it happens

Trigger: Configuring a pipx tool with uvx = false AND any of with = [...], expose = [...], or dependency_prereleases = "..." in the same tool options; validate_semantic is invoked via lockfile_options when resolving or locking the tool.

Common situations: User disables uvx to force classic pipx behavior but keeps leftover with/expose options from earlier config; team templates that set uvx = false globally while individual tool entries add uv-only options.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/6b26898d340d2e9a. Report an issue: GitHub.

Appendix: source

Thrown at src/backend/pipx.rs:152

            !matches!(value, "disallow" | "allow" | "if-necessary" | "explicit")
        }) {
            bail!("dependency_prereleases must be disallow, allow, if-necessary, or explicit");
        }
        Ok(value)
    }

    fn has_uv_only_options(&self) -> Result<bool> {
        Ok(!self.with()?.is_empty()
            || !self.expose()?.is_empty()
            || self.dependency_prereleases()?.is_some())
    }

    fn validate_semantic(&self) -> Result<()> {
        self.with()?;
        self.exposed_package_names()?;
        self.dependency_prereleases()?;
        if self.has_uv_only_options()? && self.uvx_disabled() {
            bail!("with, expose, and dependency_prereleases cannot be combined with uvx = false");
        }
        Ok(())
    }

    fn uv_install_args(&self) -> Result<Vec<String>> {
        let mut args = Vec::new();
        for requirement in self.with()? {
            args.extend(["--with".to_string(), requirement]);
        }
        for package in self.expose()? {
            args.extend(["--with-executables-from".to_string(), package]);
        }
        if let Some(value) = self.dependency_prereleases()? {
            args.extend(["--prerelease".to_string(), value.to_string()]);
        }
        Ok(args)
    }

View on GitHub (pinned to 533346cc37)