jdx/mise · error · eyre::Report

{format} format not supported

Error message

{format} format not supported

What it means

`file::decompress_file` (src/file.rs:1770) handles single-file (non-container) decompression for gz, xz, zst, and bz2. The `Br | Lz4 | Sz` arms exist because those variants exist in `ExtractionFormat`, but no single-file decoder is wired in for them, so they bail explicitly with the format name instead of mis-extracting.

Source

Thrown at src/file.rs:1783

        }
        _ => f(),
    }
}

pub fn decompress_file(input: &Path, dest: &Path, format: ExtractionFormat) -> Result<()> {
    if let Some(parent) = dest.parent()
        && !parent.as_os_str().is_empty()
    {
        create_dir_all(parent)?;
    }

    run_blocking(|| match format {
        ExtractionFormat::Gz => un_gz(input, dest),
        ExtractionFormat::Xz => un_xz(input, dest),
        ExtractionFormat::Zst => un_zst(input, dest),
        ExtractionFormat::Bz2 => un_bz2(input, dest),
        ExtractionFormat::Br | ExtractionFormat::Lz4 | ExtractionFormat::Sz => {
            bail!("{format} format not supported")
        }
        _ => bail!("unsupported compressed file format: {}", format),
    })
}

#[derive(Debug, Clone, Copy, PartialEq, strum::EnumString, strum::Display)]
pub enum ExtractionFormat {
    #[strum(to_string = "tar.gz", serialize = "tgz")]
    TarGz,
    #[strum(serialize = "gz")]
    Gz,
    #[strum(to_string = "tar.xz", serialize = "txz")]
    TarXz,
    #[strum(serialize = "xz")]
    Xz,
    #[strum(to_string = "tar.bz2", serialize = "tbz2", serialize = "tbz")]
    TarBz2,
    #[strum(serialize = "bz2")]

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Use an artifact in a supported compression: `.tar.gz`, `.tar.xz`, `.tar.zst`, `.tar.bz2`, bare `.gz/.xz/.zst/.bz2`, or `.zip`
  2. Pick a differently-compressed release asset if the project publishes one
  3. Install such tools outside mise's extraction (download and `brotli -d`/`lz4 -d` yourself) and reference the binary via a custom backend that skips mise's archive handling

Example fix

# before (custom tool def)
url = "https://example.com/darwin/tool.lz4"
# after
url = "https://example.com/darwin/tool.tar.gz"
Defensive patterns

Strategy: validation

Validate before calling

// check the format before calling decompress_file
use file::ExtractionFormat;
fn single_file_supported(f: ExtractionFormat) -> bool {
    matches!(f, ExtractionFormat::Gz | ExtractionFormat::Xz | ExtractionFormat::Zst | ExtractionFormat::Bz2)
}

Type guard

fn is_supported_single_file(name: &str) -> bool {
    [".gz", ".xz", ".zst", ".bz2"].iter().any(|e| name.ends_with(e))
        && ![".tar."].iter().any(|e| name.contains(e))
}

Try / catch

Match the `{format} format not supported` bail; on Br/Lz4/Sz, fall back to shelling out to `brotli`/`lz4`/`snzip` (or pick another asset) instead of failing the install.

Prevention

When it happens

Trigger: A tool asset whose detected extraction format is `.br`, `.lz4`, or `.sz` reaching the single-file decompression path — e.g. a custom backend or tool definition pointing at a raw brotli/lz4/snappy asset rather than a `tar.*` container or supported bare compression.

Common situations: Custom tool definitions referencing upstream releases shipped as `.tar.br`/`.lz4`; assuming mise supports every format the enum names; registry/aqua-style assets published in less common compressions.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/a90866c084e27d3c. Report an issue: GitHub.