NPM is is a package manager for NodeJS. It installs packages so that they can be used with Node applications using the Node require() keyword. NPM uses a repository of NPM packages, similar to the NuGet Gallery package repository.

Bower, on the other hand, calls itself "A package manager for the web". Bower installs front-end frameworks for your website. Bower doesn't have a repository and can grab packages from many places, most notably straight from GitHub!

Use NPM for installing Node packages, things that will be used on the server-side, app building process. Things like:

  • Gulp, Grunt, build tools
  • CSS Preprocessors (LESS, SASS) Minimization tools, build tool utilities
  • Express, web server frameworks
  • Testing frameworks

For example, Bower is installed using NPM.

Use Bower for installing front-end packages that are actually used within your application on the client-side. Things like:

  • jQuery, Underscore, Lodash and other libraries.
  • Angular, Backbone, front-end frameworks
  • Bootstrap, Foundation, Font-AWesome and front-end stylesheets