BoundaryML/baml · error · FetchError

network error fetching {url}: {source}

Error message

network error fetching {url}: {source}

What it means

FetchError::Network is thrown by baml_release when an HTTP request to the release server (e.g. downloading a release manifest or binary) fails at the transport level. The reqwest::Error source is embedded, and the failing URL is included so the developer can see which endpoint was unreachable. This indicates connectivity/DNS/TLS problems rather than an HTTP error response.

Source

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

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Product {
    Toolchain,
    Wrapper,
}

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,
    },

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Read the embedded reqwest source for the root cause (DNS vs refused vs timeout)
  2. Check basic connectivity: curl the URL from the error message
  3. Configure proxy environment variables (HTTPS_PROXY/HTTP_PROXY) if behind a corporate proxy
  4. Retry after confirming the network is up; transient outages are common
  5. Check status.baml.com or the release host's status page

Example fix

# before
$ baml self-update
network error fetching https://releases.baml.com/manifest.json: dns error
# after
$ export HTTPS_PROXY=http://proxy.corp.example:8080
$ baml self-update
Defensive patterns

Strategy: retry

Validate before calling

// pre-check connectivity
let online = reqwest::blocking::get("https://releases.baml.com").is_ok();
if !online { eprintln!("offline: skipping update check"); }

Type guard

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

Try / catch

match client.fetch_manifest(url) {
    Err(FetchError::Network { url, source }) => {
        warn!("network error fetching {url}: {source}; retrying with backoff");
        retry_with_backoff(3)?
    }
    other => other,
}

Prevention

When it happens

Trigger: Calling any baml_release fetch/self-update API when the network is down, DNS resolution fails, the TLS handshake fails, or the connection is refused/reset/times out at the reqwest layer.

Common situations: Running `baml self-update` behind a corporate proxy that blocks the release host, being offline, a firewall blocking outbound HTTPS, DNS misconfiguration, or the release CDN being temporarily unreachable.

Related errors


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