An Overview of the NuGet Ecosystem

First introduced in 2010, NuGet has been around for a few years now and many people and organizations are starting to realize that NuGet presents a great opportunity to improve and automate different aspects of the development processes. Because the NuGet project is open source under a permissive Apache v2 license, other projects can leverage NuGet and companies can build support for it in their products. Whether for open source projects or enterprise application development, NuGet plus the ever-growing set of applications built on and around NuGet, provide a broad selection of tools for improving your software development process.

All of these projects are able to innovate for the same reason that has allowed NuGet to innovate - You. As such, please contribute to these projects just as you contribute to NuGet by reporting defects and new feature ideas, providing feedback, writing documentation, and contributing code where possible.

.NET Foundation Projects

The NuGet project provides a free, open source package management system for the Microsoft development platform and consists out of a few client tools (NuGet Command Line and (NuGet Visual Studio Extension)[http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c?SRC=Home]), as well as the set of services that comprise the official NuGet Gallery. Combined, these form the NuGet project which is governed by the .NET Foundation.

The sources for the NuGet clients can be found on Codeplex, while sources for NuGet Gallery services are available on GitHub.

NuGet Core project

Most NuGet client tools are based on the cross-platform NuGet.Core project. If you are building a NuGet client, the fastest way to get started is by either fetching and building the NuGet.Core project's sources from Codeplex, or using the NuGet.Core binaries directly by installing the NuGet.Core package into your project. The following command installs the NuGet.Core package using the Visual Studio Package Manager Console.

Install-Package NuGet.Core

NuGet Command Line tool

This is a command line wrapper around NuGet.Core.

More info: NuGet Command Line Reference

NuGet Server project

To create a basic NuGet server and point it to a local folder or network share, create a new ASP.NET application and run the following command in the Package Manager Console to install the NuGet.Server package:

Install-Package NuGet.Server

More info: Install the NuGet.Server package

Benefits:

  • requires minimal infrastructure (IIS and some diskspace)
  • requires .NET Framework 4.0

Drawbacks:

  • non-indexed storage (slower as repository-size increases)
  • single API key for entire server
  • no fine-grained security
  • single NuGet feed per NuGet.Server application

Official NuGet Gallery Services

The official NuGet Gallery Web site is hosted at http://www.nuget.org. Availability info: http://status.nuget.org/ Statistics: http://www.nuget.org/stats

To set up your own NuGet Gallery, fetch the sources from GitHub and follow the instructions at https://github.com/NuGet/NuGetGallery.

Benefits:

  • micro-service architecture enables fine-grained control over the desired NuGet gallery services
  • indexed storage (faster querying)
  • simple user system (authentication, API-key per user, manage own packages, emails)
  • supports SSL

Drawbacks:

  • gallery is comprised of several independent, loosely-coupled services, requiring fetching, building, and deploying code from multiple repositories
  • requires proper infrastructure (IIS, SqlServer)
  • requires .NET Framework 4.5 (.NET 4.5 is an in-place upgrade)
  • requires you to fetch the sources, compile everything and configure quite a lot in source code and configuration files
  • upgrading to new versions of the gallery requires repeating the fetch/update/build/deploy loop

NuGet Concierge

NuGet Concierge is a package recommendation service: upload a packages.config file and NuGet Concierge will recommend you packages you may find useful.

More info: http://blog.nuget.org/20130816/introducung-nuget-concierge.html

Microsoft Projects

Microsoft has extensively contributed to the development of the NuGet project. All contributions made by Microsoft employees are also open source and are donated (including copyrights) to the .NET Foundation.

NuGet-based Microsoft Package Manager for Visual Studio 2013

You can download this Visual Studio extension using the Visual Studio Extension Manager or directly from the Visual Studio Gallery at http://visualstudiogallery.msdn.microsoft.com/4ec1526c-4a8c-4a84-b702-b21a8f5293ca.

More info:

NuGet-based Microsoft Package Manager for Visual Studio 2012/2010

You can download this Visual Studio extension using the Visual Studio Extension Manager or directly from the Visual Studio Gallery at http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c.

More info:

Non-Microsoft Projects

In addition to Microsoft, many other individuals and companies have made significant contributions to the NuGet ecosystem. Each project listed here may have a different license than the core NuGet components so please confirm that the license terms are acceptable prior to use.

NuGet Package Explorer

One of the developers of the core NuGet team at Microsoft, Luan Nguyen, created a great graphical tool to work with NuGet packages. The GUI allows you to very easily create, publish, download and inspect NuGet packages and their metadata.

MyGet (or NuGet-as-a-Service)

