[email protected]

GitLab Alternative: GitLab, Forgejo and Gitea Compared

GitLab Alternative: GitLab, Forgejo and Gitea Compared

Editorial note: The information in this article was compiled to the best of our knowledge at the time of publication. Technical details, prices, versions, licensing terms, and external content may change. Please verify the information provided independently, particularly before making business-critical or security-related decisions. This article does not replace individual professional, legal, or tax advice.

Do you want to replace GitLab, or check whether Forgejo or Gitea is enough? We plan, migrate and operate Forgejo as a Git platform and offer the combination with CI, registry and SSO as a package for Git and CI. View Forgejo operations · Book an intro call (free and non-binding)

GitLab, Forgejo and Gitea cover the same core: Git repositories, code review, issue tracking and CI/CD on your own infrastructure. They differ in licence, governance, feature scope, server requirements and the effort of a move. This comparison summarises the differences with sources. Where the documentation does not support a statement, the text says so. As of: 5 November 2026.

Table of contents

In brief

The mapping is our assessment based on the differences documented below, not a vendor statement.

Requirement Natural choice (assessment) Reason
Built-in security scans, epics, code owners, push rules, group SAML GitLab According to the GitLab documentation these features are available in tiers from Free to Ultimate, with DAST and Dependency Scanning in Ultimate only
Small instance, CI close to GitHub Actions, non-profit governance, copyleft licence acceptable Forgejo GPL v3+ from v9.0, governed by Codeberg e.V., documentation lists no minimum requirements
Small instance, MIT licence, optional commercial edition with support Gitea MIT, Enterprise edition with SLA support

How do GitLab, Forgejo and Gitea differ at a glance?

Attribute GitLab Forgejo Gitea
Licence (as of November 2026) MIT (CE) and own EE licence GPL v3+ from v9.0 MIT
Governance GitLab Inc., publicly listed Codeberg e.V. (non-profit) According to the vendor page, leadership and commercial support by CommitGo; Gitea Ltd. was founded in 2022
Paid edition Premium, Ultimate The project lists none Gitea Enterprise
Current version 19.x 17.0.1 (LTS: 15.0.x) 28.3.0
CI/CD GitLab CI (.gitlab-ci.yml) Forgejo Actions Gitea Actions
Databases PostgreSQL SQLite, MySQL/MariaDB, PostgreSQL PostgreSQL, MySQL, MariaDB, SQLite, MSSQL
Resource guideline 8 vCPU / 16 GB Not found in the admin docs 2 cores / 1 GB for small teams

Which licence applies, and what costs money?

Product Licence Paid Source
GitLab CE (gitlab-foss repository) MIT Expat, documentation CC BY-SA 4.0 No LICENSE
GitLab EE (ee/ directory) GitLab Enterprise Edition License, with MIT exceptions Valid subscription needed for the production use the licence covers ee/LICENSE
Forgejo up to v8.0 MIT No Forgejo FAQ
Forgejo from v9.0 GPL v3+ (copyleft) No Forgejo FAQ, release v9.0
Gitea MIT Enterprise edition is commercial LICENSE, pricing

On the EE licence: the licence file allows copying and modifying for development and testing without a subscription. Production use requires agreeing to the GitLab Subscription Terms (or another usage agreement made with GitLab) and a valid subscription for the correct number of user seats. By the wording of the licence, copying, publishing, distributing, sublicensing and selling the software are prohibited, subject to the conditions stated there. Parts shipped with GitLab CE or served client-side to browsers as images, fonts and similar are under MIT Expat according to the licence. According to GitLab, the EE package can also be run with the Free features without a paid subscription. This is not legal advice.

On Forgejo: the v9.0 release post describes v9.0 as the first version under a copyleft licence and announces that more files will switch to GPL v3+ over time. The Swagger file stays MIT. We did not check how large the MIT share is today. The assumption "Forgejo is MIT like Gitea" holds only up to v8.0.

What does GitLab cost, and what does Gitea Enterprise add?

On its pricing page GitLab lists Premium at 29 US dollars per user and month with annual billing (as of November 2026) and Ultimate on request. According to the GitLab documentation, a self-managed subscription applies to the whole instance and all users get the same features. For Gitea Enterprise the vendor names on its product page: branch protection inheritance, dependency scanning, IP allowlist, mandatory 2FA, SAML 2.0 and audit log. The pricing page shows two amounts side by side, so we do not quote a price.

