The Engine “Node” is Incompatible… What Now?

Alexandria Lalli
3 min readDec 2, 2020

You have create-react-app fired up and it’s doing its thing. Packages resolved and fetched and it looks like smooth sailing from here when all the sudden…

error postcss@8.1.9: The engine “node” is incompatible with this module. Expected version “^10 || ^12 || >=14”. Got “13.14.0”
error Found incompatible module.

Your node version may not be exactly 13.14.0, but the premise is the same: “Sorry, we can’t do this because your package is too outdated. Figure it out or suffer the consequences, ya loser.”

No biggies, you’re no loser, you know how to update your node package (and perhaps you’ve installed node with homebrew or nvm) so you run brew upgrade node or nvm install node (or whatever the command is that you need to use) but still, after running node -v you get the same gosh darn version!!! What’s going on?

You run brew upgrade node or nvm install node again because, “Maybe it didn’t work the first time!” but you’re wrong. All you get is an error:
Warning: node 15.3.0 already installed

Uh… what?

It turns out, node links stuff magically behind the scenes and something has gone awry. It’s likely not your fault! Before continuing on, we want to make sure you’re using the correct node location by running which node and the output should be something along the lines of: /usr/local/bin/node

Running brew rm node --force; brew install node will remove the original linked node and reinstall it. This will likely fail, which is what we want, but you will get an incredibly helpful warning along the lines of:

Warning: node 15.3.0 is already installed, it's just not linked
You can use `brew link node` to link this version.

Finally, some feedback we can work with!

It’s now time to run brew link --overwrite --dry-run node to do a test-run. The --dry-run flag will give you an output of what is going to be overwritten without making any scary changes and allows you to double check that nothing important is going to be lost. My output was: Would remove: /usr/local/bin/node

Perfect, this was the location of our node from before when we ran which node which means it’s time to remove the flag and commit to the change!
Let’s run brew link --overwrite node and then run node -v to see that the version is now correct! You did it! It wasn’t so bad, right?

If you need help or wanna say hi, I’m always happy to make new connections! Drop a comment below or feel free to add me on LinkedIn. ❤

Alexandria Lalli

Full-Stack Engineer, UX/UI Aficionado, and lover of coffee.