BoundaryML/baml · error · FetchError

manifest 404 for version {version} (not released yet?)

Error message

manifest 404 for version {version} (not released yet?)

What it means

FetchError::ManifestNotFound is thrown by baml_release when the release manifest for the requested version returns HTTP 404. The '(not released yet?)' hint signals the most common cause: the requested version does not exist on the release server, typically because it has not been published yet or the version string is wrong.

Source

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

impl Product {
    pub fn tag_prefix(self) -> &'static str {
        match self {
            Product::Toolchain => "baml-language",
            Product::Wrapper => "baml-wrapper",
        }
    }
}

#[derive(Debug, thiserror::Error)]
pub enum FetchError {
    #[error("network error fetching {url}: {source}")]
    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}")]

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Verify the requested version exists on the release server or GitHub releases page
  2. Check for typos in the version string (compare against published tags)
  3. Use the latest released version instead (omit version or use 'latest')
  4. Wait and retry if the release was announced but the publish pipeline hasn't finished
  5. Pin an earlier version that is known to be published

Example fix

# before
$ baml self-update --version 0.205.0
manifest 404 for version 0.205.0 (not released yet?)
# after
$ baml self-update --version 0.204.0   # or omit --version for latest
Defensive patterns

Strategy: fallback

Validate before calling

// resolve latest published version before fetching its manifest
let versions = list_published_versions(); // from release index
if !versions.contains(requested_version) {
    eprintln!("{requested_version} not published; using {}", versions[0]);
}

Type guard

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

Try / catch

match install_version(v) {
    Err(FetchError::ManifestNotFound { version }) => {
        eprintln!("{version} not released yet; falling back to latest");
        install_latest()
    }
    other => other,
}

Prevention

When it happens

Trigger: Calling a baml_release fetch/self-update API with a version string whose manifest URL returns 404 — e.g. requesting version '1.2.3' before it was released, a typo'd version, or a deleted/withdrawn release.

Common situations: Pinning a version from a changelog before the release pipeline published it, upgrading to a version tag that only exists in git but not in releases, running self-update with a typo like '0.999.0'.

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/7bfc34802ff2e0cc. Report an issue: GitHub.