Which GitLab features sit in which tier?

The details come from the "Tier" header of each GitLab documentation page (as of November 2026). The tier headers of these pages name tiers (Free, Premium, Ultimate), not CE and EE; other parts of the documentation explicitly mark features as available in EE only. Whether every Free feature is part of the plain CE package is therefore not established.

Feature Tier according to documentation Documentation
CI/CD pipelines Free, Premium, Ultimate Pipelines
Container Registry Free and above Container Registry
Package Registry Free and above Package Registry
Pages Free and above Pages
Issue Boards Free and above (basic feature) Issue Boards
Push mirror Free and above Push mirror
Pull mirror Premium, Ultimate Pull mirror
Code Owners Premium, Ultimate Code Owners
Push Rules Premium, Ultimate Push Rules
Epics Premium, Ultimate Epics
LDAP (self-managed) Free and above LDAP
Group SAML SSO (GitLab.com) Premium, Ultimate Group SAML
SAST Free and above (basic scope) SAST
Secret Detection Free and above (basic scope) Secret Detection
Container Scanning Free and above (basic scope) Container Scanning
DAST Ultimate DAST
Dependency Scanning Ultimate Dependency Scanning

Who is behind each project?

Forgejo. The project states that it exists under the umbrella of the non-profit Codeberg e.V., that the domains are held by the association and that Forgejo has not registered any trademarks. Codeberg e.V. is an association registered in Berlin whose statutory goal, according to the FAQ, is to guarantee the openness and continued availability of free software. Security reports go to [email protected]. No paid edition is listed on the project pages we checked.

Gitea. On 30 October 2022 the maintainer Lunny wrote that Gitea Ltd. had been founded and that the domains and the "Gitea" trademark were transferred from him personally to the company. The logo remains community property and the owners group continues to vote. According to the vendor, Gitea offers the open-source edition under MIT, Gitea Cloud and Gitea Enterprise. The current vendor page names leadership and commercial support by CommitGo. How CommitGo and the Gitea Ltd. named in 2022 relate today is not stated in the sources we checked.

GitLab. GitLab Inc. is publicly listed (ticker GTLB, see the quarterly report).

The Forgejo page comparing itself to Gitea is the account of one of the two projects. It dates the split to October 2022 (soft fork) and early 2024 (hard fork) and claims that Gitea is controlled by a for-profit company, requires copyright assignment even for MIT-licensed code and gives advance information on security releases only to customers. These are statements by Forgejo about Gitea. On copyright assignment: the current Gitea contribution guideline states that submitting a pull request counts as agreement to the DCO and the MIT licence; it contains no explicit assignment of rights. What is confirmed on the Gitea pricing page is that enterprise customers receive "Priority security bug fix notifications". Whether these notifications are reserved exclusively for customers does not follow from that.

Which versions apply in November 2026?

Product Version Date Note Source
Forgejo 17.0 (current 17.0.1 of 26 Oct 2026) 15 Oct 2026 Supported until 28 Jan 2027 Release schedule
Forgejo 16.0 16 Jul 2026 Support ended on 29 Oct 2026 Release schedule
Forgejo 15.0 LTS (current 15.0.11 of 26 Oct 2026) 16 Apr 2026 Supported until 15 Jul 2027 Release schedule
Forgejo 18.0 planned 14 Jan 2027 Quarterly releases Release schedule
Gitea 28.3.0 1 Nov 2026 follows 28.2.0 (18 Oct 2026) GitHub releases
Gitea 28.0.0 29 Sep 2026 (GitHub release; blog post of 30 Sep 2026) follows 1.27.3 (29 Aug 2026) GitHub release, Gitea blog
GitLab 19.x 19.5.3 and 19.4.5 (patch releases, publication day not checked) Docs list 19.0 to 19.6 Release page, Patch 19.5.3

Since 28.0.0 Gitea no longer counts as 1.x. Sources that still call "Gitea 1.2x" the latest stable version are outdated. The enterprise support and release policy names rolling releases; we did not find a current LTS offering. Lunny's 2022 message mentions work on an LTS version at that time. According to the patch release page, GitLab publishes two regular patch releases per month (second and fourth Wednesday) plus critical patches as needed.

How do CI/CD and registries differ?

