# What is imgpkg
Carvel's imgpkg (pronounced, 'image package') addresses a problem of packaging and distributing a set of files which works well with Kubernetes resource configurations. It creates, relocates, and inspects what we call a bundle. A bundle is an OCI image which acts as an abstraction that enables users to manage their manifests and any referenced images as if they were a single artifact. It includes:
* bundle metadata (e.g. name, authors)
* bundle contents which is a set of files (e.g. kubernetes manifests)
* optionally, list of image references that are considered to be part of a bundle
## Benefits
* Supports copying (aka relocating) of bundles or generic images between two registries.
* Produces a tarball supporting distribution to air gapped environments
* Uses OCI registry for storage
* Does not concern itself with how package contents are configured/installed
* Works well with most registries
## Use Cases
### Making a Bundle
`imgpkg push -f my-kubernetes-config -b gcr.io/.../my-bundle:v1`
### Generic Bundle Relocation
`imgpkg copy --bundle gcr.io/.../my-bundle:v1 --to-repo docker.io/k8slt/bundle --lock-output image.lock.yml`
Key constraint: bundle image must always retain its digest when copied around.
### Consuming a Bundle
`imgpkg pull -o ~/k8s-config -b docker.io/k8slt/bundle:v1`
## Release Plan
### MVP (v.0.3.0)
Features:
* Push bundle/image
* Pull bundle/image
* Relocating bundle (relocates bundle image as well as reference images)
* Relocation of generic images
Target Date: Mid-December, 2020
## Supported Registries
* Docker
* GCR
* ECR
* Microsoft
* Harbor
* Red Hat
* Artifactory
## Glossary
An **air-gapped system** is a system with no network access to or from the internet.
A **tarball** is one or more packages serialized in a file format suitable for transporting into an air-gapped system.