Skip to content

Unable to load runtime, possible packaging issue with @img/sharp-wasm32 (FreeBSD) #4538

@foxxyz

Description

@foxxyz

Possible install-time or require-time problem

  • I have read and understood all of the documentation relating to installation.
  • I have searched for known bugs relating to this problem in my choice of package manager.
  • I am using the latest version of sharp as reported by npm view sharp dist-tags.latest.
  • I am using Node.js with a version that satisfies >=20.9.0
  • I am using npm >= 10.1.0 with --include=optional

What is the complete error message, including the full stack trace?

file:///home/protected/server/node_modules/sharp/dist/sharp.mjs:161
  throw new Error(help.join("\n"));
        ^

Error: Could not load the "sharp" module using the freebsd-x64 runtime
Possible solutions:
- Ensure optional dependencies can be installed:
    npm install --include=optional sharp
- Ensure your package manager supports multi-platform installation:
    See https://sharp.pixelplumbing.com/install#cross-platform
- Add platform-specific dependencies:
    npm install --os=freebsd --cpu=x64 sharp
- Consult the installation documentation:
    See https://sharp.pixelplumbing.com/install
    at file:///home/protected/server/node_modules/sharp/dist/sharp.mjs:161:9
    at ModuleJob.run (node:internal/modules/esm/module_job:430:25)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:661:26)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:101:5)

Node.js v24.13.1

Trying all the solutions mentioned didn't make a difference. So I dug into what the actual error message was and
after modifying sharp.mjs to show me the actual error, I could see it was a problem with the @img/sharp-wasm32 package:

Error: Cannot find module '/home/protected/server/node_modules/@img/sharp-wasm32/index.cjs'
    at createEsmNotFoundErr (node:internal/modules/cjs/loader:1485:15)
    at finalizeEsmResolution (node:internal/modules/cjs/loader:1474:9)
    at resolveExports (node:internal/modules/cjs/loader:679:14)
    at Module._findPath (node:internal/modules/cjs/loader:746:31)
    at Module._resolveFilename (node:internal/modules/cjs/loader:1433:27)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1059:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1064:22)
    at Module._load (node:internal/modules/cjs/loader:1234:25)
    at TracingChannel.traceSync (node:diagnostics_channel:328:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:245:24) {
  code: 'MODULE_NOT_FOUND',
  path: '/home/protected/server/node_modules/@img/sharp-wasm32'
}

I looked in node_modules/@img/sharp-wasm32/ and there indeed was no index.cjs. I gathered it was likely referring to the files in lib/ so I ran the following commands:

$ cp node_modules/\@img/sharp-wasm32/lib/sharp-wasm32-0.35.0.node.js node_modules/\@img/sharp-wasm32/index.cjs
$ cp node_modules/\@img/sharp-wasm32/lib/sharp-wasm32-0.35.0.node.wasm node_modules/\@img/sharp-wasm32/

After which I was able to get sharp running correctly.

Is there maybe an incorrect build/packaging step for @img/sharp-wasm32?

What is the complete output of running npm install --verbose --foreground-scripts sharp in an empty directory?

Details
$ npm install --verbose --foreground-scripts sharp
npm verbose cli /usr/local/bin/node /usr/local/bin/npm
npm info using npm@11.10.0
npm info using node@v24.13.1
npm verbose title npm install sharp
npm verbose argv "install" "--loglevel" "verbose" "--foreground-scripts" "sharp"
npm verbose logfile logs-max:10 dir:/home/private/.npm/_logs/2026-06-11T05_21_40_311Z-
npm verbose logfile /home/private/.npm/_logs/2026-06-11T05_21_40_311Z-debug-0.log
npm warn Unknown global config "python". This will stop working in the next major version of npm.
npm http fetch GET 200 https://registry.npmjs.org/sharp 140ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/detect-libc 287ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/semver 309ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fcolour 574ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-darwin-arm64 536ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-freebsd-wasm32 372ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-darwin-x64 641ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-darwin-x64 68ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linux-arm 71ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linux-ppc64 144ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linux-arm64 171ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linux-riscv64 262ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-darwin-arm64 640ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linux-s390x 620ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linuxmusl-arm64 362ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linux-x64 380ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linux-arm 71ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linux-arm64 79ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-libvips-linuxmusl-x64 164ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linux-ppc64 88ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linux-x64 58ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linux-riscv64 147ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linux-s390x 96ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linuxmusl-x64 541ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-linuxmusl-arm64 564ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-webcontainers-wasm32 579ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-win32-arm64 62ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-win32-ia32 63ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-win32-x64 163ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-wasm32 62ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@img%2fsharp-wasm32 65ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/@emnapi%2fruntime 65ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/tslib 60ms (cache revalidated)
npm http cache tslib@https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz 0ms (cache hit)
npm http cache semver@https://registry.npmjs.org/semver/-/semver-7.8.4.tgz 0ms (cache hit)
npm http cache @img/sharp-wasm32@https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.0.tgz 0ms (cache hit)
npm http cache @emnapi/runtime@https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz 0ms (cache hit)
npm http cache detect-libc@https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz 0ms (cache hit)
npm http cache @img/colour@https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz 0ms (cache hit)
npm http cache @img/sharp-freebsd-wasm32@https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.0.tgz 0ms (cache hit)
npm http cache sharp@https://registry.npmjs.org/sharp/-/sharp-0.35.0.tgz 0ms (cache hit)

added 8 packages in 9s

3 packages are looking for funding
  run `npm fund` for details
npm verbose cwd /home/protected/test
npm verbose os FreeBSD 14.4-STABLE
npm verbose node v24.13.1
npm verbose npm  v11.10.0
npm verbose exit 0
npm info ok

What is the output of running npx envinfo --binaries --system --npmPackages=sharp --npmGlobalPackages=sharp?

$ npx envinfo --binaries --system --npmPackages=sharp --npmGlobalPackages=sharp
npm warn Unknown global config "python". This will stop working in the next major version of npm.
Need to install the following packages:
envinfo@7.21.0
Ok to proceed? (y) y

  System:
    OS: freebsd
    CPU: (4) x64 AMD EPYC Processor (with IBPB)
    Memory: 2.72 GB / 7.96 GB
  Binaries:
    Node: 24.13.1 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 11.10.0 - /usr/local/bin/npm
    Deno: 2.6.6 - /usr/local/bin/deno
  npmPackages:
    sharp: ^0.35.0 => 0.35.0

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions