Question: What is the fundamental difference between `bower` and `npm`? Just want something plain and simple. I've seen some of my colleagues use `bower` and `npm` interchangeably in their projects.

Answer: 
2017-Oct update
---------------

Bower has finally been [deprecated](https://bower.io/blog/2017/how-to-migrate-away-from-bower/). End of story.

Older answer
------------

[From Mattias Petter Johansson, JavaScript developer at Spotify](https://www.quora.com/Why-use-Bower-when-there-is-npm/answer/Mattias-Petter-Johansson):

> 
> In almost all cases, it's more appropriate to use Browserify and npm over Bower. It is simply a better packaging solution for front-end apps than Bower is. At Spotify, we use npm to package entire web modules (html, css, js) and it works very well.
> 
> 
> Bower brands itself as the package manager for the web. It would be awesome if this was true - a package manager that made my life better as a front-end developer would be awesome. The problem is that Bower offers no specialized tooling for the purpose. It offers NO tooling that I know of that npm doesn't, and especially none that is specifically useful for front-end developers. **There is simply no benefit for a front-end developer to use Bower over npm.**
> 
> 
> We should stop using bower and consolidate around npm. Thankfully, that is what [is happening](http://www.modulecounts.com/):
> 
> 
> 

[![Module counts - bower vs. npm](https://i.stack.imgur.com/HLBsP.png)](https://i.stack.imgur.com/HLBsP.png)

> 
> With browserify or webpack, it becomes super-easy to concatenate all your modules into big minified files, which is awesome for performance, especially for mobile devices. Not so with Bower, which will require significantly more labor to get the same effect.
> 
> 
> npm also offers you the ability to use multiple versions of modules simultaneously. If you have not done much application development, this might initially strike you as a bad thing, but once you've gone through a few bouts of [Dependency hell](http://en.wikipedia.org/wiki/Dependency_hell) you will realize that having the ability to have multiple versions of one module is a pretty darn great feature. Note that npm includes a very handy [dedupe tool](https://docs.npmjs.com/cli/dedupe) that automatically makes sure that you only use two versions of a module if you actually *have* to - if two modules both *can* use the same version of one module, they will. But if they *can't*, you have a very handy out.
> 
> 
> 

(Note that [Webpack](https://www.reddit.com/r/javascript/comments/2is81v/why_is_not_systemjs_dominating_the_field_of/cla66t3) and [rollup](https://nolanlawson.com/2016/08/15/the-cost-of-small-modules/) are widely regarded to be better than Browserify as of Aug 2016.)
Bower maintains a single version of modules, it only tries to help you select the correct/best one for you.

> 
> [Javascript dependency management : npm vs bower vs volo?](https://stackoverflow.com/questions/15092345/javascript-dependency-management-npm-vs-bower-vs-volo/22101165#22101165)
> 
> 
> 

NPM is better for node modules because there is a module system and you're working locally.
Bower is good for the browser because currently there is only the global scope, and you want to be very selective about the version you work with.