Code hosting choices shape privacy, compliance and developer velocity. The decision between Codeberg vs GitHub requires a precise assessment of feature parity, migration cost, enterprise controls and CI/CD continuity. This guide consolidates 2025–2026 public data, measurable benchmarks, a reproducible migration playbook with commands and practical mapping of GitHub Actions to alternatives used with Codeberg and Forgejo. The goal is to enable technical leaders in England and EU-based teams to decide with quantifiable trade-offs and an executable rollback strategy.
Why evaluate Codeberg vs GitHub in 2026
Code hosting selection now intersects with data sovereignty, supply-chain security and developer ergonomics. GitHub remains the largest social coding platform with extensive marketplace integrations and advanced features such as code scanning, Dependabot and GitHub Actions. See GitHub Octoverse for platform metrics and ecosystem reach.
Codeberg is a European alternative built on Gitea/Forgejo principles that emphasizes privacy and a lightweight, community-driven service. Review Codeberg’s project pages at Codeberg. For security and cloud sovereignty context, consult ENISA and EU GDPR guidance at gdpr.eu.
Key 2025–2026 considerations:
- Privacy & GDPR: Codeberg stores data within EU jurisdictions and publishes policies oriented to European law. GitHub stores data across global infrastructure with region controls for GitHub Enterprise Cloud.
- Ecosystem & Marketplace: GitHub offers a mature Marketplace; Codeberg relies on integrations, self-hosted actions and community tooling.
- Operational model: Codeberg supports hosted accounts and encourages self-hosting with Forgejo/Gitea; GitHub offers SaaS and GitHub Enterprise Server.
Feature parity matrix: Codeberg vs GitHub
The matrix below highlights core developer and enterprise features. Values reflect platform characteristics in 2025–2026; some items depend on self-hosted deployments.
| Feature |
GitHub (SaaS / Enterprise) |
Codeberg (hosted) / Forgejo (self-hosted) |
| Repository hosting (git) |
✅ Global scale, large file support via Git LFS |
✅ Lightweight git hosting, Git LFS supported on request |
| Issue tracker |
✅ Advanced project boards, templates |
✅ Basic to moderate issue tracking, labels, milestones |
| Pull requests / code review |
✅ Review requests, protected branches |
✅ Pull request model supported, fewer automation hooks |
| Code search (fast) |
✅ Fast global code search |
⚠️ Limited full-text search in hosted service; self-hosting allows indexing tuning |
| CI/CD (native) |
✅ GitHub Actions (rich marketplace, hosted runners) |
⚠️ No native Actions; relies on external CI, self-hosted runners or Forgejo integrations |
| Dependabot / automated updates |
✅ Dependabot alerts and PRs |
⚠️ No built-in Dependabot; external tools needed (Renovate) |
| Security scanning (SCA) |
✅ CodeQL, secret scanning |
⚠️ Limited native scanning; integrate third-party scanners |
| SSO / SAML / SCIM |
✅ GitHub Enterprise supports SAML, SCIM |
⚠️ Hosted Codeberg: limited SSO; self-hosted Forgejo: configurable SAML via plugins |
| Permissions & audit logs |
✅ Enterprise-grade granular controls and audit logs |
⚠️ Basic permission model; audit features depend on self-hosted extensions |
| Marketplace & integrations |
✅ Extensive marketplace |
⚠️ Smaller ecosystem; common integrations via webhooks and CI adapters |
| Cost model |
Paid tiers, enterprise licensing |
Freemium for hosted; self-hosting cost = infra + ops |
Analysis notes
- For teams requiring native CI with concurrency, GitHub Actions remains superior for out-of-the-box experience. Codeberg plus a CI such as GitLab CI (self-hosted) or Drone can match functionality but requires integration effort.
- For strict GDPR and EU data residency, Codeberg provides a lower legal risk profile for EU organisations when using hosted or self-hosted options.

