jdx/mise · error

brew-cask:{}: no supported install artifact found

Error message

brew-cask:{}: no supported install artifact found

What it means

After parsing all artifacts of a cask, cask_artifacts checks that at least one supported install artifact (app, pkg, installer, generic, font, completions, generated completions) was found. A cask whose stanzas yield nothing installable by this implementation bails with this error naming the token, because there is no way to represent or install the package state.

Source

Thrown at src/system/packages/brew/cask/artifacts.rs:71

            continue;
        }
        bail!(
            "brew-cask:{}: unsupported artifact type {}",
            cask.token,
            artifact_type
        );
    }
    if artifacts.apps.is_empty()
        && artifacts.binaries.is_empty()
        && artifacts.command_wrappers.is_empty()
        && artifacts.pkgs.is_empty()
        && artifacts.installers.is_empty()
        && artifacts.generic.is_empty()
        && artifacts.fonts.is_empty()
        && artifacts.completions.is_empty()
        && artifacts.generated_completions.is_empty()
    {
        bail!(
            "brew-cask:{}: no supported install artifact found",
            cask.token
        );
    }
    artifacts.pkg_ids.sort();
    artifacts.pkg_ids.dedup();
    if artifacts.pkgs.is_empty() {
        artifacts.pkg_ids.clear();
    } else if artifacts.pkg_ids.is_empty() {
        bail!(
            "brew-cask:{}: pkg artifacts require pkgutil ids in uninstall metadata",
            cask.token
        );
    }
    Ok(artifacts)
}

pub(super) fn validate_platform_support(cask: &Cask, artifacts: &CaskArtifacts) -> Result<()> {

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Run `brew cat --cask <token>` and confirm the cask actually declares installable artifacts (app/pkg/binary/generic/font, etc.).
  2. Update the cask/tap: brew update (or tap update) so the cask definition is current, then retry.
  3. If the cask is stage-only or otherwise has no artifacts, install it directly with `brew install --cask <token>`; this library cannot manage it.
  4. If you wrote the cask, add a supported artifact stanza (e.g. `app "MyApp.app"`).

Example fix

// before: cask has no installable stanza
cask "mytool" do
  version "1.0"
  url "https://example.com/mytool.zip"
end
// after
cask "mytool" do
  version "1.0"
  url "https://example.com/mytool.zip"
  app "MyTool.app"
end
Defensive patterns

Strategy: validation

Validate before calling

const hasInstallable = (caskJson) =>
  (caskJson.artifacts || []).some(a =>
    ["app", "pkg", "binary", "generic", "font", "completions"].some(k => k in a));
if (!hasInstallable(brewInfoCask(token))) skipInstall(token);

Try / catch

match cask_artifacts(&cask) {
    Err(e) if e.to_string().contains("no supported install artifact") => {
        eprintln!("{} is stage-only/uninstall-only; manage with brew directly", cask.token);
    }
    other => other?,
}

Prevention

When it happens

Trigger: Installing or querying package_state for a cask that declares no supported artifact — e.g. it only has `uninstall` stanzas, only `stage_only: true`, only zap stanzas, or an empty/blank artifact list, or all its artifacts were rejected earlier in the parse loop.

Common situations: Stage-only or auto-update-only casks that ship no artifacts to link; casks where every artifact type is unsupported so they were skipped and the list ended up empty; stale cask metadata from an outdated tap; typo'd custom casks with no artifact stanza at all.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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