fshy

Home / GitLab

GitLab.com container registry

registry.gitlab.comRegistrystorage/gitlab-com-container-registryJSONcomparereport an errorprovider JSON

Free allowance
No published storage cap.
Verdict
★ qualifiesusable as stated; the read path was probed
Cost
free tier
Identity
anonymousno card, no phone
Binding limit
noneno named constraint binds
Evidence
reported5 sources; a third party said so
Freshness
stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
Free tierNo published storage cap. Explicitly excluded from the per-project 10 GiB limit; unlimited container repositories per project is the practical reading.
unit GiB; metered on stored-bytes
Pricenone stated
Identityanonymous not published
EgressFree, Cloudflare + Google Cloud CDN. Blob requests 307-redirect to cdn.registry.gitlab-static.net with a signed URL — directly cacheable by an external Cloudflare zone.
Per-object capnot stated
Retentionnot stated
Interfaceoci oci
ToolingStandard OCI Distribution v2. ORAS, skopeo, crane, docker. Auth flow is anonymous for public projects (/jwt/auth returns a token with auth_type=none).
Composes withOne OCI artifact per blob of any size -> unlimited projects x unlimited repositories x unlimited tags. This is the canonical 'OCI registry as object store' pattern (ORAS). Blob dedupe means the same chunk stored in N projects costs one copy but is addressable N times.
ReliabilityGitLab has run garbage-collection and cleanup-policy tooling against registries since 2023; no automatic purge is documented, but stale-tag cleanup policies are a first-class feature other users may set on shared projects. Own projects are not touched.
Evidence 5
datesourcewhat it proved
2026-10-21docs.gitlab.com/user/storage_usage_quotas/package/container registries excluded from the limit
2026-10-21registry.gitlab.com/v2/probe: GET -> 401 with WWW-Authenticate: Bearer realm="https://gitlab.com/jwt/auth",service="container_registry"; Server: cloudflare; gitlab-sv: registry-us-east1-c
2026-10-21gitlab.com/jwt/auth?service=container_registry&scope=repositprobe: GET -> 200, JWT with "auth_type":"none" (anonymous pull token, no credentials)
2026-10-21source not publishedprobe: GET /v2/gitlab-org/gitlab-runner/manifests/latest with that token -> 200, application/vnd.oci.image.index.v1+json, digest sha256:f1c76f915d7f70d8b3e25cac58da3d87d3d10106dda82ee780409440e1dc1ccc, Server: cloudflare
2026-10-21cdn.registry.gitlab-static.net/probe: GET /v2/gitlab-org/gitlab-runner/blobs/sha256:a60ef8ec184edb5ed91f5983f00261359fb2fe20f603e8d488b9477d32fcad70 -> 307 to ... (signed CDN URL, cacheable)
Unknown values 6
  • $.binding_note boilerplate
  • $.identity_cost.detail boilerplate
  • $.per_object_cap.notes the field may be stated in a source that was not read
  • $.per_object_cap.stated the field may be stated in a source that was not read
  • $.retention.notes the field may be stated in a source that was not read
  • $.retention.stated the field may be stated in a source that was not read