Migration playbook: moving from GitHub to Codeberg (commands included)
This section provides a reproducible playbook for repository migration, mirrored workflows, and rollback. The steps assume SSH access and basic Unix-like environment.
Step 1 — Inventory and planning
- Export repository list and metadata using GitHub API:
curl -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/orgs/ORG/repos?per_page=200" > repos.json.
- Identify repositories with LFS, large history, packages or Actions dependencies.
- Map required enterprise features (SSO, SAML, CI concurrency) and decide on hosted Codeberg vs self-hosted Forgejo.
Step 2 — Create target repos on Codeberg
- Create a repo via Codeberg UI or use the API; for scripted creation use
gh or write scripts against Codeberg’s API.
Commands to mirror a repo and push all refs:
GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa' git clone --mirror git@github.com:ORG/REPO.git repo.git
cd repo.git
- Push to Codeberg (example):
git remote add codeberg git@codeberg.org:USER/REPO.git
git push --mirror codeberg
- For LFS: install git-lfs and run
git lfs fetch --all and git lfs push --all codeberg after authentication.
Step 4 — Migrate issues and PR history
- Use tools such as
github-issue-mover, ghe-migrator, or write scripts using both platforms' APIs. For many organizations, the reproducible path is to export issues to JSON, transform and import via Codeberg API.
- Example skeleton export:
curl -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/ORG/REPO/issues?state=all" > issues.json
Step 5 — CI/CD mapping and continuity
Step 6 — DNS, webhooks, packages and final cutover
- Update CI tokens, package registry endpoints, and CI secrets.
- Communicate freeze windows to contributors.
- For rollback, preserve GitHub as a read-only mirror for a defined period and keep
git remote configurations to push back if required.
Troubleshooting
- Error:
remote: permission denied — ensure SSH keys are registered at Codeberg keys or the target host has proper git user mapping.
- Large repo push fails — split push by tags/refs or use
git filter-repo to trim large files before pushing.
CI/CD and automation: mapping GitHub Actions to alternatives
GitHub Actions offers a declarative, marketplace-driven automation model. Equivalent patterns when moving to Codeberg involve:
- Self-hosted runners: deploy runners that respond to webhooks. Use lightweight runner managers such as
act for local testing and Drone runner for production.
- CI replacement: GitLab CI (self-hosted), Drone, Jenkins, Buildkite or GitHub Actions (self-hosted if keeping repos mirrored) can replicate job flows.
- Secret management: centralize secrets in HashiCorp Vault, Azure Key Vault or similar; inject in CI via secure connectors.
Example: Converting a simple GitHub Actions job to Drone step (conceptual):
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: make test
- Equivalent Drone pipeline step:
kind: pipeline
name: default
steps:
- name: test
image: alpine/git
commands:
- git clone ${DRONE_REPO_LINK}
- make test
Costs and concurrency require benchmarking per CI provider. For high concurrency needs, hosted GitHub Actions may still be the most operationally efficient.
Enterprise considerations, security and compliance
SSO, SAML and enterprise features
- GitHub Enterprise offers SAML SSO, SCIM user provisioning and advanced audit logs. Documentation: GitHub Enterprise Docs.
- Codeberg’s hosted service focuses on individual and organization accounts; self-hosted Forgejo/Gitea deployments enable SAML via community plugins and are controllable within private infrastructure.
Supply-chain and code scanning
- For SCA and secret scanning, GitHub’s CodeQL and secret scanning are integrated. External scanners (Snyk, Trivy, SonarQube) can be integrated with Codeberg via CI pipelines.
- ENISA and EU cloud recommendations advocate for layered scanning and provenance tracking. Reference: ENISA.
Legal and governance
- For GDPR compliance, store PII within EU systems and document data processors. Use guidance at gdpr.eu.
- Maintain internal policies for external contribution, contributor license agreements (CLAs) and IP assignment.
FAQs
Is Codeberg suitable for large enterprise repositories?
Yes, when paired with self-hosted Forgejo/Gitea instances and appropriate infrastructure. Enterprise needs such as SSO, granular permissions and audit logs require additional configuration and potentially third-party extensions.
How do CI costs compare after migration?
Total Cost of Ownership depends on CI concurrency and maintenance. Hosted GitHub Actions shifts operational burden to the vendor; self-hosted CI (used with Codeberg) trades vendor fees for infrastructure and ops cost. For many EU teams, the legal and privacy savings offset increased ops overhead.
Will pull request history and issues transfer?
History and code transfer via git clone --mirror preserves branches and tags. Issues and PRs require API-driven exports and imports; existing tools handle common fields but some metadata (reviews, reactions) may need archival strategies.
What are the limits for repository size and search?
GitHub provides robust code search and higher repo size limits. Codeberg and typical Forgejo installs perform reliably for small to medium repos; extremely large monorepos may need specialized indexing or dedicated search services.
Can GitHub Actions be kept while using Codeberg?
Yes. A hybrid model keeps primary code on Codeberg and uses GitHub Actions by mirroring or by triggering Actions via webhooks, but licensing and integration complexity should be evaluated.
Conclusion
The Codeberg vs GitHub decision balances privacy and EU alignment against ecosystem richness and turnkey CI features. For organisations prioritizing GDPR compliance and European data residency, Codeberg or self-hosted Forgejo provides strong benefits at the cost of additional integration and ops work. For teams prioritizing rapid developer velocity with minimal ops, GitHub remains the pragmatic choice. The migration playbook and CI mapping above enable a controlled move with rollback options and measurable checkpoints. The optimal path depends on size, compliance needs and tolerance for operational overhead.