ProGet Documentation

NuGet Packages and Feeds in ProGet

NuGet is a package format developed by Microsoft to distribute free and open-source .NET libraries. Typically, these packages are publicly available on, and are consumed by Visual Studio or the nuget.exe command-line client.

With ProGet, you can use NuGet packages to distribute private proprietary libraries within your organization. To do this, simply create a NuGet feed: Feeds > Create New Feed > Type = NuGet.

Then configure Visual Studio to use your feed as a new package source.

You can use also ProGet as a proxy to, both to block improper licenses and security vulnerabilities, and to cache packages in the event of an internet or outage. To do this, create a connector (Feeds > Connectors > Create New Connector > NuGet), then associate it with a feed (Manage Feed > Connectors).

Creating and Publishing NuGet Packages

The NuGet package format is well-documented, and you can create packages in a number of ways, including directly from Visual Studio or using nuget.exe. Once you've created a package, there are four ways you can publish it to ProGet:

  • Upload from Disk; Upload a pre-packaged NuGet package (.nupkg) from disk.
  • Push via NuGet Command Line Utility; Uses the nuget.exe command line to add a package to the local feed.
  • Pull from another Feed; Pulls a package from another NuGet feed (such as
  • Bulk Package Import/File Copy; Import multiple existing packages at once.

For more specific instructions on how to add a package to a feed, click the "Add Package" button on your NuGet feed.

Symbols and Source Packages

A NuGet feed in ProGet may be configured as a Symbol/Source server compatible with debuggers such as Visual Studio and WinDbg. See Symbols and Source Code in ProGet for more information.

Using the NuGet API

ProGet implements the NuGet ODATA protocol. Because this is a third-party API, we don't provide documentation for their API. However, here are a few places to get started:

In addition, here are a few common queries you may find helpful:

Listing all packages of a feed in JSON format


Manually downloading packages from a ProGet feed


ODATA package queries


NuGet "v3" API

Both and the NuGet client tools support two different API protocols: ODATA (v2) and JSON-LD (v3). Microsoft plans to maintain and support both APIs indefinitely, to support older versions of the NuGet clients and the dozens of third-party tools (like ProGet) that use the ODATA protocol.

There is no need or benefit to having ProGet support the JSON-LD protocol. It is extremely complex, as it is designed to solve the specific needs of a massive, publicly-available static package index. Because ProGet has connectors, authentication, package filtering, etc., it's not feasible or useful to generate a static index.

Legacy (Quirks) NuGet Feeds

NuGet feeds created prior to ProGet 5.0 are considered Legacy (Quirks) NuGet feeds. The quirks feed type uses the loose semantic versioning rules that preferred in the past. In ProGet 5.0, new NuGet feeds now use a more sophisticated versioning scheme that accommodates semantic versioning 2.0 rules for pre-release version strings.

To migrate a legacy (quirks) NuGet feed, click the "migrate" link on the manage feed page. ProGet will pop up a confirmation dialog with a couple migration options. When executing a migration, ProGet will do the following:

  • Set the feed to disabled state
  • Add new metadata (Database) entries to the feed
  • Remove old (quirks) metadata for the feed
  • Reactivate the feed

This migration is entirely a database operation and does not need to manipulate your packages at all. By default the migration is performed as a single database transaction so that it may be rolled back in the unlikely event of a failure. If you have a very large number of packages in your feed (>10,000), we strongly recommend performing a backup of the ProGet SQL database before executing the migration and disabling this single-transaction mode by unchecking the appropriate box on the "migrate feed" dialog.

NuGet API Key

These legacy feeds also support a "NuGet API Key". If set, nuget.exe and other NuGet clients must send whatever key is specified when pushing packages to the feed. This API is sent in addition to authentication (i.e. a name/password). With the introduction of ProGet API Keys, this feature was deprecated.

More on this topic: