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

  1. Remove the stale ownership state file shown in the error so it is regenerated on the next plugin package operation
  2. Re-run the plugin's package install/prune action with the current mise version to write fresh state
  3. Align mise versions across machines instead of copying state files between them
  4. 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

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


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