Area GitLab Forgejo Gitea
CI/CD GitLab CI with .gitlab-ci.yml and runners (Free and above) Forgejo Actions, workflows in .forgejo/workflows/, Forgejo Runner Gitea Actions, "compatible with GitHub Actions", Gitea Runner 5.0.0 (8 Oct 2026)
GitHub Actions syntax No, own syntax Partly Partly
Container and package registry Container Registry and Package Registry (Free and above) Packages including container, npm, Maven, PyPI, Cargo, Helm, Debian, RPM, NuGet More than 20 package types including container
Issue tracking Issues and boards (Free and above), epics (Premium) Issues, labels, projects, wiki Issues, labels, Kanban boards, milestones, time tracking, dependencies
Code review Merge requests, approvals, code owners (Premium) Pull requests, protected branches, AGit Pull requests, branch protection (inheritance in Enterprise)

On the limits of GitHub Actions compatibility, the Forgejo reference states that GitHub Actions and Forgejo Actions are not the same. Actions without a host resolve to data.forgejo.org by default. For pull_request events from forks, no secrets are available, the automatic token has read permissions only and OIDC is disabled. With pull_request_target, by contrast, the workflow runs with the privileges of the base repository, including secrets and a write token, and should not execute untrusted code from the pull request. The tool cache does not persist without a volume. The Gitea comparison page lists as unsupported, among others, jobs.<id>.environment (ignored), problem matchers and error annotations. GITEA_TOKEN cannot push to Gitea's own package registry. Test your own pipelines on Gitea or Forgejo before moving. If you come from GitHub Actions, the article GitHub Actions pricing change 2026 puts it in context.

What do Forgejo and Gitea lack compared with GitLab?

The statements rest on each project's documentation. "Not found" means we did not find the feature there, not that it is certainly absent.

Area Forgejo Gitea
Security scans (SAST, secret detection, container scanning) Not found in the docs Open source: not listed in the comparison table, dependency scanning in Enterprise
Pages Not found in the docs, Codeberg runs Codeberg Pages separately Third-party software according to the Gitea docs
SAML Not found in the admin docs In Enterprise, "unsupported" in the open-source table
Other SSO OAuth2/OIDC, LDAP, PAM, FreeIPA, OIDC group mapping LDAP, OAuth2
Federation ForgeFed/ActivityPub under development, experimental Not checked
Audit log Not checked Docs page "Audit Logging", in the core from 28.0.0 according to the release changelog

