{"rid":"storage/gitea-forgejo-self-hosted-with-any-s3-lfs-backend","card":{"rid":"storage/gitea-forgejo-self-hosted-with-any-s3-lfs-backend","eid":"forgejo","topic":"storage","slug":"gitea-forgejo-self-hosted-with-any-s3-lfs-backend","provider":"Gitea / Forgejo self-hosted with any S3 LFS backend","url":"https://forgejo.org/docs/latest/admin/advanced/quota/","domain":"forgejo.org","category":"paas","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"per-object-cap","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"s3-compatible,rest,git","egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":2,"usd_month":null,"usd_per_tb_month":null,"summary":"Unlimited by default: `quota.default.TOTAL = -1` means unlimited, and the soft-quota feature is 'currently not yet enabled by default'. You supply the disk/o...","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"gitea-forgejo-self-hosted-with-any-s3-lfs-backend","provider":"Gitea / Forgejo self-hosted with any S3 LFS backend","url":"https://forgejo.org/docs/latest/admin/advanced/quota/","category":"paas","free_tier":{"stated":"Unlimited by default: `quota.default.TOTAL = -1` means unlimited, and the soft-quota feature is 'currently not yet enabled by default'. You supply the disk/object store, so bytes = your infrastructure.","unit":"unlimited","metered_on":"stored-bytes","source_url":"https://forgejo.org/docs/latest/admin/advanced/quota/","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"No per-file cap unless you set one","source_url":"https://forgejo.org/docs/latest/admin/advanced/quota/","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://forgejo.org/docs/latest/admin/advanced/quota/","notes":"not stated"},"egress":{"terms":"Yours to pay for — unless the LFS backend is one of the free S3 endpoints (HF buckets, IA), in which case egress is the backend's and is free/CDN.","metered":false},"interface":["s3-compatible","rest","git"],"interface_detail":"git","tooling":"Gitea/Forgejo binaries (single Go binary), `git-lfs` client, S3-compatible LFS storage config (`[lfs] STORAGE_TYPE=minio`). REST API + Swagger for full automation. Gitea Cloud offers a 30-day trial, not free.","chaining":"The pattern that makes 500 GB+ real: self-host the forge on a free-tier VM (or any always-on box) and set LFS storage to a free S3 endpoint. The forge holds ~metadata only; the bytes never touch your disk. Gitea's `LFS_MAX_FILE_SIZE`/`LFS_START_SERVER` are config, not policy.","limits":[{"kind":"per-object-cap","value":"No per-file cap unless you set one","source":"https://forgejo.org/docs/latest/admin/advanced/quota/"}],"limits_note":"Soft-quota only: 'Forgejo checks the quota usage only before an action is executed, but it will allow a started action to complete' — so it can be overshot. No per-file cap unless you set one.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Quota feature is explicitly 'still in development' with 'little support for early prevention of operations in the UI'. Self-hosted means a dead VM = dead forge, but the LFS blobs survive in the object store.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://forgejo.org/docs/latest/admin/advanced/quota/","date":"2026-10-21","proved":"'quota.default.TOTAL is -1 (unlimited) by default'; soft-quota semantics quoted"},{"url":"https://forgejo.org/docs/latest/admin/setup/storage/","date":"2026-10-21","proved":"storage backend configuration for LFS/attachments"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","notes":"Unlimited by default: `quota.default.TOTAL = -1` means unlimited, and the soft-quota feature is 'currently not yet enabled by default'. You supply the disk/object store, so bytes = your infrastructure.","extras":{},"binding":"per-object-cap","binding_note":"the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"}],"unknown":[["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"],["$.retention.stated","not-extracted"]],"history":[],"drift":[]}