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
- Run on a 64-bit x64 or arm64 Linux environment (e.g. upgrade Raspberry Pi OS to the 64-bit image).
- Switch to the pure-JS client (chromadb-core or chromadb-cloud packages) which needs no native binding.
- 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
- Deploy on 64-bit x64/arm64 Linux images (e.g. 64-bit Raspberry Pi OS).
- Add a startup platform assertion in apps that pull in native bindings transitively.
- Prefer the HTTP (pure-JS) client against a remote Chroma server on constrained hardware.
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
- Unsupported architecture on macOS: ${process.arch}
- Unsupported Windows architecture: ${process.arch}. Only ARM6
- Unsupported platform: ${process.platform}
- Unsupported platform: ${platform}
AI-assisted analysis of chroma-core/chroma@aecdd12c8a (2026-08-16).
Data as JSON: /api/errors/c6ac6446659b9d84.
Report an issue: GitHub.