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
- Use an artifact in a supported compression: `.tar.gz`, `.tar.xz`, `.tar.zst`, `.tar.bz2`, bare `.gz/.xz/.zst/.bz2`, or `.zip`
- Pick a differently-compressed release asset if the project publishes one
- 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
- Publish/consume release assets in tar.gz/tar.xz/tar.zst/tar.bz2 or zip
- Check the asset list of a tool before writing a custom backend for it
- Keep an extraction-format allowlist in your tooling config
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
- unsupported compressed file format: {}
- extract_archive does not support compressed single-file form
- content-level SLSA verification only supports archive format
- {option}: '{name}' must be a plain file name (no path separa
- {option}: '{path}' must be a safe relative path (no absolute
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/a90866c084e27d3c.
Report an issue: GitHub.