MyGet is a NuGet server that allows you to create and host your own NuGet, NPM, Bower and VSIX feeds. It is hosted on Azure and has a freemium offering, meaning you can use it for free (within the constrains of the free plan) or subscribe to one of the paying plans if you require more resources or features. More info at https://www.myget.org.

Provides:

  • requires no infrastructure
  • allows you to get started in a few clicks and focus on the packages instead of the server
  • fully compatible with all NuGet client tools
  • free software updates (including support for to the latest NuGet version)
  • free for open source projects (meeting criteria and within allowed quota)
  • publish and promote your feed in the public gallery
  • supports NuGet Feed Discovery and Package Source Discovery
  • extended feed functionality
    • SSL-by-default
    • feed visibility (public, readonly or private)
    • activity streams
    • strict SemVer validation for packages being pushed
    • upload packages directly in the browser
    • add packages from another feed (upstream package source)
    • upstream package source presets for nuget.org, chocolatey, teamcity, etc
    • filter upstream package sources
    • mirror upstream package sources
    • package promotion to an upstream package source
    • (automatic or manual) package mirroring
    • RSS
    • package retention rules
    • download entire feeds as ZIP archives for backup purposes
    • download packages from the web (without the need for nuget client tools)
    • integration with symbolsource (shared credentials and feed/repository security settings)
    • multiple endpoints, including the v1-compatible endpoint (e.g. you can use the feed as a custom Orchard Gallery feed)
  • granular security:
    • API key per user
    • user-roles on feeds (owner, co-owner, contributor, reader)
    • user management
    • quota management
    • web site authentication using on-premise ADFS, web site authentication using prefered identity providers: Live ID, Google, GitHub, StackOverflow, etc
  • build services
    • creates the NuGet and symbols packages for you
    • customizable automatic-versioning and assembly version patching
    • auto-trigger builds for CodePlex, BitBucket or GitHub commits
    • support for many unit testing frameworks
    • support for many SDKs (including windows phone)
    • build failure notifications through email and downloadable build logs
  • custom logo and domain name

Chocolatey

Chocolatey.org is a system-level package manager for Windows based on NuGet, allowing you to search and install software components on your system, even unattended. Looks very promising and definitely something to keep an eye on!

Provides:

  • Unattended software installations
  • Installation of multiple packages with a single command
  • Easy to use command line tool
  • Supports any NuGet package source (feeds and file shares)
  • Has a GUI as well: http://chocolatey.org/packages/ChocolateyGUI
  • Integration with:
    • Web Platform Installer
    • Windows Features
    • Ruby Gems
    • CygWin
    • Python

OctopusDeploy

OctopusDeploy is a convention-based automated deployment solution using NuGet as a protocol. You can use the Community edition for free (limited to 5 projects, up to 10 tentacles and limited to 5 users) or buy one of the paying editions.

Provides:

  • Deployment dashboard
  • Scalability through lightweight service agents (tentacles)
  • Deployment promotion between environments
  • Support for PowerShell scripts
  • Support for manual interventions
  • Support for XML configuration transforms and variables
  • Support for Windows Azure web and worker roles
  • Support for (S)FTP
  • Has a TeamCity plug-in
  • Has a Command Line (octo.exe)
  • Has a REST API
  • Fine-grained user permissions
  • Retention policies
  • Automation of common tasks for ASP.NET deployments (IIS configuration) and Windows Services

RedGate Deployment Manager

RedGate's Deployment Manager is a custom fork of the OctopusDeploy project. History separates shortly after v1.0 of OctopusDeploy, as explained in this post: http://octopusdeploy.com/support/red-gate

More info: http://www.red-gate.com/delivery/deployment-manager/

SymbolSource

SymbolSource is a hosted symbolserver that integrates with NuGet and is configurable in Visual Studio, allowing you to debug NuGet packages by downloading the symbols and sources on-demand.

