# Node.js ERR_INVALID_ARG_TYPE - Fix "argument must be of type string"

> Fix Node.js ERR_INVALID_ARG_TYPE "The \"path\" argument must be of type string. Received undefined" in CI - a core API handed undefined instead of a value.

Source: https://latchkey.dev/learn/node-js/node-err-invalid-arg-type  
Updated: 2026-06-25

ERR_INVALID_ARG_TYPE is Node’s core APIs validating their inputs. It almost always means a value that should be a string/Buffer arrived as `undefined` - a missing env var, an unresolved path, or a misread config.

## 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.js ERR_INVALID_ARG_TYPE?

There are 2 common causes: a required env var is undefined in ci and an async/optional value used before it resolves. Code passes process.env.SOMETHING straight into a path/fs call.

### How do I fix Node.js ERR_INVALID_ARG_TYPE?

There are 2 fixes depending on which cause you have: validate inputs and surface the real cause and set the missing ci value. Work through them in order, since the first is the most common.

### What does Node.js ERR_INVALID_ARG_TYPE actually mean?

A script crashes with TypeError [ERR_INVALID_ARG_TYPE], typically "The \"path\" argument must be of type string.

### How do I stop Node.js ERR_INVALID_ARG_TYPE happening again?

Validate required env vars at startup with clear errors. 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
