--- title: "UPack Overview" order: 1 ---

## What is UPack

UPack is a technology-neutral packaging platform that allows you to deploy your applications and components uniformly across different environments for consistent deployment and testing.

### Package

Package your applications and components directly from the Visual Studio Extension or Jenkins plug-in, or use free and open-source tools such as Universal Package Explorer or the cross-platform UPack Command-line Interface.

### Extend

Include any metadata, such as the Git branch name or commit ID, or custom package information; or even extend the package format itself to provide content and functionality within your own applications and services using UPackLib.NET or the API.

### Distribute

Securely distribute your packages to any number of clients and endpoints using ProGet's universal feeds, or simply store them on disk or a network share. Use virtual packages to mix and match other packages and external content to simplify and standardize distribution.

### Deploy

Deploy your packages to servers and the cloud with BuildMaster, or use the UPack command-line interface to install them on a workstation or server. Alternatively, use the UPackLib.NET library or open specifications to deploy, install, or configure packages as your application requires.

### Discover

You can use upack or UPackLib.NET to find out which packages have been installed on a machine. NET shows you where the package came from, which tool installed it, and which user triggered the installation. Universal Packages also have a built-in audit history that lets you track changes or repackaging back to the source.

## Versioning

Universal Package Feeds are designed to provide out-of-the-box, out-of-the-box functionality for most packaging needs and also serve as a platform that you can easily extend or interact with.

### Universal Feed API Versions

Version | Notes
--- | ---
1.5.0 | Added version ranges to `dependencies` in package manifest
1.4.0 | Added `shortDescription` to package manifest
1.3.0 | Added Feed Metadata Endpoint Added Download VPack Endpoint
1.2.0 | Added Virtual Packages Added `tags` to packages Added Repackaging Added package hash to package identification string (dependencies, package history)
1.1.1 | Increased `group` length from 50 to 250
1.1.0 | Added Download Package File Endpoint
1.0.0 | Introduction

### Universal Package Versions

The Universal Package Files themselves are designed to be both backward- and forward-compatible. This is easy to do because the minimum requirements for a Universal Package are incredibly low. Therefore, changes will always be additive and their use will be optional.

In the extremely unlikely event that a future version of this specification is incompatible (we can think of absolutely no reason why this would ever be the case), it would likely be released in a completely different format (e.g., with the .upack2 extension).

## UPack Specifications:

All UPack tools adhere to the following specifications. The specifications have been designed to be easy to understand and implement for your own use cases.

### Universal Package

A ZIP archive containing any type of content, along with a simple JSON-formatted manifest file describing that content with built-in or additional metadata.

### Virtual Package

A JSON-formatted file behaves like a universal package, but its contents are downloaded and compiled at install time.

### Universal Package Registry

A JSON-formatted file that describes which packages are installed in a given context (on a server, in an application), when they were installed, who installed them, and why they were installed. It also contains a package cache in case packages need to be reinstalled or audited.

### Universal Feed

An HTTP-based API that's used to list, download, and publish universal package files in a web-based package manager such as ProGet.