jdx/mise · error

vfox plugin artifacts currently require tar.gz format

Error message

vfox plugin artifacts currently require tar.gz format

What it means

`validate_artifact` requires vfox plugin artifacts to be packaged as `tar.gz` (accepting the aliases "tar.gz" and "tgz"). Any other or missing `format` value in the manifest fails this check, since mise extracts the plugin payload expecting a gzipped tarball.

Source

Thrown at src/plugins/packslip.rs:198

            .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(),
        "vfox plugin artifacts must not declare host requirements"
    );
    ensure!(
        matches!(artifact.format.as_deref(), Some("tar.gz" | "tgz")),
        "vfox plugin artifacts currently require tar.gz format"
    );
    Ok(())
}

/// Reject links and special files before extraction, including links whose
/// targets might otherwise be resolved while unpacking a later archive entry.
pub(crate) fn validate_archive(path: &Path) -> Result<()> {
    let reader = flate2::read::GzDecoder::new(std::fs::File::open(path)?);
    let mut archive = jdx_tar::Archive::new(reader);
    for entry in archive.entries()? {
        let entry = entry?;
        ensure!(
            matches!(
                entry.entry_type(),
                jdx_tar::EntryType::File | jdx_tar::EntryType::Directory
            ),

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Package the plugin as a gzipped tarball and set `format = "tar.gz"` (or "tgz") in the manifest, then republish.
  2. Change release CI to use `tar -czf` instead of zip/xz/zst packaging.
  3. Add the missing `format` key if it was simply omitted.

Example fix

// before (manifest)
[artifacts.plugin]
format = "zip"

// after (manifest)
[artifacts.plugin]
format = "tar.gz"
Defensive patterns

Strategy: validation

Validate before calling

jq -e '.artifacts[] | select(.extensions.mise.plugin == "vfox" and (.format == "tar.gz" or .format == "tgz"))' manifest.json \
  || { echo "vfox plugin artifact must be tar.gz"; exit 1; }

Prevention

When it happens

Trigger: A packslip plugin artifact manifest sets `format` to something else ("zip", "tar.xz", "tar.zst", null/absent) and the artifact goes through `plugin_artifact_contract` validation.

Common situations: Release automation zips the plugin directory; author switched compression to reduce size (xz/zst); format field left out of a hand-written manifest.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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