jdx/mise · error
daemon requests @ , conflicting with another daemon; use…
Error message
daemon {} requests {tool}@{version}, conflicting with another daemon; use one version per tool What it means
mise daemons each declare tool requests; when two daemons in the same tool-request set request different versions of the same tool and both requests come from mise.toml daemon sources, mise refuses to start because one version per tool is supported. This check runs in add_tool_requests while merging each daemon's requested tools into the shared set.
Solutions
- Pick one version and make every daemon request that same tool version
- Remove the duplicate/conflicting tool request from one of the daemons
- If different versions are genuinely needed, split them across separate configs that are not used together
Example fix
// before
[daemons.db]
preset = "postgres"
tools = { postgres = "16" }
[daemons.db-old]
preset = "postgres"
tools = { postgres = "17" }
// after
[daemons.db]
preset = "postgres"
tools = { postgres = "16" } Defensive patterns
Strategy: validation
Validate before calling
# shell: ensure all daemons request the same version per tool grep -A3 'daemons' mise.toml | grep -E 'postgres|redis' # eyeball versions match
Prevention
- Define each daemon tool version once in a shared config section
- Avoid duplicating daemon blocks when copying configs
- One version per tool across all daemons in a project
When it happens
Trigger: Starting (or rendering) daemons where two daemon definitions request the same tool at different versions, e.g. daemon A requests postgres@16 and daemon B requests postgres@17, and both requests originate from mise.toml daemon source.
Common situations: Copying an existing daemon block in mise.toml and changing its version without removing the old one; a project and an environment-specific mise.toml each declaring the same tool for daemons at different versions.
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
- bootstrap service ' ' cannot be both masked and running
- bootstrap service ' ' cannot be both masked and enabled
- conflicting bootstrap secret declarations for
- conflicting bootstrap service declarations for
- conflicting bootstrap service declarations for
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/2a165e3194480eb8.
Report an issue: GitHub.
Appendix: source
Thrown at src/daemons/mod.rs:159
.map(str::to_string)
.ok_or_else(|| eyre::eyre!("daemon {key} must be a string"))
})
.transpose()
}
impl DaemonSet {
pub(crate) fn add_tool_requests(&self, trs: &mut ToolRequestSet) -> Result<()> {
for daemon in self.daemons.values() {
let Some((tool, version)) = &daemon.tool else {
continue;
};
let ba = crate::cli::args::BackendArg::from(tool.as_str());
if let Some(existing) = trs.tools.get(&ba) {
// Explicit declarations are validated against backend resolution before starting.
if existing.iter().all(|tr| tr.source().is_mise_toml_daemon())
&& existing.iter().any(|tr| tr.version() != *version)
{
bail!(
"daemon {} requests {tool}@{version}, conflicting with another daemon; use one version per tool",
daemon.name
);
}
continue;
}
let source = ToolSource::MiseTomlDaemon(daemon.source.clone());
let request = ToolRequest::new(ba.into(), version, source.clone())?;
trs.add_version(request, &source);
}
Ok(())
}
pub(crate) fn env_entries(&self) -> Vec<(EnvDirective, PathBuf)> {
self.daemons
.values()
.flat_map(|daemon| {
daemon.exports.iter().map(|(k, v)| {View on GitHub (pinned to 533346cc37)