# Internal Forge 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** | # Comparison ## 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**](https://about.gitlab.com/pricing/?deployment=self-managed-deployment) | [**info**](https://about.gitea.com/pricing/) | [**info**](https://liberapay.com/forgejo) | ## 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](https://docs.gitlab.com/user/group/roadmap/) | [simple kanban](https://forum.gitea.com/t/gantt-diagrams-for-issues/788/3) | [simple kanban](https://forgejo.org/docs/next/user/project/) | | 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](https://forum.gitea.com/t/how-do-i-enable-ssh-on-a-gitea-self-hosted-instance/10044/3) and [here](https://forum.gitea.com/t/how-to-set-ssh-to-alow-users-with-gite-account-to-clone-via-ssh/2297/5)) - 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.