↓ Skip to main content
  1. Posts/
  2. Self-Hosting/

GitLab, Gitea, and Forgejo. A Comparison for Grown-Ups - What Actually Fits Your Homelab

·1429 words·7 mins· loading · loading · ·
Stilicho2011
Author
Stilicho2011
Writing about homelab, self-hosting, automation and open-source solutions
Table of Contents
Self-Hosting - This article is part of a series.
Part : This Article

Under my video on setting up Forgejo and Komodo from scratch, someone left a comment along these lines: I don’t know what I’m talking about, you should only use GitLab, everything else is wrong, will break, who even knows who builds this stuff, looks cobbled together, and so on. Judging by the extremely narrow worldview and the obvious lack of understanding of what homelabbing even is, the commenter was convinced their own opinion was simply correct, and that picking any git server other than GitLab was just plain dumb.

The problem with a claim like that is simple - nothing backs it up. So below is a comparison of all three products by their actual properties: licensing, hardware requirements, who runs each project and how, and what each one can really do. After that, everyone can decide for themselves who’s “uneducated” here - someone who picked a tool to fit their task, or someone going off someone else’s opinion in the comments.

Three products, three different audiences
#

  • GitLab - an enterprise-grade platform. Community Edition (CE) is free and open source, Enterprise Edition (EE) is paid, with proprietary parts. It historically bet on being “everything in one place”: repos, CI/CD, security scanning, project management.
  • Gitea - a lightweight self-hosted git server written in Go, built to be a fast, low-overhead alternative to GitHub/GitLab. A fork of the older Gogs project, around since 2016.
  • Forgejo - a fork of Gitea itself, created at the end of 2022 after the domains and trademark for Gitea were handed over to a for-profit company, Gitea Ltd, without community sign-off. The community decided the fork’s home would be the nonprofit Codeberg e.V., and since early 2024, Forgejo hasn’t been a “soft fork” anymore - it’s its own project, deliberately diverging from Gitea.

Comparison table
#

CriteriaGitLab CEGiteaForgejo
LicenseMIT (CE), EE - proprietary/source-availableMIT, but with a mandatory CLA on new codeMIT, no CLA
Governed byGitLab Inc. (for-profit)Gitea Ltd (for-profit)Codeberg e.V. (nonprofit)
Minimum hardware8 vCPU / 16 GB RAM (official baseline for a single node)2 CPU / 1 GB RAM for a small team, runs fine even on a Raspberry PiComparable to Gitea - around 1 GB RAM to get started
CI/CDBuilt-in, the most mature of the threeGitHub Actions-compatible syntax, added relatively recentlyForgejo Actions, same syntax as Gitea’s
Federation (ActivityPub)NoneNo work, nothing announcedExperimental: federated repo starring and ActivityPub HTTP signatures already work; full issue/PR federation is in progress, funded by an NLnet grant
Main use caseLarge teams, enterprise requirements, built-in security scanningSimple self-hosted git with minimal overheadSame as Gitea, but with an emphasis on open governance and transparency

GitLab: powerful, but expensive in resources
#

GitLab CE really is a free, open platform (MIT license), and that’s not a marketing trick that falls apart once you look closer - only the Enterprise Edition code is closed. But all that power comes with a price: GitLab’s own documentation names 8 vCPU and 16 GB of RAM as the baseline for a single-node install, and even in “memory-constrained” mode, it doesn’t go below 8 GB. In practice, a fresh install with a single project will happily eat several gigabytes of RAM at idle, before any real load even shows up.

For a company running a dedicated server for GitLab, that’s a fair price to pay for built-in CI/CD, security scanning, and project management in one box. For a homelab, where GitLab is competing for resources with a dozen other services on the same box, that’s a real constraint - not because GitLab is “bad,” but because it’s built for an entirely different scale of problem. A very different one. Completely.

Gitea: light, but with some governance baggage
#

