LearnHow to Install Node.js and NPM on a Mac

Dave McFarland
writes on October 8, 2014

JavaScript is one of the most popular programming languages in the world. Because it’s built into most web browsers, programmers and web designers can use JavaScript to add interactive features to web sites that reach billions of people. But in the past couple of years, JavaScript has started to play a larger role outside of the browser, due in large part to Node.js.

Node.js is a tool for building fast network applications. It’s known as a “JavaScript runtime environment” which simply means it lets you write JavaScript code that can run on your computer free of any web browser. Node.js is used to create fast web servers by companies like Walmart, eBay and Netflix.

But because Node.js can be used on your desktop computer, programmers have created useful Node-based tools that help with the process of building web sites. For example, Grunt is a popular tool used to automate common tasks like compiling Sass files to CSS, making JavaScript files smaller so they load in less time, and compressing images to smaller file size. While these tools run through the Node.js environment, you’ll use another tool, NPM, to install them. NPM is what’s called a “package manager.” NPM makes installing a tool like Grunt as easy as npm install -g grunt-cli.

But before you can use Node.js or NPM you need to install them — while the NodeJS website includes an installer, there’s a better way to install them on a Mac. In this article, I’ll take you through the process of installing Node.js and NPM on a Mac using Homebrew. In another article, I’ll show you Windows users how to install them on the Windows operating system.


Before you install Node.js and NPM you’ll first need to have some familiarity with the Mac Terminal application. Terminal lets you dig into the underbelly of the operating system and issue text commands to your computer. You’ll need to use Terminal (or a similar application like iTerm) to not only install Node.js but also to use it and NPM.

Before you can install Node, you’ll need to install two other applications. Fortunately, once you’ve got these on your machine, installing Node takes just a few minutes.

  1. XCode. Apple’s XCode development software is used to build Mac and iOS apps, but it also includes the tools you need to compile software for use on your Mac. XCode is free and you can find it in the Apple App Store.
  2. Homebrew. Homebrew is a package manager for the Mac — it makes installing most open source sofware (like Node) as simple as writing brew install node. You can learn more about Homebrew at the Homebrew website. To install Homebrew just open Terminal and type ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)". You’ll see messages in the Terminal explaining what you need to do to complete the installation process.

Why Homebrew?

Observant readers will notice in the screenshot above that there’s an installer for NodeJS. You can download it directly from NodeJS.org. I recommend Homebrew over that installer for a few reasons:

  1. When installing Node via the installer, you have to use the sudo command to make sure it installs properly (there is a workaround for this, but it’s complicated). sudo lets the installer place files in areas of your file system that are only accessible to administrators. One nice thing about Homebrew is that it doesn’t require access to administrator-only areas of your computer in order to install NodeJS (or any other package). This is a safer approach as it makes sure that any package you install with Homebrew can’t wreak havoc on your computer.
  2. After installing Node via the installer you have to add the path to the node executable to your system $PATH. This involves mucking around with your shell login file. For experienced Terminal users or Unix-people this isn’t a big deal, but for those new to the command line that step can be daunting. Although the Homebrew method involves installing several different pieces of software, it’s generally just a simple process of point-click-and-wait. It takes a bit longer this way but there’s less room for error.
  3. Homebrew is a great tool for web developers. First, it makes removing Node very easy (otherwise you have to crawl through your file system and delete a bunch of files manually). Second, it greatly simplfies the installation of other useful packages like Git, Ruby, or the very useful wget utility.


Installing Node.js and NPM is pretty straightforward using Homebrew. Homebrew handles downloading, unpacking and installing Node and NPM on your system. The whole process (after you have XCode and Homebrew installed) should only take you a few minutes.

  1. Open the Terminal app and type brew install node.
  2. Sit back and wait. Homebrew downloads some files and installs them. And that’s it.

