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
- Remove uvx = false so uv/uvx handles the install, or remove the with/expose/dependency_prereleases options
- Set uvx = true explicitly in the tool options
- 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 setting uvx = false, audit the tool entry for uv-only options
- Keep uv-only options in a shared config block only applied where uvx is enabled
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
- dependency_prereleases must be disallow, allow…
- dependency locking does not support uvx_args or pipx_args
- expose requires uv@ or newer, but the installed uv version…
- expose requires uv@ or newer, but uv@ is installed
- has a uv dependency graph; use uv with a PyPI package to…
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)