Forgejo Runs Your Code Forge on 100 MB of RAM and Nobody Owns It
Forgejo shipped version 16.0 on July 16, 2026, three and a half years after the community fork from Gitea. A single 100 MB Go binary replaces both GitHub and GitLab on the cheapest VPS money can buy, with GitHub Actions-compatible CI/CD and governance locked under a non-profit foundation.
On July 16, 2026, Forgejo shipped version 16.0. Four days earlier, Codeberg — the community forge running on Forgejo — crossed 120,000 repositories. Three and a half years after forking Gitea in October 2022 — triggered by a hostile corporate takeover that transferred the domain and trademark without community consent — the verdict is in: Forgejo does everything GitHub does for teams of 2 to 20 developers, runs on 100 MB of RAM, and answers to nobody’s quarterly earnings call.
It’s the only lightweight forge with governance locked under a non-profit. If your code belongs on your own hardware, here’s why Forgejo is the short path.
The Fork That Changed Everything
In October 2022, the Gitea domain and trademark were transferred to a for-profit company without community knowledge or approval. An open letter was written. The transfer stood. The community response was to create Forgejo under Codeberg e.V., a German non-profit, designed from day one to keep governance out of any single company’s hands.
For about a year, Forgejo operated as a soft fork, tracking upstream Gitea commits the way LineageOS tracks Android. In early 2024, the project announced a hard fork*: the codebases diverge, upstream commits are no longer auto-merged, and cherry-picks are selective. Version 1.21 was the last release that guaranteed migration compatibility between the two projects. Since then, the technical choices and roadmaps have been entirely independent.
The differences are structural, not cosmetic. Gitea Ltd requires copyright assignment for all contributions and restricts early security disclosure to paying customers. Forgejo requires no copyright assignment, notifies trusted parties via encrypted channels regardless of payment status, and publishes security announcements on an entirely public repository. Radical transparency isn’t a marketing slide here — it’s encoded into the project’s constitution under Codeberg’s non-profit charter.
One Binary, One Server, Zero Friction
Forgejo ships as a single Go binary under 100 MB. No runtime, no complex system dependencies, no mandatory container orchestration. Three official deployment paths:
- Binary: download,
chmod +x, run. Five minutes from zero to a working instance on a fresh machine. - Docker: a single image,
docker compose up -d, and the web UI is live on port 3000. - Kubernetes: a community-maintained Helm chart for multi-node deployments.
Database backends are your choice: SQLite for personal instances or small teams (zero maintenance overhead), PostgreSQL or MySQL for scaling up. Git storage lives on the local filesystem, with S3 and S3-compatible object storage support for releases and packages.
The reference docker-compose fits in thirty lines:
version: "3"
services:
server:
image: codeberg.org/forgejo/forgejo:16.0
container_name: forgejo
environment:
- FORGEJO__database__DB_TYPE=sqlite3
restart: always
volumes:
- ./forgejo/data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000" Two notes that save hours of troubleshooting. First, never expose port 3000 directly to the internet: put a reverse proxy (Nginx, Caddy, Traefik) with Let’s Encrypt in front of it. The instance configuration wizard runs on first visit over the web UI, and the admin account is created during that session — an open port at that stage is an open invitation to compromise. Second, Forgejo 16.0 changed the default behavior of REVERSE_PROXY_TRUSTED_PROXIES in container images: the previous default of * has been removed. If you rely on reverse proxy authentication, you must explicitly declare your trusted proxy address ranges before upgrading.
What Forgejo Does, and What It Doesn’t
The feature set covers a team’s entire daily development loop:
- Git repositories with branch management, tags, forks, and pull requests
- Code review with multi-line comments (new in 16.0), change suggestions, and approvals
- Issue tracking with labels, milestones, assignees, and templates
- CI/CD via Forgejo Actions, syntax-compatible with GitHub Actions workflows — your
.github/workflows/*.ymlfiles migrate to.forgejo/workflows/with a path change, not a rewrite - Integrated package registry: containers, npm, PyPI, Maven, NuGet, RubyGems
- Per-repo wiki, signed release artifacts, webhooks, and SSH integration
What Forgejo does not do, and what GitLab does: built-in SAST/DAST scanning, dependency vulnerability analysis, compliance management, and nested groups. These live in GitLab Ultimate, the paid tier. For a team already running dedicated tools (SonarQube, Trivy, Snyk), their absence in Forgejo isn’t a gap — it’s fewer things to maintain on one box.
ActivityPub federation deserves a dedicated note. The project is actively working on it, with public monthly reports, and federated stars shipped as the first building block. The end goal is allowing a user on one Forgejo instance to open an issue or follow a repository on another, with no centralized account required. It’s not a buying argument today — the work is long and the concrete use cases are still sparse — but it’s proof the project is investing in a decentralized architecture where Gitea has no federated roadmap and GitHub has no commercial mandate to build one.
The Table That Settles the Argument
The number that decides it for most teams: a $6/month VPS (1 GB RAM, 1 vCPU) runs Forgejo comfortably for a 2–10 person team with SQLite. The same VPS cannot launch GitLab CE — it needs 8 GB of RAM for a smooth experience with active CI/CD, pushing you straight into $40–80/month territory. Annualized, that’s $400–$900 per year you’re not spending. For a small team or a solo developer, that’s the budget for a dedicated NUC, a NAS, or subscriptions to three other self-hosted services.
Verdict
For a new deployment in 2026, start with Forgejo. It does everything Gitea does, with the same memory footprint and the same GitHub Actions workflow compatibility, but its community governance under Codeberg e.V. structurally protects it from a commercial pivot. The day Gitea Ltd decides to gate a feature behind a paid tier — and the history of open-core projects says that day comes — Forgejo users won’t be affected.
Stay on Gitea if your instance is already running and you have no reason to migrate. The migration path isn’t smooth from post-1.21 versions, and the two projects remain functionally close. Spend your energy elsewhere.
Reach for GitLab CE only if you have 30+ developers and a demonstrable need for integrated SAST/DAST. At that team size, the VPS cost is noise next to payroll, and GitLab’s vertical integration (registry, pipelines, security, compliance) justifies the memory footprint. For everything else, Forgejo is enough.
Your code, your server, your rules. All for the price of a monthly coffee.
References
- Forgejo — Official site
- Forgejo v16.0 release notes, July 16, 2026
- Forgejo — Comparison with other forges
- Forgejo — Comparison with Gitea
- Forgejo — Installation documentation
- SaaSCompared — Forgejo vs Gitea vs GitLab in 2026, June 19, 2026
- StackFreeks — Forgejo vs Gitea vs GitLab CE 2026, July 2026
- Noted — Forgejo: Powerful Self-Hosted Git Service
- Codeberg — Forgejo repository