To make sure you have Node and NPM installed, run two simple commands to see what version of each is installed:

  • To see if Node is installed, type node -v in Terminal. This should print the version number so you’ll see something like this v0.10.31.
  • To see if NPM is installed, type npm -v in Terminal. This should print the version number so you’ll see something like this 1.4.27


How to Update Node and NPM

New versions of Node and NPM come out frequently. You can use Homebrew to update the software it installs.

  1. Make sure Homebrew has the latest version of the Node package. In Terminal type brew update
  2. Upgrade Node: brew upgrade node

How to Uninstall Node and NPM

You can use Homebrew to uninstall packages that it installed: brew uninstall node

With Node.js and NPM installed you’ll soon be able to take advantage of the huge world of NPM modules that can help with a wide variety of tasks both on the web server and on your desktop (or laptop) machine. The NPM site lists all of the official Node packages making it easy to make the choice. Have fun and check out my current courses at Treehouse.

78 Responses to “How to Install Node.js and NPM on a Mac”

  1. techsavvy007 on October 12, 2017 at 3:38 pm said:

    nicely documented step by step guide!

  2. Hi Dave,

    Thanks for the easy to follow tutorial!

    Kind regards


  3. Simran Jaggi on August 14, 2017 at 11:46 am said:

    Great tutorial! Worked easily!

  4. Thanks for this great tutorial. worked perfect

  5. Brian Harrison on July 21, 2017 at 8:49 am said:

    I’m having difficulties installing homebrew. It keeps asking for a password before it will finish installing. My Mac didn’t have a password and just pressing enter didn’t work. So I created a root password and now I get ‘Sorry, try again’.
    Any help on this please?


    • This is normally the password you use to log into your Mac or your username’s password. You might have your Mac setup to automatically log you in without entering in a password. If you don’t know what the password is to your user account, go to System Preferences -> Users & Groups, and change your password. Then use this password when it prompts you while installing brew.

  6. Aiman Hussain on June 6, 2017 at 1:42 am said:

    Really helped. Simple straightforward. Good thing i work with homebrew and XCode

  7. Perfect! Thank you very much!

  8. Thank you very much! Is the easiest tutorial I ever followed!

  9. this saved me lots of time. thanks!

  10. Great tutorial, thanks a lot for sharing this.

  11. Wow, thanks! Saved me a ton of time!

  12. Yubraj Ghimire on March 23, 2017 at 11:20 pm said:

    Its a great piece of article. Works just fine. Keep it up..

  13. Thanks for this great article. Works perfectly!

  14. Thank you. This article was super helpful and easy to follow 🙂

  15. Once you install Homebrew, where is it advised to work on your projects – within the usr/local folder?

  16. Awesome worked like a charm.

    Thank You

  17. Great article.

  18. Very Useful, Just wanted to say thanks!

  19. This is pretty easy to follow thanks man!
    it worked just fine on my mac 🙂

  20. Hey Dave,

    The process worked seamlessly. Thanks!

  21. Installing using brew is not working for me because it needs permission to write to /usr level directories. I cannot run brew as a superuser because it is not allowed. So using brew is not an option to install node on MAC.

    I simply down loaded the Node package from https://nodejs.org/en/download/
    and installed the node & npm without any problems. I tried to use brew for two days to install and it does not work.

    • Thank you for this, homebrew wasn’t working for me either. Downloading the package from https://nodejs.org/en/download and installing it was much easier than the steps in this article. Took less than 5 minutes to install. Plus it only installs what I need (node and npm) vs stuff I don’t need (homebrew, grunt).

  22. Srikar Nuvvula on November 20, 2016 at 8:05 pm said:

    Great post. Saved me a lot of time. Dave, thanks for sharing!

  23. HELP!!! I try installing grunt using “npm install grunt –save-dev” on windows but I get this instead:

    npm ERR! Windows_NT 6.2.9200
    npm ERR! argv “C:\\Program Files\\nodejs\\node.exe” “C:\\Program Files\\nodejs\\
    node_modules\\npm\\bin\\npm-cli.js” “install” “grunt@0.4.5” “–save-dev”
    npm ERR! node v6.9.1
    npm ERR! npm v3.10.8
    npm ERR! code ENOSELF

    npm ERR! Refusing to install grunt as a dependency of itself
    npm ERR!
    npm ERR! If you need help, you may report this error at:
    npm ERR!

    Please how do I fix this?

  24. Thanks, it really helped. 15 minutes job to do the installation.

  25. Great tutorial, thanks for the walkthrough.

    I’d just like to add for other people having a bit of difficulty trying to install homebrew that you need to download Xcode to your machine and run it after it’s installed so that when you run the install for homebrew it can complete.

  26. it was so useful for me, but i have a question: where is node installed folder?! where i must make my project?

  27. it is incredibly wonderful to read something – anything – about web development in coherent English. I was beginning to wonder if my mind was going

  28. Lovely tutorial thank you.

  29. Schwarz Crepsley on July 29, 2016 at 2:25 am said:

    Great easy tute, thank you!

  30. Kudos man !!! The only sensible Explanation on web i came across for this question …

  31. Revati on July 7, 2016 at 9:57 pm said:

    Super Duper Helpful ! 😀

  32. All tech documentations should be this good. I am just reading heading to heading and bold words and voila I am done..

  33. Super helpful. Thanks!!

  34. I think this tutorial is very informative, but I can’t understand why so many writers ignore the basics of good online communication. Your gray text on a gray background “is” readable, but not without effort. Is this a design decision? Why not make the text black to increase contrast and readability? And, your links, in light blue, are even worse—I cannot read them on my high-resolution 30″ monitor.

    I am amazed that you ignore these communications basics, when you purport to be a communications company.

    • Not to downplay your experience (I agree web design should be inclusive) but on my monitor and with my eyes, there is a high contrast between shades of gray, white, and blue, and it is easy to read.

    • I must disagree on what you say, because I think that the contrast from background to the typo is just fine.
      The problem is, if you choose a too strong contrast it will be very difficult for the eyes to read a lot of text.

      To better understand what I am meaning I advice you to take a piece of paper which is intended for laserprinting/xeroxing. But don’t take the environmental greyish paper but the one that is super white. Now print in the size of 9 to 11 pt some text in a robust font like times, garamond or helvetica. You will see that the words start to flicker in your eyes.

      Now print the same text on a greyish environmental piece of paper and you will notice that the text will be much more readable and your eyes will not start getting tired that fast.

      This is due to reduced contrast between text and background. The problem is that in our eyes there is a contrast enriching mechanism working if two adjacted photoreceptor cells are receiving very contrasting amounts of light. The one that receives a lot of light uses up the visual purpur (which is needed for the cells to create the light perceprion) of it’s neighboring photoreceptors thus making the perception of those receptors that receive very little light even darker. And if this contrast just gets to strong our eye is just not capable to handle this contrast any more and the vision gets blurry/flickering.

      If you look at high quality thread bound reading books without pictures (a novel for example) you will notice that it mostly is printed on natural colored paper and that is not because the printer wanted to save money, in fact this naturally colored paper is way more expensive as the highly bleached super white xerox paper you get at the supermarket.

      Now look at the contrast between black and white on an average computer screen and you will notice that the contrast is even stronger than on super white copying paper. Therefore it is strongly recommended to either brighten up the typo or dimming down the white of the background (or do both). You can even colour it a bit as long as it does not get too saturated.

  35. Received the following error when I tried to install node via home-brew:
    Warning: The post-install step did not complete successfully

    Turns out I had installed nodejs and bower previously, and some remnants of that install were blocking the nodejs post-install script.

    To resolve:
    $ sudo rm -rf /usr/local/lib/node_modules
    $ brew postinstall node

  36. Thanks for writing this.

  37. `brew install node` does not install npm. I get an error: “npm: command not found”

  38. Hey there just wanted to give you a brief heads up and let
    you know a few of the images aren’t loading properly. I’m not sure why but I think its a linking issue.
    I’ve tried it in two different web browsers and both show the same outcome.

  39. Kamran Aslam on March 6, 2016 at 11:40 am said:

    How to uninstall and reinstall node on mac? I think i have some issue with my node 🙁 i want to uninstall the node completely and re-install it once again.



  40. I am trying to install nodeJS and I cannot install Xcode on my work computer because I am using OSX 10.9. Can I install NodeJS without Xcode?

  41. Andrew Pena on February 21, 2016 at 8:27 pm said:

    Outstanding tutorial on node.js et al. I wish I had stumbled upon your site a few weeks ago when I ‘tried’ installing the ‘other’ way. I ended up following your instructions to a “T” after I removed node.js…it worked like a charm. I especially like the fact that I now have Homebrew which I knew existed, just didn’t know the reason why.

    I’m going to hunt around your site to see what else I can learn. Possibly find a course that i can take as well. Thanks again for the tutorial…I’m off to play in node.js and the like!

    • Faye Bridge on February 22, 2016 at 1:30 am said:

      Hi Andrew! That’s great to hear. If you’re interested in browsing through all of the courses we have available, check out of Library. We hope you find something to enjoy learning! 🙂

  42. James Gill (@IamJamesGill) on January 22, 2016 at 11:20 am said:


    I’m noticing that whenever I use Homebrew to install Node/NPM, it installs *hundreds* of node modules. So, when I scaffold up a project with Yeoman, the node_modules folder contains hundreds of node modules.

    I admit I’m not sure if this is Homebrew’s doing, but it seems like it.

  43. Thanks, very useful !

  44. I disapprove of installing Node via Homebrew. Because many packages are installed using the npm commands. Assign own path of Homebrew for Node and npm, and this is a problem most of the time.

  45. To support and at the same time, challenge the idea of installing node via homebrew.

    I initially did the install via the installer pkg. But I am using a non-admin user to do all my stuffs, developments and so. So I got stuck into even more challenging issues with the permissions. So I decided to remove the packaged install and re-install via homebrew.

    It went like a charm.

    Now, a month later, I want to install ghost and kickstart a project. However, ghost supports Node only up to v. 4.2 and the current node version is 5.1

    I’ve been using npm and node for many things in the last month and installed a bunch of things using npm.

    Because I used homebrew in the first (well, second actually) place, I can easily uninstall node via homebrew, install nvm via homebrew and install the node versions I need via nvm.

    Makes sense, no?

    Actually, with node, nvm is the the way to go.

  46. I had a typo in my first post. It should say ‘Should there be a colon OR slash after that…’ instead of ‘colon FOR slash’.

  47. Thanks for the instructions. I’m new to this, so I don’t know what is wrong. I got this warning from the Homebrew installation…

    Warning: /usr/local/bin is not in your PATH.

    Here is my path as displayed from ‘echo $PATH’ (where ‘me’ is my user name).


    Notice at the end, it shows /usr/local/bin like the warning mentioned. Should there be a colon for slash after that (should there be a slash after every ending folder name)? If this path looks funky, it may be because I was trying to fix a goof from a node-v4.2.1.pkg installation. If there is anything that I should now remove since I am going through the Homebrew installation of Node, please let me know.


  48. Zachary Hale on October 16, 2015 at 6:55 pm said:

    This was seriously the simplest install I’ve ever done…..of anything.

  49. George Battelle on October 8, 2015 at 4:58 am said:

    I fixed my problem by running:
    “brew doctor”
    which told me how to prune some stray links
    and suggested I change ownership to:
    “sudo chown -R /usr/local
    “brew install node”
    then announced working versions with:
    “node -v”
    “npm -v”

  50. Error: An unexpected error occurred during the `brew link` step
    The formula built, but is not symlinked into /usr/local
    File exists – /usr/local/lib

    This happens when i try to execute brew install node

    • George Battelle on October 8, 2015 at 2:56 am said:

      Wow. A similar problem happened with me using Homebrew.
      Unexpected error occurred during the ‘brew link’ step.
      The formula built, but is not symlinked into /usr/local
      Permission denied – usr/local/etc

      • Thanks For sharing this. But I got some problem, although Node and NPM installed I did uninstall and again installed for some reasons. After that when I am checking
        node -v
        But when checking I am getting this.
        npm -v
        -bash: npm: command not found

        Can someone help me with this. I guess there is some problem with symlink, but not sure how to deal with it.

        Thanks in advance.

  51. Is there a way to install a specific (previous) version of Node with HomeBrew?
    Great Article!

  52. How to install Node.js on a Debian-based distro:
    $ sudo apt-get install npm
    $ sudo ln -s /usr/bin/nodejs /usr/bin/node

  53. Homebrew is a great tool but just installing Node with its installer is much simpler, and sudo shouldn’t be a problem with developers on their development machine.

  54. Wish I had read this the day before I installed node instead of the day after.

    Is there a reliable way to uninstall node and npm from OS X Mavericks if I installed using the NodeJS.org installer?

  55. Anonymous on October 10, 2014 at 3:14 am said:

    Hey guys, when are you releasing courses on node ??

  56. Happy to see you guys start with node

  57. Honestly I recommend using the installer on the node.js home page. I use HomeBrew for everything else but I find node to be finicky when installed with HomeBrew.

    • Dave McFarland on October 9, 2014 at 9:36 am said:

      Hi Damian

      That’s interesting. I’d love to hear about your experience with Homebrew and Node. What problems have you run into?

  58. I don’t get it. Why not just install it with the pkg from the nodejs.org website?


    • Seems like this would be less hassle than what the article suggests.

    • Dave McFarland on October 8, 2014 at 5:14 pm said:

      Hi Paolo,

      Good question. Yes, there is an installer package for Node. There are a couple of reasons why I recommend Homebrew instead:

      1. When installing Node via the installer, you have to use the sudo command to make sure it installs property. This lets the installer place files in areas of your file system that are only accessible to administrators. One nice thing about Homebrew is that it when it installs packages it doesn’t require access to administrator-only areas of your computer. This is a safer approach as it makes sure that any package you install with Homebrew can’t wreck havoc on your computer.

      2. After installing Node via the installer you have to add the path to the node executable to your system $PATH. This involves mucking around with your shell login file. For experience Terminal uses or Unix-people this isn’t a big deal, but for those new to the command line that step can be daunting. Although the Homebrew method involves installing a several different pieces of software, it’s generally just point-click-and-wait. It takes a bit longer this way but there’s less room for error.

      3. Homebrew is a great tool for web developers. First, it makes removing Node very easy (otherwise you have to crawl through your file system and delete a bunch of files manually — at least you do at this point). Second, it makes installing other useful packages easy like Git, Ruby, or the very useful wget utility.

      I’ve updated the article to include these ideas. Thanks for the feedback!

      • Just want to second (or third?) that installing Node, NPM, Mongo, and so on, from Homebrew is preferred for most developer installations. Makes managing versions easier, updating, removing, and so on. Also, the biggest benefit for me is that you don’t need to muck with permissions when running applications, installing packages with NPM, and sometimes even building… Which can require sudo to work properly, something that can get annoying when you’re managing your application’s dependencies.

        I followed these instructions to completely remove Node and NPM, and then re-installed via homebrew: http://benznext.com/completely-uninstall-node-js-from-mac-os-x/

Leave a Reply

Learn to code with Treehouse

Start your 7 day free trial today and get access to hundreds of video courses in web development, design and business!

Learn more