The Gitea table itself notes that it may be outdated. For SAML in Gitea there were pull requests (#25165, #29358); we could not conclusively verify their history.

How much server does each platform need?

Aspect GitLab Forgejo Gitea
CPU and RAM 8 vCPU and 16 GB baseline, 8 GB in memory-constrained environments No minimums found in the admin docs 2 cores and 1 GB "typically sufficient for small teams/projects"
Storage App node 40 GB, Gitaly at least as large as all repositories, PostgreSQL usually at least 5 to 10 GB according to the detail text, at least 12 GB for Ultimate Not found in the pages checked Not found in the pages checked
Database PostgreSQL 17 to 18 (for 19.x), Redis 7.0+ or Valkey 7.2 SQLite ("apparently" good enough for at least 10 users according to the docs), MySQL/MariaDB, PostgreSQL PostgreSQL 12+, MySQL 8.0+, MariaDB 10.4+, SQLite, MSSQL 2012 SP4+
Installation Linux package, Docker, Helm chart, GitLab Environment Toolkit Binary, Docker (also rootless), third-party packages Binary, package, source, Docker (also rootless), Podman Quadlet, Kubernetes

Sources: GitLab requirements and installation methods, Forgejo installation and binary installation, Gitea documentation and database preparation. According to the installation page, GitLab recommends Docker and Helm for customers with 500 or more seats. The Gitea docs warn that SQLite scales poorly. Any figure for Forgejo would have come from field reports rather than vendor documentation, so it is not in the table. The guideline values have different reference sizes (single-node baseline for GitLab, small team for Gitea) and are not a capacity comparison under equal load. Our assessment: Forgejo and Gitea share a Go base, and we have no measured comparison of their resource needs. A guideline value is documented only for Gitea.

How secure is operation?

The numbers are not comparable and do not amount to a security ranking. Gitea publishes vulnerabilities as public GitHub advisories, while GitLab and Forgejo use other processes. A higher count therefore does not mean a product is less secure.

Project Finding (5 May to 5 November 2026) Source
GitLab Critical patch on 21 Oct 2026 (19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10, 18.11.13): integer overflow in the regular expression compiler, CVE-2026-110264. The fix is a patch to Ruby, not to GitLab code. Anyone running their own Ruby runtime also needs Ruby 3.3.13, 3.4.12 or 4.0.9. Two further High-severity reports (OmniAuth/LDAP auto-linking, cache poisoning in OAuth/OIDC discovery) Patch release
Gitea The list of published advisories contains entries with severities from low to critical; we give no total because it could not be verified reproducibly. Examples: CVE-2026-104632 (code execution on runners when a maintainer cancels and re-runs a fork run, bypassing approval), CVE-2026-103059 (authentication bypass in the built-in SSH server, with SQLite, the built-in SSH server enabled and an RSA key), CVE-2026-73802 (container escape through container.options in act_runner despite privileged mode being disabled), CVE-2026-20896 (Docker image: REVERSE_PROXY_TRUSTED_PROXIES = * allows user impersonation when reverse proxy authentication is enabled and HTTP access bypassing the proxy is possible) GitHub advisories
Forgejo Release 17.0.1 (26 Oct 2026) lists security fixes in its release notes, among others for pull_request_review actions with an unvalidated commit_id and for NuGet API keys that ignored token scopes. We give no details for release 17.0.0. We could not retrieve a central CVE list, and the release notes could not be retrieved again during independent verification Release notes 17.0.1

The entries belong to different classes of flaw (Ruby regexp, SSH authentication, reverse proxy authentication, NuGet token scopes, CI permissions). One class concerns CI runs from forks or reviews that obtain permissions or secrets: for Gitea CVE-2026-118386 (1 Nov 2026, severity High, affecting 1.19.0 to 28.2.0, fixed in 28.3.0) with a manipulated review commit_id, for Forgejo the pull_request_review entry above. Whether both were affected in the same way is not shown by the sources. Anyone running Forgejo or Gitea Actions with self-hosted runners should isolate runners, run fork pull requests without secrets and apply updates promptly. For GitLab, the Ruby dependency belongs in planning alongside the patch cadence.

How do you migrate from GitLab to Forgejo or Gitea?

Forgejo offers GitLab as a source under "New Migration". According to the Codeberg documentation, not only repository data but also metadata such as issues, labels, wiki, releases and milestones are imported. An access token for the source is required, and the "Git" option imports code only. The GitLab importer in the Gitea source code reads repository info, topics, milestones, labels, releases, issues, comments, merge requests and reviews (from MR approvals). The GitLab importer in the Forgejo source code likewise reads merge requests and reviews (from approvals, without review comments). For comment reactions, the Gitea code notes an open task. The Gitea migration page does not describe the GitLab scope. The importer is present in the Gitea repository, but we did not check its availability in the 28.x interface.

Content Transfer
Repository, topics, milestones, labels, releases Present in the importer
Issues and comments, merge requests, reviews from approvals Present in the importer
CI configuration .gitlab-ci.yml The file arrives as repository content but is not translated into workflows (.forgejo/workflows/ must be rewritten), no converter is documented
CI variables, runners, pipeline history Not present in the importer
Container and package registry contents Not present in the importer
Group and permission structure, boards, epics, protected branch rules Not present in the importer
Webhooks, deploy keys Not present in the importer

The table describes what the Gitea importer code covers. That something is missing from the importer is derived from absent functions, not from an explicit sentence in the documentation, and the Forgejo code was not cross-checked. One field report describes, as a single case, issues arriving without comments because the tool used did not import comments. After a test run, spot-check what arrived.

Our assessment of a staged approach:

  1. Inventory: record repositories, groups, access models, webhooks, registry contents and CI dependencies.
  2. Test run: import a few repositories with the importer and compare metadata by sampling.
  3. Rebuild pipelines: translate .gitlab-ci.yml into workflows, recreate variables and secrets, set up runners.
  4. Switch over: change access, webhooks and deploy keys, and keep a mirror or fallback for critical repositories.
  5. Retire the old system: only after checking backups and restore.

From Gitea to Forgejo, a direct upgrade is possible according to the upgrade guide only up to Gitea version 1.22. A direct upgrade from Gitea 28.x is not documented as supported, and a repository migration remains as the alternative.

When should you stay with GitLab?

GitLab is the natural choice if you need built-in security scans (basic scans for SAST, secret detection and container scanning in Free, DAST and dependency scanning in Ultimate), epics, code owners, push rules or group SAML, and a subscription is planned. If many pipelines, registry contents and permission structures would have to be migrated, staying can also be more economical, because the importer does not cover these parts. The server requirements are higher, but the features are documented in one place. This is an assessment, not a vendor statement.

Forgejo or Gitea are the natural choice if a lean platform with repositories, review, issue tracking, actions and package registries is enough. This depends on requirements and is an assessment, not a suitability guarantee. In our assessment, the decision between the two mostly depends on licence (GPL v3+ versus MIT), governance (association versus company with an enterprise edition) and whether SAML or commercial support is needed.

Status and methodology

As of: 5 November 2026. The basis is the licence files, documentation, release pages and security notices of the three projects, retrieved on 5 November 2026, each linked in the text. Statements about a project come from its own sources. Statements on "Forgejo vs. Gitea" pages are one party's account and are marked as such in the text. "Not found" means we did not find the feature in the documentation cited, not evidence that it is absent. We mark our own assessments as such. The security count covers 5 May to 5 November 2026 and is not a quality ranking. Open points: minimum resources for Forgejo, SAML and Pages in Forgejo, the publication days of the GitLab patch releases 19.5.3 and 19.4.5, and the Forgejo code for the GitLab import. Later changes to licences, versions or features are not included.

Our approach at WZ-IT

For Forgejo we plan, migrate and operate the platform including database, storage, Actions runners, identity integration, backups and service levels. When migrating from GitHub, GitLab or Gitea, we inventory repositories, organisations, access models, issues, pull requests, releases, packages, webhooks and CI dependencies and plan the test run and cutover from that. Which metadata can be transferred automatically depends on the source system and its API.

The package for Git, CI and registry combines Forgejo with Woodpecker CI, Harbor and Vaultwarden, plus an identity service (Keycloak or Authentik) and an isolated runner. Dynamic secrets for pipelines and build counts per hour are not part of the package. For existing GitLab instances, our offer is described under GitLab managed hosting and operations, and for Gitea there is a page in the app catalogue. Monitoring runs 24/7, and the response to P1 incidents follows the service level. More on ongoing operations: Managed operations and CVE monitoring.

Weighing GitLab, Forgejo and Gitea for your team? We discuss requirements, pipelines and the scope of a migration with you. View Forgejo operations · View the Git and CI package · Book an intro call (free and non-binding)

Further guides

Sources

Timo Wevelsiep

Written by

Timo Wevelsiep

Co-Founder & CEO

Co-Founder of WZ-IT. Specialized in cloud infrastructure, open-source platforms and managed services for SMEs and enterprise clients worldwide.

Frequently Asked Questions

Answers to important questions about this topic

Companies worldwide trust WZ-IT

  • Stadtwerke Brühl
  • DGHO e.V.
  • solarwerkstatt berlin
  • Krüger Dirndl
  • ABCO Water Systems
  • Golem.de
  • EVADXB
  • nextGYM
  • AInergy
  • ml&s
  • Odiseo Solutions
  • Annota
  • ARGE
  • SweetConnect GmbH
  • Aphy AG
  • CORGOS
  • Rekorder
  • SolidProof
  • Yonju
  • Keymate
  • Paritel
  • Mr. Clipart
  • Millenium
  • Negosh
  • Führerscheinmacher
  • BTI
  • Deutsche Gesellschaft für Datenschutz
Read client reviews

Enquiry

Choose a Git platform or move away from GitLab

We operate GitLab, Forgejo and Gitea in Germany and sort out feature scope, licence and migration path for the decision.

  • Straight with Timo and Robin - no sales team, no pitch
  • A professional assessment of your situation
  • Concrete next steps for infrastructure, software or AI

The conversation is free and non-binding.

WZ-IT's advice on our Azure migration was technically sound and completely non-binding right from the intro call - we took away a great deal.
Jakob ÖschlbergerInno7 GmbH
Timo and Robin, founders of WZ-IT

What are you planning?

WZ-IT's advice on our Azure migration was technically sound and completely non-binding right from the intro call - we took away a great deal.
Jakob ÖschlbergerInno7 GmbH