fshy

Home / GitLab

GitLab.com generic package registry

gitlab.comRegistrystorage/gitlab-com-generic-package-registryJSONcomparereport an errorprovider JSON

Free allowance
5 GB maximum per uploaded file (Generic).
Verdict
★ qualifiesusable as stated; the read path was probed
Cost
free tier
Identity
institutionno card, no phone
Binding limit
per-object-cap5 GB per file
Evidence
reported5 sources; a third party said so
Freshness
stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
Free tier5 GB maximum per uploaded file (Generic). No per-project or per-namespace package storage cap is documented; the package registry is explicitly excluded from the 10 GiB project storage limit.
unit GiB; metered on stored-bytes
Pricenone stated
Limits
  • per-object-cap (binding) 5 GB per file source
  • retention-clamped expire in 30 days source
5 GB per file (Generic / Maven / npm / NuGet / PyPI / Conan); 10 GB for ML models (upload capped at 5 GB); 1 GB for Terraform state; Helm only 5 MB. Anonymous read of public project packages; writes need a token. Repository/LFS Git push limited to 5 GiB per request, irrelevant to packages.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Identityinstitution not published
EgressFree and Cloudflare-fronted. GitLab.com is behind Cloudflare and blobs are served from Google Cloud Storage / the GitLab CDN (cdn.registry.gitlab-static.net). No egress billing for public projects.
Per-object cap5 GB maximum per upload (5000000000 bytes)
RetentionArtifacts expire in 30 days, packages do not. (30 days)
Interfacerest, cli rest
ToolingGitLab REST API v4 (PUT /projects/:id/packages/generic/:package_name/:version/:file_name, GET .../package_files/:id/download), glab CLI, python-gitlab (has generic package support, merged), goreleaser pushes generic packages natively (PR #2745 merged). Works with plain curl — no special client needed.
Composes withUnlimited projects per namespace (no project-count cap is documented on GitLab.com; the only new limits are 3 top-level *groups* for accounts created after 2026-01-27, and the personal namespace does not count). Each project is its own unbounded package bucket at 5 GB/file. N projects x unlimited package versions x 5 GB. Multiply again by additional free namespaces (3 groups + personal) and by unlimited free accounts.
ReliabilitySnippets, packages and job artifacts count toward *namespace* storage as a display/billing figure but are not enforced as a cap — enforcement is per-project on repo+LFS only. GitLab could start enforcing namespace storage at any time; it has never done so for packages. Artifacts expire in 30 days, packages do not.
Parsed numbers
  • per-object-cap 5 GB
Evidence 5
datesourcewhat it proved
2026-10-21docs.gitlab.com/user/storage_usage_quotas/'Only the project's repository and LFS are included in the storage limit. The container registry, package registry, and build artifacts are not included in the limit.' and 'Each project in a Free tier namespace on GitLab.com has 10 GiB of free storage.'
2026-10-21docs.gitlab.com/user/gitlab_com/package registry max file size table: 'Generic | 5 GB'; also 'GitLab.com is fronted by Cloudflare'
2026-10-21docs.gitlab.com/user/free_user_limit/top-level group limit of 3 applies only to accounts created after January 27, 2026, and 'Your personal namespace does not count toward this limit'
2026-10-21gitlab.com/api/v4/projects/gitlab-org%2Fcli/packages/2752497probe: GET with Range: bytes=0-1023 -> 206 Partial Content, Content-Range: bytes 0-1023/9035444, Server: cloudflare, x-goog-stored-content-length 9035444 (anonymous public-package download, Cloudflare-served, range-capable) — no token sent
2026-10-21gitlab.com/api/v4/projects/gitlab-org%2Fcli/packages?per_pagprobe: GET -> 200, glab 1.44.1 last_downloaded_at 2026-10-21 (packages API anonymously listable)
Unknown values 3
  • $.identity_cost.detail boilerplate
  • $.per_object_cap.notes 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