# Forgejo

> forgejo.org | CI runners, Storage; 2 records: free tier, limits, identity cost and evidence.

HTML https://fshy.ajam.dev/p/forgejo/ | JSON https://fshy.ajam.dev/api/v1/entity/forgejo.json | how to read a record: https://fshy.ajam.dev/llms-full.txt

## Forgejo and Gitea Actions (self-hosted)

- `ci-cd-runners/forgejo-gitea-actions` | self-hosted, last resort | verdict qualifies | evidence documented | binding none | category CI software
- needs card no, phone no, ID no, institution no | verified 2026-11-04T06:00:42.535Z (live) | stale on 2026-12-05
- url https://forgejo.org/docs/latest/user/actions/
- free tier: MIT for Gitea and GPL for Forgejo, with a GitHub-Actions-compatible workflow syntax; unlimited on your own runners | unit: unlimited | metered on: none | read on: 2026-10-22 | source: [1]
- per-object cap: no cap from the software; the runner host is the ceiling
- retention: whatever the runner host retains | source: [1]
- egress: whatever the runner host charges | metered: no | source: [1]
- identity: anonymous | detail: the software needs no account
- interface: git, cli
- limits:
  - per-object-cap: no cap from the software; a documented subset of GitHub Actions is supported and the rest fails at parse time [1]
- interface detail: a .forgejo/workflows or .gitea/workflows YAML; the act runner; a compatible subset of GitHub Actions
- tooling: the forgejo or act runner binary; docker or a host backend
- composes with: Actions syntax without GitHub, which lets a workflow move between a free hosted runner and your own machine without a rewrite
- reliability: compatibility with GitHub Actions is a documented subset, so a workflow that runs on GitHub may need edits
- notes: The compatibility is the value and the subset is the cost. A workflow that depends on a GitHub-only action does not run.
- evidence note: the Forgejo Actions user guide was read; Codeberg's hosted instance runs the same software.
- self hosted: yes
- evidence:
  - [1] 2026-10-22: Forgejo Actions is GitHub-Actions-compatible with documented differences; runners are user-provided
  - [2] 2026-10-22: Codeberg's hosted runners use ghcr.io/catthehacker/ubuntu:act-latest to provide a compatibility level with GitHub Actions, and Docker-in-Docker is not officially supported
  - [1] 2026-11-04: Forgejo Actions is not identical to GitHub Actions, so a workflow may need edits | capture: sha256:8c8a779c1a4e82b1679b0238872cb7c0a41dee2aa0046ff47932817138faf289 | quote: However, GitHub Actions and Forgejo Actions are not the same and things might not work right away.
- sources:
  - [1] https://forgejo.org/docs/latest/user/actions/
  - [2] https://codeberg.org/actions/meta

## Gitea / Forgejo self-hosted with any S3 LFS backend

- `storage/gitea-forgejo-self-hosted-with-any-s3-lfs-backend` | self-hosted, last resort | verdict qualifies-with-caveat | evidence reported | binding per-object-cap | category paas
- identity a placeholder: card and phone unknown | verified 2026-10-21 (inherited) | stale on 2026-11-05
- url https://forgejo.org/docs/latest/admin/advanced/quota/
- free tier: 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 | read on: 2026-10-21 | source: [1]
- per-object cap: No per-file cap unless you set one | source: [1] | note: not stated
- retention: not stated | source: [1] | note: not stated
- egress: 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: no
- identity: email
- interface: s3-compatible, rest, git
- limits:
  - per-object-cap (binding): No per-file cap unless you set one [1]
- 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.
- 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.
- composes with: 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.
- reliability: 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.
- notes: the same as the free tier
- self hosted: yes
- evidence:
  - [1] 2026-10-21: 'quota.default.TOTAL is -1 (unlimited) by default'; soft-quota semantics quoted
  - [2] 2026-10-21: storage backend configuration for LFS/attachments
- sources:
  - [1] https://forgejo.org/docs/latest/admin/advanced/quota/
  - [2] https://forgejo.org/docs/latest/admin/setup/storage/
