BoundaryML/baml · error · FetchError

archive missing expected binary {name}

Error message

archive missing expected binary {name}

What it means

FetchError::BinaryNotInArchive is thrown by baml_release when a downloaded release archive is extracted but does not contain the expected binary file name for the target. The archive opened fine (checksum passed) but its contents are missing the file the installer needs, indicating a bad or mis-packaged release artifact.

Source

Thrown at baml_language/crates/baml_release/src/lib.rs:97

    Network { url: String, source: reqwest::Error },
    #[error("HTTP {status} fetching {url}")]
    HttpStatus {
        url: String,
        status: reqwest::StatusCode,
    },
    #[error("manifest 404 for version {version} (not released yet?)")]
    ManifestNotFound { version: String },
    #[error("manifest schema {got} not supported (max {max}); run `baml self-update`")]
    ManifestSchemaTooNew { got: u32, max: u32 },
    #[error("target {target} not built for version {version}")]
    TargetNotInManifest { target: String, version: String },
    #[error("sha256 mismatch for {url}: expected {expected}, got {got}")]
    ChecksumMismatch {
        url: String,
        expected: String,
        got: String,
    },
    #[error("archive missing expected binary {name}")]
    BinaryNotInArchive { name: String },
    #[error("archive contains unsafe path {path}")]
    UnsafeArchivePath { path: String },
    #[error("disk error: {0}")]
    Io(#[from] std::io::Error),
    #[error("zip archive error: {0}")]
    Zip(#[from] zip::result::ZipError),
}

#[derive(Debug, Clone)]
pub struct Fetcher {
    pub spec: ReleaseSpec,
    pub product: Product,
    pub manifest_base_url: String,
    pub release_repo: String,
    artifact: Option<Artifact>,
}

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Retry with a different (preferably latest) version — the artifact itself is likely mis-packaged
  2. Verify the archive manually (unzip -l) to see what it actually contains
  3. Report the broken artifact to the BAML maintainers
  4. If pinning, switch to the previous known-good version

Example fix

# before
$ baml install --version 0.199.0
archive missing expected binary baml
# after
$ baml install --version 0.200.0
Defensive patterns

Strategy: fallback

Validate before calling

// inspect archive contents before extraction
let names: Vec<String> = zip.file_names().map(String::from).collect();
if !names.iter().any(|n| n.ends_with(expected_binary)) {
    eprintln!("archive lacks {expected_binary}; artifact is mis-packaged");
}

Type guard

fn is_binary_missing(e: &FetchError) -> bool {
    matches!(e, FetchError::BinaryNotInArchive { .. })
}

Try / catch

match install(v) {
    Err(FetchError::BinaryNotInArchive { name }) => {
        eprintln!("{name} missing from artifact for {v}; falling back");
        install(prev_stable_version())
    }
    other => other,
}

Prevention

When it happens

Trigger: Extracting a downloaded release archive and finding no entry named like `baml`/`baml.exe` — happens when the release pipeline published a wrongly packaged zip, or the manifest expects a name the archive doesn't use.

Common situations: A broken release build that uploaded a stub or wrong zip, an interrupted release publish that shipped partial packaging, or a target whose artifact naming changed between versions.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12). Data as JSON: /api/errors/4d41154f91dd4629. Report an issue: GitHub.