Provides:

  • Consumes and provides NuGet symbols packages
  • Consumes and provides OpenWrap packages
  • Hosts symbols (PDB files) and sources (C#, VB.NET, C++)
  • Symbol server and source server compatible with Visual Studio
  • Flexible security for public and private content
  • Integration with MyGet.org (shared credentials and feed/repository security settings)
  • Integration with NuGet.org (default symbols repository)

CoApp

The CoApp project originally aimed to create a vibrant Open Source ecosystem on Windows by providing the technologies needed to build a complete community-driven Package Management System, along with tools to enable developers to take advantage of features of the Windows platform.

The project has pivoted to mesh with the NuGet project and the collaborative result is visible in NuGet 2.5 where support for native packages was first introduced. The CoApp project is still building additional tools to enhance C/C++ support in NuGet.

ProGet (Inedo)

ProGet is an on-premise NuGet server with a freemium model that also provides integration with the Inedo BuildMaster product.

Provides:

  • Compatibility with all NuGet client tools
  • Custom proget.exe client tool
  • Connectors to other NuGet feeds
  • Connector filters
  • Support for multiple feeds
  • Support for private feeds
  • License filtering
  • Download feeds and packages
  • LDAP authentication to the ProGet web application
  • Upload packages to the ProGet web application
  • integrated symbols and source server
  • SDK and API
  • Supports OData
  • Supports NuGet Feed Discovery and NuSpec Extensions

BoxStarter

BoxStarter is another cool project leveraging NuGet and Chocolatey to quickly set up development environments.

More info: http://boxstarter.codeplex.com/documentation

SharpDevelop

SharpDevelop was amongst the first IDEs other than Visual Studio to support NuGet.

More info: http://community.sharpdevelop.net/blogs/mattward/archive/2011/01/23/NuGetSupportInSharpDevelop.aspx

Xamarin and MonoDevelop

Xamarin Studio and MonoDevelop also have a NuGet extension, built on top of a custom build of the NuGet.Core.dll and a custom build of Microsoft's XML Document Transformation (XDT) library.

More info: https://github.com/mrward/monodevelop-nuget-addin

JetBrains ReSharper

As of v8.0 of ReSharper, the built-in extension manager allows you to fetch ReSharper plug-in packages from a custom NuGet Gallery hosted at https://resharper-plugins.jetbrains.com.

JetBrains TeamCity

TeamCity has a few build steps specifically designed to deal with NuGet package consumption, creation and publication. In addition, it also comes with a built-in NuGet feed collecting all packages produced in your build artifacts.

More info: http://blogs.jetbrains.com/dotnet/2011/08/native-nuget-support-in-teamcity/

AppVeyor CI

AppVeyor is Continuous Integration service for Windows developers to securely build and test code in parallel and deploy successful bits to on-premise or cloud environments. Every AppVeyor account comes with a private NuGet feed aggregating packages from all build artifacts and supporting publishing of your own packages.

More info: http://blog.appveyor.com/2014/02/21/nuget-support-in-appveyor-ci/

Artifactory

Artifactory is the first and only Binary Repository Manager with 1st class support for .NET development in general and NuGet packages in particular, including proxying remote feeds, hosting in-house packages, security and user management, promotion, browsing the content of packages, custom metadata and full search for packages.

More info: Article, White Paper, Reference Documentation, number of blog posts

Sonatype Nexus

Nexus is another repository manager with built-in support for NuGet and they even provide a "What is NuGet for Java Developers" on their blog.

More info: http://books.sonatype.com/nexus-book/reference/nuget.html

NuGet Server

NuGet Server is a fully functional NuGet server you install as a Windows service. Purchase for $5 US, download and double click the installer. NuGet Server is basically a wrapper of the NuGet.Server package, but installed through a wizard. NuGet Server is distributed with its own web server, so you don't need IIS.

More info: http://nugetserver.net/

Klondike

Klondike is a fully functional NuGet server that can be installed as an IIS site or as a Windows Service (using OWIN self-hosting). Klondike aims to be an alternative to NuGet.Server that offers much faster performance by indexing all package metadata with Lucene.Net.

Klondike is an open source alternative that's faster than NuGet.Server and easier to deploy than NuGet Gallery.

Provides:

  • Windows Authentication
  • API Key Authentication
  • Automatic mirroring of packages from a public feed
  • Symbol Package and symbol server support

More info: https://github.com/themotleyfool/Klondike

scriptcs

scriptcs offers a cross-platform scripting environment for authoring C#. Scripts can be created via a text editor and executed or code can be executed interactively in the scriptcs REPL. scriptcs allows script authors to install NuGet packages and use them in their scripts. scriptcs also leverages NuGet for extensibility as script packs and modules are installed as NuGet packages.

Other NuGet-based utilities

There are quite a few other tools and utilities building further on top of NuGet. Here's a list of what I've found interesting:

Training Materials and References

Using a new tool or technology usually comes with a learning curve. Luckily for you, NuGet has no steep learning curve it all! In fact, anyone can get started consuming packages in no time. Authoring packages however, and especially authoring good packages, as well as embracing NuGet in your automated build and deployment processes requires some research in order to get things right.

The following pointers should help you get the maximum out of NuGet:

Documentation for Individual Packages

NuDoq provides the missing link between straightforward access and updates to NuGet packages, and their corresponding API documentation.

NuDoq regularly polls the NuGet.org gallery server for the latest package updates, unpacks and processes the library documentation files, and update the site accordingly.

Adding Your Project

If you have a NuGet ecosystem project that would be a valuable addition to this page, please submit a pull request with an edit to this page.