2026-03-04 11:28:11 +01:00
2026-03-04 11:28:11 +01:00
2026-03-04 15:18:20 +01:00

Internal Forge Comparison

This repository lists the pros and cons of three popular open-source Git forges (GitLab CE, Gitea, and Forgejo) based on a side-by-side comparison in a self-hosted test lab on a single VPS (github.com/matteodelucchi/gitforgelab). The goal is to provide a practical reference for teams and organizations evaluating which Git forge best fits their needs, based on real-world usage and feature comparisons.

Why This Exists

Choosing the right Git forge for a team or company is not trivial. Each platform differs in resource usage, feature set, administration complexity, and SSO integration. This lab deploys all three behind a shared reverse proxy with centralised OIDC authentication so they can be evaluated under identical conditions (same hardware, same identity provider, same workflow).

The entire infrastructure is defined as code (Terraform + Ansible + Docker Compose) and can be torn down and recreated in minutes.

Limitations

This is a test lab, not a production deployment.

  • Runs on a single VPS. There is no high-availability, redundancy, or horizontal scaling.
  • SSH Git access is disabled; repositories are accessed over HTTPS only.
  • All services share one PostgreSQL and one Redis instance to save resources.
  • GitLab is memory-tuned aggressively (2 Puma workers, 5 Sidekiq concurrency) and will be slow under real workloads.
  • No backup strategy is included.

Comparison

Quick decision guide

If we want… Choose
A complete DevOps platform with integrated CI/CD, package registry, security scanning, and enterprise features GitLab
A lightweight, easy-to-operate Git server with minimal resource usage Gitea
A community-driven forge similar to Gitea but with built-in CI (Forgejo Actions) and future federation support Forgejo

A more detailed comparison that covers forgejo specific features and limitations is available in the forgejo.org/compare.

Pricing

Feature GitLab Gitea Forgejo
Free tier
Paid tier (per user/month) premium: 29$
ultimate: on request
enterprise: 19$ (donation-based)
Information on pricing info info info

Core Git Features

Feature GitLab Gitea Forgejo
Git repositories
Git LFS support
Git tags for releases
Protected branches
Repository mirroring
Webhooks

Collaboration and Project Management

Feature GitLab Gitea Forgejo
Issues
Pull / merge requests
Pull request reviewer assignment
Pull request inline comments
Wiki (per repository)
Snippets / gists ⚠️ limited ⚠️ limited
Project management free: simple kanban
premium: roadmap
simple kanban simple kanban
Organization / group hierarchy ⚠️ simpler model ⚠️ simpler model
Code search (global) ⚠️ limited ⚠️ limited
Repository mirroring (push/pull)

CI/CD and Automation

Feature GitLab Gitea Forgejo
Built-in CI/CD built-in Gitlab CI/CD external CI (woodpecker/Drone) Forgejo Actions (Github-Actions compatible)
Automated workflows ⚠️ external CI required
Workflow triggers ⚠️ depends on CI integration
External CI integration

Artifacts & Registries

Feature GitLab Gitea Forgejo
Package registry ⚠️ limited ecosystem support
Container registry ⚠️ plugin / external registry ⚠️ evolving support

Authentication and Access Control

Feature GitLab Gitea Forgejo
Access control
LDAP / Active Directory
SAML / enterprise SSO ⚠️ enterprise tier not supported not supported
Federation between instances not supported not supported ⚠️ planned (ForgeFed)

Operations / Self-Hosting

Feature GitLab Gitea Forgejo
Resource footprint heavy (many services) light light
Deployment complexity complex simple simple

Notes on the test project setup:

Gitea

  • SSH is disabled by default, so we use HTTPS to clone the repository.
    • it can be enabled in the Gitea settings if needed (see here and here)
  • HTTPS: works, but requires the user to set a password manually in the profile first. That's unexpected since it should be inherited by authentik. Probably a misconfiguration from there.

Forgejo

  • SSH is disabled by default, so we use HTTPS to clone the repository. Same as with Gitea.
  • HTTPS: Same as with Gitea.

Gitlab

  • SSH is active by default. But the port is wrongly configured and probably already used by the host...
  • HTTPS: works well.
Description
No description provided
Readme 39 KiB
Languages
Shell 100%