tinyhumansai/openhuman · error

no prebuilt Node.js distribution for host {os}/{arch} — set

Error message

no prebuilt Node.js distribution for host {os}/{arch} — set node.enabled=false or install node manually

What it means

The Node.js distribution downloader has no prebuilt archive mapping for the host's OS/architecture combination (`host_archive_suffix` matched no arm in its table). This fires on platforms nodejs.org does not ship tarballs for — e.g. musl-based or BSD hosts — so managed Node provisioning is impossible on this machine. The message offers the two supported escapes: disable managed Node, or bring your own Node install.

Source

Thrown at src/openhuman/runtime/node/downloader.rs:99

    } else {
        format!("v{trimmed}")
    }
}

/// Return `(archive_suffix, is_zip)` for the current host. The suffix omits
/// the `node-vX.Y.Z-` prefix because callers always interpolate the version.
fn host_archive_suffix() -> Result<(&'static str, bool)> {
    let os = std::env::consts::OS;
    let arch = std::env::consts::ARCH;
    match (os, arch) {
        ("macos", "aarch64") => Ok(("darwin-arm64.tar.xz", false)),
        ("macos", "x86_64") => Ok(("darwin-x64.tar.xz", false)),
        ("linux", "aarch64") => Ok(("linux-arm64.tar.xz", false)),
        ("linux", "x86_64") => Ok(("linux-x64.tar.xz", false)),
        ("linux", "arm") | ("linux", "armv7") => Ok(("linux-armv7l.tar.xz", false)),
        ("windows", "aarch64") => Ok(("win-arm64.zip", true)),
        ("windows", "x86_64") => Ok(("win-x64.zip", true)),
        _ => Err(anyhow!(
            "no prebuilt Node.js distribution for host {os}/{arch} — set node.enabled=false or install node manually"
        )),
    }
}

/// Fetch `SHASUMS256.txt` for the release and return a
/// `archive_name -> sha256_hex` map. The hex digest is lowercase.
pub async fn fetch_shasums(client: &Client, version: &str) -> Result<HashMap<String, String>> {
    let version = normalize_version(version);
    let url = format!("{NODEJS_DIST_BASE}/{version}/SHASUMS256.txt");
    tracing::debug!(url = %url, "[node_runtime::downloader] fetching SHASUMS256.txt");

    let body = client
        .get(&url)
        .send()
        .await
        .with_context(|| format!("GET {url}"))?
        .error_for_status()

View on GitHub (pinned to 7491200858)

Solutions

  1. Install Node.js manually (nvm/system package) — the runtime detects and reuses an existing install
  2. Disable managed provisioning in config: set `node.enabled = false`
  3. Do not wait for a fix: the mapping table only covers platforms with upstream prebuilt tarballs
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/openhuman/runtime/node/downloader.rs:99 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/82fbf6a85aa7050c. Report an issue: GitHub.