jdx/mise · error
unsupported package plugin ownership state version {} in {}
Error message
unsupported package plugin ownership state version {} in {} What it means
Package plugin ownership state is persisted to a file with a schema version. load_state_at rejects any state file whose schema_version differs from the supported STATE_SCHEMA_VERSION, preventing mise from interpreting an on-disk format it doesn't understand.
Source
Thrown at src/system/packages/plugin.rs:146
}
fn load_state_at(path: &std::path::Path, manager: &str) -> Result<PackagePluginState> {
if !path.exists() {
return Ok(PackagePluginState {
schema_version: STATE_SCHEMA_VERSION,
manager: manager.to_string(),
packages: BTreeMap::new(),
});
}
let state: PackagePluginState = serde_json::from_str(&crate::file::read_to_string(path)?)
.wrap_err_with(|| {
format!(
"failed to read package plugin ownership state {}",
crate::file::display_path(path)
)
})?;
if state.schema_version != STATE_SCHEMA_VERSION {
bail!(
"unsupported package plugin ownership state version {} in {}",
state.schema_version,
crate::file::display_path(path)
);
}
if state.manager != manager {
bail!(
"package plugin ownership state {} belongs to manager '{}', not '{manager}'",
crate::file::display_path(path),
state.manager
);
}
Ok(state)
}
fn load_state(&self) -> Result<PackagePluginState> {
Self::load_state_at(&self.state_path(), &self.name)
}View on GitHub (pinned to afd2eddd3a)
Solutions
- Remove the stale ownership state file shown in the error so it is regenerated on the next plugin package operation
- Re-run the plugin's package install/prune action with the current mise version to write fresh state
- Align mise versions across machines instead of copying state files between them
- If this happens after a downgrade, upgrade mise back to the version that wrote the state
Example fix
// before mise plugins packages install myplugin foo # error: unsupported package plugin ownership state version 1 in ~/.local/share/mise/plugins/myplugin/state.json // after rm ~/.local/share/mise/plugins/myplugin/state.json mise plugins packages install myplugin foo # regenerates state with current schema
Defensive patterns
Strategy: fallback
Validate before calling
let state_path = plugin.state_file();
if state_path.exists() {
let v: serde_json::Value = serde_json::from_str(&fs::read_to_string(&state_path)?)?;
if v["schema_version"] != STATE_SCHEMA_VERSION { fs::remove_file(&state_path)?; }
} Type guard
fn state_is_current(s: &OwnershipState) -> bool { s.schema_version == STATE_SCHEMA_VERSION } Try / catch
match plugin.load_state().await {
Err(e) if e.to_string().contains("unsupported package plugin ownership state version") => {
delete_state_file(); plugin.load_state().await
}
other => other,
} Prevention
- Don't hand-edit or share plugin state files between machines with different mise versions
- Upgrade mise (not downgrade) when a schema-version error appears
- Back up and regenerate state after major mise upgrades
When it happens
Trigger: A plugin ownership state file on disk was written by a newer or older mise/plugin version whose STATE_SCHEMA_VERSION differs; the file was hand-edited or copied from another machine with a different version.
Common situations: Upgrading or downgrading mise across a schema change while old state files remain in MISE_DATA_DIR; syncing dotfiles/data dirs between machines with different mise versions; stale state after a plugin update.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- package plugin ownership state {} belongs to manager '{}', n
- unsupported local action result version
- pre_use hook is not implemented
- {tool}'s bin/install exited successfully but installed nothi
- asdf plugin '{plugin_name}' exists but '{tool_name}' is not
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/eee59500e24a0cd0.
Report an issue: GitHub.