NuGet vs. NPM vs. Bower

Many of us .NET developers have spent the majority of our lives living in the cozy NuGet Package Manager bubble.  With the release of Visual Studio 2015 and NET5 we, Microsoft Devs, are introduced to 2 new package managers that really show how the love is shifting to the client side. Don’t worry NuGet fans, these new package mangers wont replace Nuget, instead they will provided exciting new support to the font end of our web applications.

Now, each of these package managers are designed with specific needs in mind and they each handle specific tasks better than the others.  Because of their different strengths, it is common to use all three of them within the same .Net web application.


What is it?   .Net developers are likely to be very familiar with this.  It is a package manager that mainly deals with .NET assemblies.

What it is good for?  It is nicely integrated within Visual Studio and great for loading .Net assemblies and libraries such as Entity Framework and ASP.NET Identity.

NPM (Node Package Manager)

What is it?  Designed specifically for node modules, but is also ideal for loading packages that are used during development time. Unlike Bower, NPM supports nested dependency trees. Meaning, NPM may actually load multiple versions of a component on your machine.

What it is good for?  Great for managing developer tools like Yeoman, Grunt, Gulp, and testing tools. Its nested dependency tree makes it great for avoiding dependency conflicts.


What is it?   Bower is optimized for front-end components. Bower uses a flat dependency tree, requiring only one version for each package, reducing page load to a minimum. So where NPM aims for stability, bower aims for a smaller/faster footprint.

What it is good for?  Created specifically for managing front-end components like javascript and css files.