{"record":{"id":"2a8841d1b70fe052","repo":"jdx/mise","slug":"daemon-presets-are-not-supported-on-windows-yet-runtime","errorCode":null,"errorMessage":"daemon presets are not supported on Windows yet","messagePattern":"daemon presets are not supported on Windows yet","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/daemons/runtime.rs","lineNumber":394,"sourceCode":"                toml::Value::String(crate::env::MISE_BIN.to_string_lossy().into_owned()),\n            )])),\n        )])),\n    );\n    doc.insert(\"daemons\".into(), toml::Value::Table(daemons));\n    Ok(header + &toml::to_string_pretty(&doc)?)\n}\n\npub(crate) async fn validate_tools(\n    set: &DaemonSet,\n    config: &Arc<Config>,\n    ts: &Toolset,\n) -> Result<()> {\n    for daemon in set.daemons.values() {\n        let Some((tool, version)) = &daemon.tool else {\n            continue;\n        };\n        if cfg!(windows) {\n            bail!(\"daemon presets are not supported on Windows yet\");\n        }\n        let ba: crate::cli::args::BackendArg = tool.as_str().into();\n        let Some(versions) = ts.versions.get(&ba) else {\n            bail!(\"daemon {} requires {tool}@{version}\", daemon.name);\n        };\n        let actual = versions\n            .versions\n            .first()\n            .ok_or_else(|| eyre::eyre!(\"missing {tool}\"))?;\n        let compatible = ba\n            .backend()?\n            .list_installed_versions_matching(version)\n            .contains(&actual.version);\n        if compatible {\n            continue;\n        }\n        let requested = ToolRequest::new(\n            ba.into(),","sourceCodeStart":376,"sourceCodeEnd":412,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/daemons/runtime.rs#L376-L412","documentation":"Daemon presets (postgres/redis-style managed daemons) are not implemented on Windows. validate_tools checks every daemon entry with a tool pin and, when compiled for/running on Windows, unconditionally bails with this message rather than attempting an unsupported workflow. There is no configuration that enables it on this platform yet.","triggerScenarios":"Using any mise.toml [daemons] preset entry on a Windows machine — validate_tools hits `if cfg!(windows)` and bails before any version validation.","commonSituations":"Running `mise daemons start` (or any command that prepares/validates daemon sets) on Windows, or sharing a mise.toml with daemon presets between Unix teammates and a Windows machine.","solutions":["Run daemon-dependent workflows on WSL or another Unix environment instead of native Windows.","Guard the daemons config so Windows machines don't load it (e.g. platform-specific config files).","Wait for/track upstream Windows support for daemon presets; do not attempt workarounds via cfg flags.","On Windows CI, skip tasks that require daemon presets."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"# Skip daemon-preset workflows on Windows\nif [[ \"$(uname -s)\" == MINGW* || \"$OS\" == \"Windows_NT\" ]]; then echo \"daemon presets unsupported; use WSL\"; fi","typeGuard":"const isWindows = process.platform === \"win32\";\nif (isWindows) console.warn(\"mise daemon presets are not supported on Windows; use WSL.\");","tryCatchPattern":"try {\n  await mise.daemons.start();\n} catch (e) {\n  if (String(e).includes(\"not supported on Windows\")) {\n    console.error(\"Run under WSL or a Unix environment instead.\");\n  }\n}","preventionTips":["Use WSL for mise daemon preset workflows on Windows machines","Keep daemon presets in config files only loaded on Unix platforms","Skip daemon-dependent tasks in Windows CI"],"tags":["windows","daemon","unsupported-platform"],"backgroundTag":"unsupported-platform","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"}