jdx/mise · error
packslip artifact must declare extensions.mise.plugin = vfox
Error message
packslip artifact must declare extensions.mise.plugin = vfox
What it means
`validate_artifact` in src/plugins/packslip.rs enforces that a packslip artifact used as a vfox plugin declares `extensions.mise.plugin = "vfox"` in its release manifest. This marks the artifact as a plugin payload so mise treats it as vfox plugin code rather than an ordinary binary release. A manifest missing or mis-typing that key fails validation.
Source
Thrown at src/plugins/packslip.rs:177
}
if let Err(error) = file::rename(payload, destination) {
if existed {
file::rename(backup, destination).wrap_err("restoring previous plugin")?;
}
return Err(error);
}
if let Err(error) = commit() {
file::rename(destination, payload)?;
if existed {
file::rename(backup, destination).wrap_err("restoring previous plugin")?;
}
return Err(error);
}
Ok(())
}
pub(crate) fn validate_artifact(artifact: &packslip::model::Artifact) -> Result<()> {
ensure!(
artifact
.extensions
.get("mise")
.and_then(|v| v.get("plugin"))
.and_then(|v| v.as_str())
== Some("vfox"),
"packslip artifact must declare extensions.mise.plugin = vfox"
);
ensure!(
artifact.bin.is_empty(),
"vfox plugin artifacts must not declare executables"
);
ensure!(
artifact.os.is_none() && artifact.arch.is_none() && artifact.libc.is_none(),
"vfox plugin artifact must be portable"
);
ensure!(
artifact.requires.is_none(),View on GitHub (pinned to afd2eddd3a)
Solutions
- Add `extensions.mise.plugin = "vfox"` to the artifact's manifest and republish the release manifest.
- Ensure the value is exactly the string "vfox" (not null, number, or another name).
- If the artifact is actually a regular binary tool, install it via the normal packslip tool source rather than the plugin path.
Example fix
// before (manifest) [artifacts.plugin] format = "tar.gz" // after (manifest) [artifacts.plugin.extensions.mise] plugin = "vfox" format = "tar.gz"
Defensive patterns
Strategy: validation
Validate before calling
// pre-check manifest before publishing
jq -e '.artifacts[] | select(.extensions.mise.plugin == "vfox")' manifest.json \
|| { echo "missing extensions.mise.plugin = vfox"; exit 1; } Prevention
- Use a manifest template that always emits [artifacts.*.extensions.mise] plugin = "vfox" for plugin releases.
- Validate manifests in CI with a JSON-schema/TOML check before cutting a release.
- Keep plugin and binary tool manifests in separate templates.
When it happens
Trigger: Publishing/installing via `plugin_artifact_contract` where the artifact's `extensions` map lacks a `mise` object, lacks a `plugin` key, or has a non-string/`non-"vfox"` value — e.g. a manifest generated for a regular binary tool being consumed as a plugin.
Common situations: Plugin author forgot to add the extensions block to the release manifest; a template generated plain tool manifests; the key was renamed or quoted with a different value (e.g. "vfox-plugin").
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- vfox plugin artifacts must not declare executables
- vfox plugin artifacts must not declare host requirements
- the packslip names an executable {:?}, which is not a plain
- an exec entry with no command
- vfox plugin artifact must be portable
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/cd810624e69b9f55.
Report an issue: GitHub.