# Node "Cannot find module 'node:crypto'" - Fix node: Builtins on Old Node in CI

> Fix "Cannot find module 'node:crypto'" (or other node: builtins) in CI - code uses the node:-prefixed import scheme on a Node version too old to support it. Upgrade Node.

Source: https://latchkey.dev/learn/node-js/node-cannot-find-module-node-crypto  
Updated: 2026-06-25

The `node:` import prefix (e.g. `node:crypto`, `node:fs`) is only recognized by newer Node versions. On an older runner Node, the resolver treats `node:crypto` as a missing package and throws.

## Diagnose it: what is different about the runner?

A build that passes locally and fails on a runner differs in a small number of predictable ways. Check those before changing build configuration, because the build config is usually not the thing that changed.

```.github/workflows/ci.yml
- run: |
    node --version && npm --version
    echo "NODE_ENV=$NODE_ENV  CI=$CI"
    nproc && free -h && df -h /
    ls -la node_modules/.bin | head
```

> `CI=true` is set on every runner and changes behaviour in several toolchains, most commonly by promoting warnings to errors. Reproduce locally with `CI=true npm run build` before assuming the runner is broken.

## The three that account for most of them

- **Case sensitivity.** Linux runners are case sensitive, macOS is not. An import with the wrong case resolves locally and fails in CI.
- **Out of memory.** Exit code 137 is a SIGKILL from the kernel, not a build error. Raise `--max-old-space-size` or use a larger runner.
- **devDependencies pruned.** `NODE_ENV=production` makes `npm ci` skip devDependencies, so the build tool itself goes missing. Set it after install, not before.

## FAQ

### What causes Node "Cannot find module 'node:crypto'"?

There are 2 common causes: runner node is too old for the node: scheme and a dependency upgraded to node: imports. The node: builtin prefix is supported from Node 14.18/16+.

### How do I fix Node "Cannot find module 'node:crypto'"?

There are 2 fixes depending on which cause you have: upgrade ci node to a supported version and align node with your dependencies. Work through them in order, since the first is the most common.

### What does Node "Cannot find module 'node:crypto'" actually mean?

Code or a dependency importing node:crypto (or node:fs, node:path, …) fails with Cannot find module 'node:crypto' in CI, while it works locally on a newer Node.

### How do I stop Node "Cannot find module 'node:crypto'" happening again?

Run a current Node LTS in CI. The prevention section lists 3 changes that keep it from recurring.

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
