chroma-core/chroma · critical

Unsupported architecture on Linux: ${process.arch}

Error message

Unsupported architecture on Linux: ${process.arch}

What it means

Thrown at module load time by the chromadb package's bindings loader when running on Linux with a process.arch that is neither arm64 nor x64. The package ships prebuilt Rust bindings only for linux-arm64-gnu and linux-x64-gnu, so 32-bit or exotic architectures cannot load a binding and the import fails immediately.

Source

Thrown at clients/js/packages/chromadb/src/bindings.ts:20

const require = createRequire(import.meta.url);

let binding: any;

if (process.platform === "darwin") {
  if (process.arch === "arm64") {
    binding = require("chromadb-js-bindings-darwin-arm64");
  } else if (process.arch === "x64") {
    binding = require("chromadb-js-bindings-darwin-x64");
  } else {
    throw new Error(`Unsupported architecture on macOS: ${process.arch}`);
  }
} else if (process.platform === "linux") {
  if (process.arch === "arm64") {
    binding = require("chromadb-js-bindings-linux-arm64-gnu");
  } else if (process.arch === "x64") {
    binding = require("chromadb-js-bindings-linux-x64-gnu");
  } else {
    throw new Error(`Unsupported architecture on Linux: ${process.arch}`);
  }
} else if (process.platform === "win32") {
  if (process.arch === "arm64") {
    binding = require("chromadb-js-bindings-win32-arm64-msvc");
  } else {
    throw new Error(
      `Unsupported Windows architecture: ${process.arch}. Only ARM64 is supported.`,
    );
  }
} else {
  throw new Error(`Unsupported platform: ${process.platform}`);
}

export default binding;

View on GitHub (pinned to aecdd12c8a)

Solutions

  1. Run on a 64-bit x64 or arm64 Linux environment (e.g. upgrade Raspberry Pi OS to the 64-bit image).
  2. Switch to the pure-JS client (chromadb-core or chromadb-cloud packages) which needs no native binding.
  3. If you must stay on this arch, talk to a remote Chroma server over HTTP with the JS client instead of local native embeddings.
Defensive patterns

Strategy: validation

Validate before calling

if (process.platform === "linux" && !(process.arch === "arm64" || process.arch === "x64")) {
  throw new Error(`No chromadb native binding for linux/${process.arch}; use the pure-JS client`);
}
const { ChromaClient } = await import("chromadb");

Prevention

When it happens

Trigger: import "chromadb" on armv7l (32-bit ARM, e.g. Raspberry Pi OS 32-bit), i686, s390x, or ppc64le Linux; Alpine musl setups that report gnu-incompatible toolchains are adjacent but usually fail with a different loader error; QEMU-emulated containers reporting unusual arch.

Common situations: Deploying to Raspberry Pi or other 32-bit ARM boards; Docker images built with unusual base architectures; corporate mainframe/PPC environments; WSL setups with mismatched binaries.

Related errors


AI-assisted analysis of chroma-core/chroma@aecdd12c8a (2026-08-16). Data as JSON: /api/errors/c6ac6446659b9d84. Report an issue: GitHub.