jdx/mise · error

daemon presets are not supported on Windows yet

Error message

daemon presets are not supported on Windows yet

What it means

Daemon preset initialization (creating data directories, running initdb, etc.) is not yet implemented on Windows; initialize bails out early with this message when compiled for/running on Windows, after the experimental and safe-mode checks.

Solutions

  1. Run daemon presets on Linux/macOS (e.g. WSL) instead of native Windows
  2. Wait for Windows support in a future mise release
  3. Disable the daemon preset config on Windows via os-specific config

Example fix

null
Defensive patterns

Strategy: fallback

Validate before calling

if (process.platform === 'win32') console.log('daemon presets unsupported on Windows');

Prevention

When it happens

Trigger: Calling initialize (e.g. via `mise daemon` preset setup) on a Windows platform, regardless of configuration correctness.

Common situations: Windows developer running the same mise.toml daemon presets as Linux teammates; CI on Windows runners hitting a config that works on Linux.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


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

Appendix: source

Thrown at src/daemons/presets.rs:180

        "postgres" => output.trim().strip_prefix("postgres (PostgreSQL) "),
        "redis" => output
            .split_whitespace()
            .find_map(|part| part.strip_prefix("v=")),
        _ => None,
    }
    .ok_or_else(|| eyre::eyre!("unrecognized {preset} version output: {output}"))?;
    let major = version.split('.').next().unwrap_or_default();
    if major.is_empty() || !major.chars().all(|c| c.is_ascii_digit()) {
        bail!("unrecognized {preset} version: {version}");
    }
    Ok(major.into())
}

pub(crate) fn initialize(preset_name: &str, data: &Path, database: &str) -> Result<()> {
    crate::config::Settings::get().ensure_experimental("daemon presets")?;
    crate::config::Settings::ensure_not_safe("initializing daemon data")?;
    if cfg!(windows) {
        bail!("daemon presets are not supported on Windows yet");
    }
    let preset = preset(preset_name)?;
    let parent = data
        .parent()
        .ok_or_else(|| eyre::eyre!("daemon data must have a parent directory"))?;
    std::fs::create_dir_all(parent)?;
    let _lock = crate::lock_file::LockFile::new(data).lock()?;
    let output = Command::new(&preset.binary).arg("--version").output()?;
    if !output.status.success() {
        bail!("unable to determine {} version", preset.binary);
    }
    let major = major(preset_name, &String::from_utf8(output.stdout)?)?;
    let marker = format!("{preset_name}:{major}\n");
    if data.exists() {
        let existing = std::fs::read_to_string(data.join(".mise-daemon-version"))
            .wrap_err("daemon data was not initialized completely; inspect it and migrate or reset it explicitly")?;
        if existing != marker {
            bail!(

View on GitHub (pinned to 533346cc37)