Artifact registry formats

  • Tier: Premium, Ultimate
  • Offering: GitLab.com
  • Status: Beta

A format is the package type a repository serves. Artifact registry supports several formats and their clients.

Supported package formats and clients

FormatClients
Mavenmvn, gradle, sbt
npmnpm, yarn, pnpm
DockerDocker CLI, Podman
OCIoras, Docker CLI, Podman

Docker and OCI formats and repositories

Docker and OCI repositories use the same registry endpoints. The registry applies different push rules depending on the format:

  • A Docker repository accepts container image manifests and manifests that carry a subject, such as a signature or an attestation that refers to an image.
  • A Docker repository rejects an artifact that is neither, such as a Helm chart or a WebAssembly module with an empty configuration. The push fails with 400 MANIFEST_INVALID.
  • An OCI repository accepts any manifest type.
  • Both formats reject Docker manifest schema 1.

Choose Docker when you store container images. Choose OCI when you store artifacts that are not container images. Because the format is fixed at creation, moving an artifact between the two means creating a new repository.

Repository types

TypeAvailability
HostedAvailable for all four formats.
RemoteAvailable for all four formats. Proxies and caches one upstream registry.
VirtualNot available in beta. A create request fails with 422 for every format.

A remote repository proxies any registry URL you give it, over HTTPS. It is not limited to a list of public registries.

A repository whose upstream is Maven Central (repo1.maven.org or repo.maven.apache.org), registry.npmjs.org, or registry-1.docker.io caches indefinitely. Those registries do not allow a published artifact to be overwritten.

Deleting artifacts

  • The management API deletes artifacts in every format.
  • Maven has no client delete command, so Maven deletion always goes through the API.
  • npm, Docker, and OCI can also delete from their own clients.

Republishing the same version

Behavior on a repeated version differs by format.

  • npm rejects a version that already exists, with 409.
  • Maven accepts a re-upload when the content is byte-for-byte identical, and returns 409 once it differs. A rebuilt JAR usually differs, so a repeated deploy of the same version usually fails.
  • Container tags can be pushed again. The tag moves to the new manifest.