Gitea really is a solid example of a lightweight git server: 2 cores and 1 GB of RAM is enough for a small team, and the project officially runs even on a Raspberry Pi. The core is MIT-licensed, which is open on paper.

But it’s exactly the governance side of things that sparked the conflict in 2022 that led to Forgejo existing at all (which, to be fair, is pretty much how it always goes in the Linux crowd). Gitea got itself an owner - a for-profit entity, Gitea Ltd, which took over the domain and trademark without public community sign-off, and the project started drifting toward an open-core model: some new features are built under non-free licenses, and contributors now have to sign a CLA (Contributor License Agreement) even for code that ultimately ships under MIT. That doesn’t make Gitea technically “bad” - it’s still actively developed and still works fine - the issue is more about how the project is governed, and not everyone in the community is on board with the overt commercialization.

Forgejo: the same code, a different governance model
#

Forgejo inherited Gitea’s lightweight footprint (same Go stack, similar hardware needs - roughly a gigabyte of RAM to get started), but settled the governance question differently. The project’s steward is the nonprofit Codeberg e.V., no CLA is required to contribute, and the whole development cycle happens on Forgejo’s own infrastructure and Forgejo Actions, not on someone else’s GitHub.

As of early 2024, it’s a full hard fork - the codebase keeps diverging from Gitea further and further, not just syncing up with minor tweaks. Among the practical differences the project claims: end-to-end and upgrade tests (which, per the project itself, Gitea doesn’t have equivalent coverage for), advance notice of security releases for everyone rather than just paying customers, and federation over the ForgeFed protocol on top of ActivityPub - still experimental (federated repo starring and HTTP signatures on ActivityPub endpoints already work, full issue/PR federation is in progress funded by an NLnet grant), while Gitea still isn’t doing anything on that front.

I’ll be upfront: some of this comparison comes from Forgejo’s own page, so it’s not an independent source. And honestly, I haven’t done a full independent investigation myself. But the fact that the fork exists specifically because of a change in how Gitea is governed - that part is just history, not spin.

About that “it’ll break” claim
#

This is where some random commenter’s take parts ways with actual reality. All three products are production-grade systems with years of history, active development, and real large-scale deployments behind them. GitLab runs at thousands of companies. Gitea is the backbone of plenty of self-hosted git platforms. Forgejo, even though it’s younger as its own project, is the same battle-tested Gitea code under new management - not a startup built from zero.

“It’ll break” isn’t a technical argument about any specific product - it’s a generic line for trolling (at least that’s how I read it), and it applies equally poorly to all three of them. If something does break in a real-world install, it’s almost always a config mistake or a mismatch between available resources and the job at hand (see the GitLab section above), not some inherent unreliability in the software.

So what should you pick
#

  • GitLab if you already use it at your day job on a large team and want to practice on the same stack, or if you genuinely need the built-in enterprise features (advanced project management, security dashboards) - and have the hardware to back it up.
  • Gitea fits if you want the simplest, most time-tested option, and the governance/CLA questions don’t matter much to you. On top of that, there’s a huge amount of videos and write-ups about Gitea already out there.
  • Forgejo if governance transparency matters to you, you don’t want to sign a CLA to contribute, and you like that the project builds itself on its own infrastructure instead of GitHub’s. This is what I actually run - I covered the install and setup here, and a real working pipeline built on Forgejo and Komodo here. Spoiler: the plan is to keep walking down Forgejo’s crooked “wrong” little path - documenting every step on video, obviously.

Bottom line
#

Picking a git server for a homelab is a question of matching resources and priorities to the actual job. GitLab is objectively more demanding on hardware. Gitea and Forgejo are technically close, and the real difference between them is who governs the project and how - not which one “breaks” and which one doesn’t. If you’ve got solid engineering reasons for any of the three, great, let’s talk about them. But the “everything else is for people who don’t know better” line isn’t an argument.

Self-Hosting - This article is part of a series.
Part : This Article

Related