jdx/mise · error
incompatible data in (stored , current ); migrate or reset…
Error message
incompatible {preset_name} data in {} (stored {}, current {}); migrate or reset it explicitly What it means
If the daemon data directory already exists, initialize compares its .mise-daemon-version marker (format 'preset:major') with the marker computed from the currently resolved binary. A mismatch means the existing data was created by an incompatible major/preset and mise refuses to proceed rather than corrupting it.
Solutions
- Move or remove the old data directory and re-initialize fresh (dump/restore data first if needed)
- Pin the tool back to the major matching the stored marker
- Manually migrate the data (pg_dump/pg_upgrade) then reset the directory
Example fix
# before (marker stored postgres:15, binary now 16) postgres = "16" # after: either pin back postgres = "15" # or start fresh after dumping data rm -rf ~/.local/share/mise/daemons/postgres/data
Defensive patterns
Strategy: validation
Validate before calling
cat ~/.local/share/mise/daemons/postgres/data/.mise-daemon-version 2>/dev/null # compare with pinned major in mise.toml
Prevention
- When bumping a tool major, plan a data migration/reset in the same change
- Dump data before changing daemon data directories
- Never hand-edit .mise-daemon-version
When it happens
Trigger: Pointing a daemon at a data directory previously initialized with a different preset name or a different major version (e.g. postgres 15 data now used with postgres 16), during initialize.
Common situations: Upgrading the pinned postgres major in mise.toml while reusing the old data dir; renaming the preset; stale data dir left after a tool version change.
Understand the failure class
Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.
Related errors
- initdb and postgres have incompatible versions
- Postgres data version does not match its initialization…
- daemon requires @ ( ), but [tools] selects
- failed to create database
- invalid database name
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/25f14457fb816e8d.
Report an issue: GitHub.
Appendix: source
Thrown at src/daemons/presets.rs:198
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!(
"incompatible {preset_name} data in {} (stored {}, current {}); migrate or reset it explicitly",
data.display(),
existing.trim(),
marker.trim()
);
}
if preset_name == "postgres"
&& std::fs::read_to_string(data.join("PG_VERSION"))
.wrap_err("daemon data was not initialized completely; missing PG_VERSION")?
.trim()
!= major
{
bail!("Postgres data version does not match its initialization marker");
}
return Ok(());
}
let staging = tempfile::Builder::new()
.prefix(".mise-init-")View on GitHub (pinned to 533346cc37)